@dragonmastery/tamer 0.35.1 → 0.35.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tamer.mjs +24 -10
- package/dist/tamer.mjs.map +1 -1
- package/package.json +1 -1
package/dist/tamer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tamer.mjs","names":["_a","object","isPlainObject","_a","config","args","initializer","util.jsonStringifyReplacer","issue","error","core.$ZodAsyncError","util.finalizeIssue","core.config","parse","errors.$ZodRealError","parseAsync","errors.$ZodError","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","duration","version","_emoji","date","args","time","datetime","string","number","boolean","_a","inst","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","args","_a","util.aborted","checks","core.$ZodAsyncError","checkResult","canary","result","safeParse","safeParseAsync","regexes.string","_","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","util.prefixIssues","util.optionalKeys","r","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","results","left","right","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","meta","util.normalizeParams","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","describe","meta","process","_a","meta","id","schema","process","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","issue","util.jsonStringifyReplacer","issues","core.$constructor","util.mergeDefs","core.clone","def","meta","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","checks.overwrite","args","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","number","core._number","core._int","processors.booleanProcessor","core._boolean","processors.anyProcessor","core._any","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","output","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","processors.pipeProcessor","processors.readonlyProcessor","processors.customProcessor","core._custom","core._refine","core._superRefine","core.describe","core.meta","core._coercedNumber","schemas.ZodNumber","out: Record<string, unknown>","overlay: string | null","z.object","z.string","z\n .array","z\n .string","z.array","z\n .string","z\n .custom","z\n .object","z.enum","z.boolean","z.union","z.number","z\n .object","z.literal","z\n .enum","z.record","z\n .union","z.any","z\n .object","z\n .string","z\n .record","raw: unknown","config","entries: [string, WorkerConfig][]","parts: string[]","parsed: unknown","all: Array<{ uuid: string; name: string; created_at: string }>","all: Array<{ name: string; creation_date: string }>","cursor: string | undefined","all: Array<{ id: string; title: string }>","all: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }>","all: Row[]","all: Array<{ id: string; name: string; endpoint?: string }>","all: Array<{ id: string; name: string; type: string }>","all: Item[]","all: Array<{ id: string; name: string; scopes?: string[] }>","uuid","base64","config","out: Route[]","fieldPath: string","out: Record<string, string>","target: WorkerConfig | undefined","config","next: WorkerConfig","rest","mergedRoutes: Route[]","wranglerRoutes: Route[] | undefined","z.object","z.literal","z.string","z.boolean","z.number","z.enum","z\n .object","z.discriminatedUnion","z.array","z.record","config","uuid","unknown","tenantId: string","env: string","stackName: string","uuid","meta","config","refs: DiscoveredImportRef[]","m: RegExpExecArray | null","out: Record<string, Record<string, string>>","flat: Record<string, string>","tenant: TenantMeta","conventions?: NamingConventions","config","api: CFApiClient","env: string","uuid","record","config","out: SecretWorkerInput[]","required","workerSecretNames: string[]","uuid","chunks: Buffer[]","result: Record<string, string>","required","extras: string[]","entries: Record<string, string>","out: WorkerSecretsLoadTarget[]","record","entries: SecretReconcileEntry[]","required","args","drift: ResourceDrift","items: PlanItem[]","meta","STATUS_LABEL: Record<SecretReconcileStatus, string>","required","positional: string[]","opts: Record<string, string | boolean>","z.object","z.string","z.boolean","z.enum","z.coerce.number","z\n .object","opts: Record<string, string | boolean>","opts: Record<string, unknown>"],"sources":["../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/core/to-json-schema.js","../node_modules/zod/v4/core/json-schema-processors.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.js","../node_modules/zod/v4/classic/coerce.js","../src/core/config/merge-project-overlay.ts","../src/core/config/resolve-config-sources.ts","../src/core/config/loader.ts","../src/core/cloudflareEnv.ts","../src/core/api/pipelinesV1PathId.ts","../src/core/api/CFApiClient.ts","../src/core/secrets/secretsDb.ts","../src/core/secrets/masterKey.ts","../src/features/dispatch-namespace/dispatch-namespace.resolve.ts","../src/core/routes/routes.resolve.ts","../src/core/wrangler/wranglerOutFile.ts","../src/core/references/references.ts","../src/core/config/resolver.ts","../src/core/state/stateSchema.ts","../src/core/state/stackName.ts","../src/core/state/tamerStateDb.ts","../src/core/tenant/tenantKeys.ts","../src/core/state/StateConflictError.ts","../src/core/state/StateManager.ts","../src/core/imports/fetchStackImports.ts","../src/core/secrets/declared.ts","../src/core/naming/NamingEngine.ts","../src/core/config/namingFromConfig.ts","../src/core/secrets/SecretsVault.ts","../src/cli/commands/secrets/context.ts","../src/cli/commands/secrets/init.ts","../src/core/secrets/crypto.ts","../src/core/secrets/fingerprint.ts","../src/cli/commands/secrets/stdin.ts","../src/cli/commands/secrets/set.ts","../src/cli/commands/secrets/dotenv.ts","../src/cli/commands/secrets/load.ts","../src/cli/commands/secrets/get.ts","../src/cli/commands/secrets/list.ts","../src/cli/commands/secrets/rm.ts","../src/core/secrets/reconcile.ts","../src/cli/commands/secrets/verify.ts","../src/cli/commands/secrets/push.ts","../src/cli/commands/secrets/index.ts","../src/cli/args.ts","../src/cli/index.ts"],"sourcesContent":["/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","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 * Deep-merge `tamer/env/<env>.config.ts` onto `tamer/project.config.ts`.\n * See docs/design-tamer-project-config.md.\n */\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return (\n v !== null &&\n typeof v === \"object\" &&\n !Array.isArray(v) &&\n !(v instanceof Date)\n );\n}\n\nfunction validateOverlayWorkers(\n projectWorkers: Record<string, unknown>,\n overlayWorkers: Record<string, unknown>,\n): void {\n for (const k of Object.keys(overlayWorkers)) {\n if (!(k in projectWorkers)) {\n throw new Error(\n `Tamer env overlay: unknown worker key \"${k}\". ` +\n `Declare \"${k}\" in tamer/project.config.ts first — overlays may only patch existing workers.`,\n );\n }\n }\n}\n\nfunction mergeWorkerResources(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const pk = patch[k];\n if (pk !== undefined) {\n out[k] = pk;\n }\n }\n return out;\n}\n\nfunction mergeEnvMap(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\nfunction mergeWorkerConfig(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const key of Object.keys(patch)) {\n const pv = patch[key];\n if (pv === undefined) continue;\n\n if (key === \"vars\") {\n const bv = isPlainObject(base.vars) ? base.vars : {};\n const ov = isPlainObject(patch.vars) ? patch.vars : {};\n out.vars = { ...bv, ...ov };\n continue;\n }\n if (key === \"tamerRoutes\") {\n out.tamerRoutes = pv;\n continue;\n }\n if (key === \"tamerStaleRouteSweepZones\") {\n out.tamerStaleRouteSweepZones = pv;\n continue;\n }\n if (key === \"resources\") {\n if (isPlainObject(base.resources) && isPlainObject(pv)) {\n out.resources = mergeWorkerResources(base.resources, pv);\n } else {\n out.resources = pv;\n }\n continue;\n }\n if (key === \"env\") {\n if (isPlainObject(base.env) && isPlainObject(pv)) {\n out.env = mergeEnvMap(base.env, pv);\n } else {\n out.env = pv;\n }\n continue;\n }\n if (key === \"local\") {\n if (isPlainObject(base.local) && isPlainObject(pv)) {\n out.local = mergeWorkerConfig(\n base.local as Record<string, unknown>,\n pv as Record<string, unknown>,\n );\n } else {\n out.local = pv;\n }\n continue;\n }\n out[key] = pv;\n }\n return out;\n}\n\nfunction mergeWorkersRecord(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\n/**\n * Merge env overlay onto project config (both plain objects from `default` exports).\n * Does not run {@link materializeCloudflareBindings} — caller does that on the result.\n */\nexport function mergeProjectOverlay(\n project: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...project };\n for (const key of Object.keys(overlay)) {\n const ov = overlay[key];\n if (ov === undefined) continue;\n const pv = project[key];\n\n switch (key) {\n case \"tenant\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"naming\":\n out[key] = ov;\n break;\n case \"workers\":\n if (!isPlainObject(pv) || !isPlainObject(ov)) {\n out[key] = ov;\n break;\n }\n validateOverlayWorkers(pv, ov);\n out[key] = mergeWorkersRecord(pv, ov);\n break;\n case \"worker\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = mergeWorkerConfig(pv, ov);\n } else {\n out[key] = ov;\n }\n break;\n case \"outputs\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"logpushJobs\":\n case \"dispatchNamespaces\":\n case \"dnsRecords\":\n out[key] = ov;\n break;\n default:\n out[key] = ov;\n }\n }\n return out;\n}\n","import { existsSync } from \"fs\";\nimport { basename, dirname, join, resolve } from \"path\";\n\nexport type ResolvedConfigSources =\n | { mode: \"single\"; path: string }\n | { mode: \"merged\"; projectPath: string; overlayPath: string | null };\n\nfunction isProjectFileName(file: string): boolean {\n return file === \"project.config.ts\" || file === \"tamer.project.config.ts\";\n}\n\nfunction projectDirForMergedEntry(absProject: string): string {\n const dir = dirname(absProject);\n const file = basename(absProject);\n if (file === \"project.config.ts\") {\n return dir;\n }\n return dir;\n}\n\nfunction overlayPathForNestedLayout(projectDir: string, env: string): string {\n return resolve(projectDir, \"env\", `${env}.config.ts`);\n}\n\nfunction overlayPathForFlatLayout(projectRoot: string, env: string): string {\n return resolve(projectRoot, `tamer.env.${env}.ts`);\n}\n\nfunction rejectLegacyTamerConfigFile(context: string): never {\n throw new Error(\n `${context}: tamer.config.ts is not supported. ` +\n `Move the default export to tamer/project.config.ts and optional per-env overlays to tamer/env/<env>.config.ts ` +\n `(or use tamer.project.config.ts at the repo root with optional tamer.env.<env>.ts).`,\n );\n}\n\n/**\n * Resolve which config file(s) to load. See docs/design-tamer-project-config.md.\n *\n * - **Merged:** `tamer/project.config.ts` or `tamer.project.config.ts`, plus optional env overlay.\n * - **Single:** explicit `--config` path to any `.ts` file **except** `tamer.config.ts` (e.g. alternate snapshots in tests).\n */\nexport function resolveConfigSources(\n cwd: string,\n explicitConfigPath: string | undefined,\n env: string | undefined,\n): ResolvedConfigSources {\n if (explicitConfigPath) {\n const abs = resolve(cwd, explicitConfigPath);\n const file = basename(abs);\n if (file === \"tamer.config.ts\") {\n rejectLegacyTamerConfigFile(\"--config\");\n }\n if (isProjectFileName(file)) {\n const projectDir = projectDirForMergedEntry(abs);\n let overlay: string | null = null;\n if (env) {\n if (file === \"project.config.ts\") {\n const candidate = overlayPathForNestedLayout(projectDir, env);\n if (existsSync(candidate)) overlay = candidate;\n } else {\n const candidate = overlayPathForFlatLayout(dirname(abs), env);\n if (existsSync(candidate)) overlay = candidate;\n }\n }\n return { mode: \"merged\", projectPath: abs, overlayPath: overlay };\n }\n return { mode: \"single\", path: abs };\n }\n\n const nestedProject = resolve(cwd, \"tamer\", \"project.config.ts\");\n if (existsSync(nestedProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForNestedLayout(\n dirname(nestedProject),\n env,\n );\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: nestedProject,\n overlayPath: overlay,\n };\n }\n\n const flatProject = resolve(cwd, \"tamer.project.config.ts\");\n if (existsSync(flatProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForFlatLayout(cwd, env);\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: flatProject,\n overlayPath: overlay,\n };\n }\n\n if (existsSync(resolve(cwd, \"tamer.config.ts\"))) {\n rejectLegacyTamerConfigFile(\"Config discovery\");\n }\n\n throw new Error(\n `No Tamer project config under ${cwd}. ` +\n `Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`,\n );\n}\n","import { resolve } from \"path\";\nimport { z } from \"zod\";\nimport { materializeCloudflareBindings } from \"../../dx/normalize.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../types.js\";\nimport { TAMER_OVERLAY_ENV_KEY } from \"../../types.js\";\nimport { mergeProjectOverlay } from \"./merge-project-overlay.js\";\nimport { resolveConfigSources } from \"./resolve-config-sources.js\";\n\nconst TENANT_SHARD_ROLE_RE = /^[a-z][a-z0-9_-]*$/;\n\nconst TenantMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n d1Shards: z\n .array(\n z\n .string()\n .min(1)\n .refine((s) => TENANT_SHARD_ROLE_RE.test(s), {\n // Roles flow into D1 database names (`db_{role}_…`); D1 names\n // accept `[A-Za-z0-9_-]` and Cloudflare lowercases on read,\n // so we lock roles to the same lowercase subset to avoid the\n // \"config says `System` but Cloudflare returns `system`\"\n // adoption drift.\n error:\n \"tenant.d1Shards entries must be lowercase ASCII (letters, digits, `_`, `-`) and start with a letter\",\n }),\n )\n .optional()\n .refine(\n (arr) => !arr || new Set(arr).size === arr.length,\n \"tenant.d1Shards must not contain duplicate roles\",\n ),\n protectedEnvs: z.array(z.string().min(1)).optional(),\n ephemeralEnvPattern: z\n .string()\n .min(1)\n .optional()\n .refine(\n (s) => {\n if (s == null) return true;\n try {\n new RegExp(s);\n return true;\n } catch {\n return false;\n }\n },\n // Compile-fail at config-load time so a typo in\n // `ephemeralEnvPattern` surfaces here instead of later when\n // `apply` / `provision-tenant` tries to resolve a namespace.\n \"tenant.ephemeralEnvPattern must be a valid JavaScript RegExp source string\",\n ),\n});\n\nconst CloudflareNameFnSchema = z\n .custom<(tenantId: string, env: string, ctx?: { shardDate?: string }) => string>(\n (v) => v === undefined || typeof v === \"function\",\n )\n .optional();\n\nconst D1ResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n type: z.enum([\"single\", \"sharded\"]),\n cloudflareName: CloudflareNameFnSchema,\n ownership: z.enum([\"managed\", \"external\"]).optional(),\n databaseName: z.string().optional(),\n binding: z.string().optional(),\n shardDate: z.string().optional(),\n registryRole: z.string().optional(),\n legacyIds: z.array(z.string().min(1)).optional(),\n legacyBindings: z.array(z.string().min(1)).optional(),\n current: z.boolean().optional(),\n migrationsDir: z.string().optional(),\n migrationsTable: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n })\n .refine(\n (d) =>\n d.ownership !== \"external\" ||\n (typeof d.databaseName === \"string\" && d.databaseName.length > 0),\n { error: \"resources.d1: ownership 'external' requires non-empty databaseName\" },\n )\n .refine(\n (d) => d.ownership !== \"external\" || d.type === \"single\",\n { error: \"resources.d1: ownership 'external' only supports type 'single'\" },\n )\n .refine(\n (d) => !d.shardDate || d.type === \"sharded\",\n { error: \"resources.d1: shardDate only applies to type 'sharded'\" },\n )\n .refine(\n (d) => {\n if (!d.shardDate) return true;\n const t = d.shardDate.trim();\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(t) || /^\\d{8}$/.test(t);\n },\n { error: \"resources.d1: shardDate must be YYYY-MM-DD or YYYYMMDD\" },\n );\n\nconst R2ResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n});\n\nconst KVResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n});\n\nconst QueueResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n consumerOnly: z.boolean().optional(),\n});\n\nconst HyperdriveSecretSchema = z.union([\n z.string(),\n z.object({ fromEnv: z.string().min(1) }),\n]);\n\nconst HyperdriveOriginSchema = z.object({\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n host: z.string().min(1),\n port: z.number().optional(),\n database: z.string().min(1),\n user: z.string().min(1),\n password: HyperdriveSecretSchema,\n access_client_id: z.string().optional(),\n access_client_secret: HyperdriveSecretSchema.optional(),\n});\n\nconst HyperdriveResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n origin: HyperdriveOriginSchema,\n caching: z\n .object({\n disabled: z.boolean().optional(),\n max_age: z.number().optional(),\n stale_while_revalidate: z.number().optional(),\n })\n .optional(),\n mtls: z\n .object({\n ca_certificate_id: z.string().optional(),\n mtls_certificate_id: z.string().optional(),\n })\n .optional(),\n localConnectionString: z.string().optional(),\n});\n\nconst VectorizeResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n dimensions: z.number().int().positive(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n description: z.string().optional(),\n});\n\nconst AIGatewayResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n cacheTtl: z.number().int().nonnegative().optional(),\n cacheInvalidateOnUpdate: z.boolean().optional(),\n collectLogs: z.boolean().optional(),\n authentication: z.boolean().optional(),\n rateLimitingInterval: z.number().int().nonnegative().optional(),\n rateLimitingLimit: z.number().int().nonnegative().optional(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]).optional(),\n});\n\nconst DispatchNamespaceResourceSchema = z.object({\n logicalName: z.string().min(1),\n namespace: z.string().min(1),\n envSuffix: z.boolean().optional(),\n});\n\nconst LogpushJobR2DestinationSchema = z.object({\n bucketLogicalName: z.string().min(1),\n pathPrefix: z.string().optional(),\n accessKeyIdEnv: z.string().min(1),\n secretAccessKeyEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesIngestSchema = z.object({\n streamId: z.string().min(1),\n pipelineId: z.string().min(1),\n bearerTokenEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesAutoSchema = z.object({\n catalogBucketLogicalName: z.string().min(1),\n tableName: z.string().min(1),\n namespace: z.string().min(1).optional(),\n /** When not `false`, new sinks get `${tableName}_${Date.now()}` (default). */\n tableNameAppendTimestamp: z.boolean().optional(),\n sinkRowGroupBytes: z.number().int().positive().optional(),\n sinkRollingFileSizeBytes: z.number().int().positive().optional(),\n sinkRollingIntervalSeconds: z.number().int().positive().optional(),\n});\n\nconst LogpushJobResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n dataset: z.literal(\"workers_trace_events\"),\n jobName: z.string().optional(),\n r2: LogpushJobR2DestinationSchema.optional(),\n pipelinesIngest: LogpushJobPipelinesIngestSchema.optional(),\n pipelinesAuto: LogpushJobPipelinesAutoSchema.optional(),\n destinationConfEnv: z.string().min(1).optional(),\n destinationConfFromJobId: z.number().int().positive().optional(),\n destinationConfFromJobIdEnv: z.string().min(1).optional(),\n filter: z.string().min(1).optional(),\n fieldNames: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n })\n .refine(\n (d) => {\n const hasR2 = Boolean(d.r2);\n const n =\n (d.destinationConfEnv ? 1 : 0) +\n (d.destinationConfFromJobId != null ? 1 : 0) +\n (d.destinationConfFromJobIdEnv ? 1 : 0) +\n (d.pipelinesIngest ? 1 : 0) +\n (d.pipelinesAuto ? 1 : 0);\n if (hasR2) return n === 0;\n return n === 1;\n },\n {\n error:\n \"logpushJobs: set exactly one of r2 | pipelinesIngest | pipelinesAuto | destinationConfEnv | destinationConfFromJobId | destinationConfFromJobIdEnv\",\n },\n )\n .refine(\n (d) =>\n !(\n d.destinationConfFromJobId != null && d.destinationConfFromJobIdEnv\n ),\n {\n error:\n \"logpushJobs: use only one of destinationConfFromJobId or destinationConfFromJobIdEnv\",\n },\n )\n .refine((d) => !(d.pipelinesIngest && d.pipelinesAuto), {\n error: \"logpushJobs: use only one of pipelinesIngest or pipelinesAuto\",\n });\n\nconst DnsRecordResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n zoneId: z.string().min(1),\n type: z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n ]),\n name: z.string().min(1),\n content: z.string().min(1),\n ttl: z.number().int().positive().optional(),\n proxied: z.boolean().optional(),\n priority: z.number().int().nonnegative().optional(),\n comment: z.string().optional(),\n skipEnvs: z.array(z.string()).optional(),\n preserveOnDestroy: z.boolean().optional(),\n});\n\nconst PipelineResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n sql: z.string().min(1),\n binding: z.string().min(1).optional(),\n});\n\nconst WorkflowResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n className: z.string().min(1),\n scriptName: z.string().min(1).optional(),\n binding: z.string().min(1).optional(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n});\n\nconst SecretsStoreResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n});\n\nconst SecretsStoreSecretBindingSchema = z.object({\n binding: z.string().min(1),\n store: z.string().min(1),\n secretName: z.string().min(1),\n});\n\nconst WorkerSecretsConfigSchema = z.object({\n required: z.array(z.string().min(1)),\n});\n\nconst WorkerResourcesSchema = z.object({\n d1: z.array(D1ResourceConfigSchema).optional(),\n r2: z.array(R2ResourceConfigSchema).optional(),\n kv: z.array(KVResourceConfigSchema).optional(),\n queues: z.array(QueueResourceConfigSchema).optional(),\n hyperdrive: z.array(HyperdriveResourceConfigSchema).optional(),\n vectorize: z.array(VectorizeResourceConfigSchema).optional(),\n aiGateway: z.array(AIGatewayResourceConfigSchema).optional(),\n pipelines: z.array(PipelineResourceConfigSchema).optional(),\n workflows: z.array(WorkflowResourceConfigSchema).optional(),\n secretsStores: z.array(SecretsStoreResourceConfigSchema).optional(),\n secretsStoreSecrets: z.array(SecretsStoreSecretBindingSchema).optional(),\n});\n\nconst WranglerRouteSchema = z.object({\n pattern: z.string(),\n custom_domain: z.boolean().optional(),\n zone_name: z.string().optional(),\n zone_id: z.string().optional(),\n});\n\nconst WranglerAssetsSchema = z.object({\n directory: z.string(),\n binding: z.string().optional(),\n not_found_handling: z\n .enum([\"single-page-application\", \"return-404\"])\n .optional(),\n});\n\nconst EnvOverrideSchema = z\n .object({\n vars: z.record(z.string(), z.string()).optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst WorkerConfigSchema = z\n .object({\n path: z.string().optional(),\n config: z.string().optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n dispatchNamespace: z.string().optional(),\n main: z.string().optional(),\n compatibility_date: z.string().optional(),\n compatibility_flags: z.array(z.string()).optional(),\n limits: z.record(z.string(), z.union([z.number(), z.string()])).optional(),\n workers_dev: z.boolean().optional(),\n preview_urls: z.boolean().optional(),\n resources: WorkerResourcesSchema.optional(),\n secrets: WorkerSecretsConfigSchema.optional(),\n alias: z.record(z.string(), z.string()).optional(),\n vars: z.record(z.string(), z.string()).optional(),\n local: EnvOverrideSchema.optional(),\n env: z.record(z.string(), EnvOverrideSchema).optional(),\n assets: WranglerAssetsSchema.optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst ShardRegistryCodegenConfigSchema = z.object({\n worker: z.string().min(1).optional(),\n outFile: z.string().min(1).optional(),\n exportName: z\n .string()\n .min(1)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/, {\n error: \"codegen.shardRegistry.exportName must be a valid JS identifier\",\n })\n .optional(),\n});\n\nconst CodegenConfigSchema = z.object({\n shardRegistry: ShardRegistryCodegenConfigSchema.optional(),\n});\n\nconst CfiConfigSchema = z\n .object({\n tenant: TenantMetaSchema,\n account_id: z.string().optional(),\n compatibility_date: z.string().optional(),\n naming: z.any().optional(),\n codegen: CodegenConfigSchema.optional(),\n dispatchNamespaces: z.array(DispatchNamespaceResourceSchema).optional(),\n dnsRecords: z.array(DnsRecordResourceConfigSchema).optional(),\n logpushJobs: z.array(LogpushJobResourceConfigSchema).optional(),\n stack: z\n .object({\n // Stack name flows into the D1 row key (`cfi_state:{name}`) and the\n // `${tamer:import:<name>.<output>}` parser, so the same identifier\n // shape as output names keeps both surfaces consistent.\n name: z\n .string()\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"stack.name must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n })\n .optional(),\n description: z.string().min(1).optional(),\n })\n .optional(),\n outputs: z\n .record(\n // CloudFormation-ish output names: must start with a letter, then\n // letters/digits/`_`/`-`. Keeps them safe for filenames, env-var\n // exports, and `${tamer:import:stack.<name>}` parsing.\n z.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"outputs key must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n }),\n z.string().min(1),\n )\n .optional(),\n worker: WorkerConfigSchema.optional(),\n workers: z.record(z.string(), WorkerConfigSchema).optional(),\n })\n .refine(\n (data: { worker?: unknown; workers?: unknown }) =>\n (data.worker ?? data.workers) && !(data.worker && data.workers),\n { error: \"Must have either worker or workers, not both\" },\n );\n\nexport interface LoadConfigOptions {\n /** Selects `tamer/env/<env>.config.ts` when present (merged project layout). */\n env?: string;\n cwd?: string;\n}\n\nexport async function loadConfig(\n configPath?: string,\n options: LoadConfigOptions = {},\n): Promise<CfiConfig> {\n const cwd = options.cwd ?? process.cwd();\n const sources = resolveConfigSources(cwd, configPath, options.env);\n\n let raw: unknown;\n\n if (sources.mode === \"single\") {\n const mod = await import(sources.path);\n raw = mod.default;\n if (!raw) {\n throw new Error(`No default export in ${sources.path}`);\n }\n } else {\n const pMod = await import(sources.projectPath);\n const projectRaw = pMod.default;\n if (!projectRaw || typeof projectRaw !== \"object\") {\n throw new Error(`No default export in ${sources.projectPath}`);\n }\n let merged = projectRaw as Record<string, unknown>;\n if (sources.overlayPath) {\n const oMod = await import(sources.overlayPath);\n const overlayRaw = oMod.default;\n if (!overlayRaw || typeof overlayRaw !== \"object\") {\n throw new Error(\n `Env overlay must default-export an object: ${sources.overlayPath}`,\n );\n }\n const overlayObj = overlayRaw as Record<string, unknown>;\n const declaredEnv = overlayObj[TAMER_OVERLAY_ENV_KEY];\n if (declaredEnv !== undefined) {\n if (typeof declaredEnv !== \"string\") {\n throw new Error(\n `Env overlay ${sources.overlayPath}: ${TAMER_OVERLAY_ENV_KEY} must be a string`,\n );\n }\n if (options.env !== declaredEnv) {\n throw new Error(\n `Env overlay ${sources.overlayPath} sets ${TAMER_OVERLAY_ENV_KEY} \"${declaredEnv}\" but this load uses --env \"${options.env ?? \"(none)\"}\".`,\n );\n }\n }\n const { [TAMER_OVERLAY_ENV_KEY]: _strip, ...overlayRest } = overlayObj;\n merged = mergeProjectOverlay(merged, overlayRest);\n }\n raw = merged;\n }\n\n const parsed = CfiConfigSchema.safeParse(materializeCloudflareBindings(raw));\n if (!parsed.success) {\n throw new Error(`Invalid Tamer project config: ${parsed.error.message}`);\n }\n return parsed.data as CfiConfig;\n}\n\nexport async function getWorkers(\n config: CfiConfig,\n baseDir?: string,\n): Promise<[string, WorkerConfig][]> {\n const cwd = baseDir ?? process.cwd();\n\n if (\"worker\" in config && config.worker) {\n const w = await resolveWorkerConfigRef(config.worker, cwd);\n return [[\"default\", w]];\n }\n if (\"workers\" in config && config.workers) {\n const entries: [string, WorkerConfig][] = [];\n for (const [key, wc] of Object.entries(config.workers)) {\n entries.push([key, await resolveWorkerConfigRef(wc, cwd)]);\n }\n return entries;\n }\n return [];\n}\n\nasync function resolveWorkerConfigRef(\n wc: WorkerConfig,\n baseDir: string,\n): Promise<WorkerConfig> {\n if (!wc.config) return wc;\n const configPath = resolve(baseDir, wc.config);\n const mod = await import(configPath);\n const loaded = mod.default;\n if (!loaded) {\n throw new Error(`No default export in ${configPath}`);\n }\n return {\n ...loaded,\n path: wc.path,\n config: wc.config,\n } as WorkerConfig;\n}\n","/**\n * Wrangler-aligned Cloudflare credentials (same names as `wrangler` CLI).\n * @see https://developers.cloudflare.com/workers/wrangler/system-environment-variables/\n */\nexport function cloudflareAccountIdFromEnv(): string | undefined {\n return process.env.CLOUDFLARE_ACCOUNT_ID;\n}\n\nexport function cloudflareApiTokenFromEnv(): string {\n return process.env.CLOUDFLARE_API_TOKEN ?? \"\";\n}\n","/**\n * Pipelines v1 path segments (streams, sinks, SQL pipelines) expect **stream_id**\n * / **sink_id** as **exactly 32 lower-case hex characters** (no hyphens). The API\n * returns 400 if the URL contains a hyphenated UUID (36 chars) — see\n * `stream_id: String must contain exactly 32 character(s)`.\n *\n * State and list APIs may return ids with or without hyphens; we normalize to 32-hex\n * for GET/DELETE paths.\n */\nexport function pipelinesV1IdForPath(id: string): string {\n const c = id.trim().toLowerCase().replace(/-/g, \"\");\n if (!/^[0-9a-f]{32}$/.test(c)) {\n return id.trim();\n }\n return c;\n}\n","import type {\n CFD1ListResponse,\n CFR2ListResponse,\n CFKVListResponse,\n} from \"./CFApiClient.types.js\";\nimport { cloudflareApiTokenFromEnv } from \"../cloudflareEnv.js\";\nimport { pipelinesV1IdForPath } from \"./pipelinesV1PathId.js\";\n\nconst CF_API_BASE = \"https://api.cloudflare.com/client/v4\";\n\n/**\n * Renders the Cloudflare API `errors` / `messages` array into a single string\n * (message, error code, documentation URL, JSON pointer) for operator-friendly logs.\n */\nfunction describeCloudflareErrorItem(e: unknown): string {\n if (e == null) return \"null\";\n if (typeof e === \"string\") return e;\n if (typeof e !== \"object\") return String(e);\n const o = e as Record<string, unknown>;\n const parts: string[] = [];\n if (typeof o.message === \"string\" && o.message) parts.push(o.message);\n if (typeof o.code === \"number\") parts.push(`[code: ${o.code}]`);\n if (typeof o.code === \"string\" && o.code) parts.push(`[code: ${o.code}]`);\n if (typeof o.documentation_url === \"string\" && o.documentation_url) {\n parts.push(o.documentation_url);\n }\n const src = o.source;\n if (src && typeof src === \"object\" && \"pointer\" in src) {\n const p = (src as { pointer?: string }).pointer;\n if (typeof p === \"string\" && p) parts.push(`(field: ${p})`);\n }\n if (Array.isArray(o.error_chain) && o.error_chain.length > 0) {\n parts.push(\n `[chain: ${o.error_chain.map(describeCloudflareErrorItem).join(\" → \")}]`,\n );\n }\n if (parts.length) return parts.join(\" \");\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n}\n\nfunction formatCloudflareErrorBody(\n errors: unknown,\n messages: unknown,\n fallback: string,\n): string {\n const errList = formatCloudflareList(errors) || fallback;\n const msgList = formatCloudflareList(messages);\n if (msgList) return `${errList} — messages: ${msgList}`;\n return errList;\n}\n\nfunction formatCloudflareList(v: unknown): string {\n if (!Array.isArray(v) || v.length === 0) return \"\";\n return v.map(describeCloudflareErrorItem).join(\" | \");\n}\n\nexport class CFApiClient {\n private accountId: string;\n private apiToken: string;\n\n constructor(accountId: string, apiToken?: string) {\n this.accountId = accountId;\n this.apiToken = apiToken ?? cloudflareApiTokenFromEnv();\n if (!this.apiToken) {\n throw new Error(\"CLOUDFLARE_API_TOKEN is required\");\n }\n }\n\n getAccountId(): string {\n return this.accountId;\n }\n\n /** Lightweight account read — validates token + account scope. */\n async accountRead(): Promise<{ id: string; name: string }> {\n const data = await this.request<{ result: { id: string; name: string } }>(\n `/accounts/${this.accountId}`,\n );\n return data.result;\n }\n\n /**\n * Get a single Worker script by name (account-scoped, **not** dispatch).\n * Returns `undefined` when Cloudflare responds 404 so callers can treat it\n * as \"not deployed\" without try/catch on the message.\n *\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/get/\n */\n async workersScriptGet(\n scriptName: string,\n ): Promise<{ id: string; created_on?: string; modified_on?: string } | undefined> {\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}`;\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n if (res.status === 404) return undefined;\n const data = (await res.json()) as {\n success?: boolean;\n errors?: Array<{ message: string }>;\n result?: { id: string; created_on?: string; modified_on?: string };\n };\n if (!res.ok) {\n const msg =\n data?.errors?.map((e) => e.message).join(\"; \") ?? res.statusText;\n throw new Error(`CF API error (workers script get): ${msg}`);\n }\n return data.result;\n }\n\n /**\n * Upsert a plain-text secret binding on a Worker script.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/update/\n */\n async workersSecretPut(\n scriptName: string,\n secret: { name: string; text: string },\n ): Promise<{ name: string; type: \"secret_text\" }> {\n const data = await this.request<{\n result: { name: string; type: \"secret_text\" };\n }>(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets`,\n {\n method: \"PUT\",\n body: JSON.stringify({\n name: secret.name,\n text: secret.text,\n type: \"secret_text\",\n }),\n },\n );\n return data.result;\n }\n\n /**\n * List secret binding names on a Worker script. Values are write-only and\n * are not returned by the Cloudflare API.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/list/\n */\n async workersSecretsList(scriptName: string): Promise<string[]> {\n const data = await this.request<{\n result?: Array<{ name: string; type?: string }>;\n }>(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets`,\n );\n return (data.result ?? []).map((s) => s.name);\n }\n\n /**\n * Remove a secret binding from a Worker script.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/delete/\n */\n async workersSecretDelete(scriptName: string, name: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets/${encodeURIComponent(name)}`,\n { method: \"DELETE\" },\n );\n }\n\n private async request<T>(\n path: string,\n options: RequestInit = {}\n ): Promise<T> {\n const method = (options.method ?? \"GET\").toUpperCase();\n const url = `${CF_API_BASE}${path}`;\n const res = await fetch(url, {\n ...options,\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n let parsed: unknown;\n try {\n parsed = await res.json();\n } catch {\n throw new Error(\n `CF API error: ${method} \\`${path}\\` → HTTP ${res.status} (response was not valid JSON)`,\n );\n }\n\n /** Some endpoints (e.g. R2 catalog disable) respond `200` with literal JSON `null`. */\n const data = (\n parsed !== null && typeof parsed === \"object\"\n ? parsed\n : {}\n ) as T & {\n success?: boolean;\n errors?: unknown[];\n messages?: unknown[];\n };\n\n const httpError = !res.ok;\n const bodySuccessFalse = data.success === false;\n if (httpError || bodySuccessFalse) {\n const detail = formatCloudflareErrorBody(\n data.errors,\n data.messages,\n res.statusText || \"no error array in body\",\n );\n throw new Error(\n `CF API error: ${method} \\`${path}\\` → HTTP ${res.status}. ${detail}`,\n );\n }\n return data;\n }\n\n async d1ListAll(): Promise<Array<{ uuid: string; name: string; created_at: string }>> {\n const all: Array<{ uuid: string; name: string; created_at: string }> = [];\n let page = 1;\n const perPage = 100;\n\n while (true) {\n const data = await this.request<CFD1ListResponse>(\n `/accounts/${this.accountId}/d1/database?per_page=${perPage}&page=${page}`\n );\n all.push(...data.result);\n const info = data.result_info;\n if (!info || info.count < perPage) break;\n page++;\n }\n return all;\n }\n\n async r2ListAll(): Promise<Array<{ name: string; creation_date: string }>> {\n const all: Array<{ name: string; creation_date: string }> = [];\n const perPage = 100;\n let cursor: string | undefined;\n\n while (true) {\n const qs = new URLSearchParams({ per_page: String(perPage) });\n if (cursor) qs.set(\"cursor\", cursor);\n const data = await this.request<CFR2ListResponse>(\n `/accounts/${this.accountId}/r2/buckets?${qs.toString()}`\n );\n const buckets = data.result?.buckets ?? [];\n all.push(\n ...buckets.map((b) => ({\n name: b.name ?? \"\",\n creation_date: b.creation_date ?? \"\",\n })),\n );\n const next = data.result_info?.cursor;\n if (!next) break;\n cursor = next;\n }\n return all;\n }\n\n async kvListAll(): Promise<Array<{ id: string; title: string }>> {\n const all: Array<{ id: string; title: string }> = [];\n let page = 1;\n const perPage = 100;\n\n while (true) {\n const data = await this.request<CFKVListResponse>(\n `/accounts/${this.accountId}/storage/kv/namespaces?per_page=${perPage}&page=${page}`\n );\n all.push(...data.result);\n const info = data.result_info;\n if (!info || info.count < perPage) break;\n page++;\n }\n return all;\n }\n\n async d1Create(name: string): Promise<{ uuid: string }> {\n const data = await this.request<{ result: { uuid: string } }>(\n `/accounts/${this.accountId}/d1/database`,\n {\n method: \"POST\",\n body: JSON.stringify({ name }),\n }\n );\n return data.result;\n }\n\n async r2Create(name: string, location: string = \"auto\"): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2/buckets`,\n {\n method: \"POST\",\n body: JSON.stringify({ name, location }),\n }\n );\n }\n\n async kvCreate(title: string): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/accounts/${this.accountId}/storage/kv/namespaces`,\n {\n method: \"POST\",\n body: JSON.stringify({ title }),\n }\n );\n return data.result;\n }\n\n async d1Delete(databaseId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/d1/database/${databaseId}`,\n { method: \"DELETE\" }\n );\n }\n\n /**\n * Run SQL against a D1 database (HTTP API).\n * @see https://developers.cloudflare.com/d1/build-with-d1/rest-api/\n */\n async d1Query(\n databaseId: string,\n sql: string,\n params: unknown[] = [],\n ): Promise<{ rows: Array<Record<string, unknown>> }> {\n const data = await this.request<{\n result?: Array<{\n results?: Array<Record<string, unknown>>;\n success?: boolean;\n }>;\n }>(`/accounts/${this.accountId}/d1/database/${databaseId}/query`, {\n method: \"POST\",\n body: JSON.stringify({ sql, params }),\n });\n const rows = data.result?.[0]?.results ?? [];\n return { rows };\n }\n\n async r2Delete(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2/buckets/${bucketName}`,\n { method: \"DELETE\" }\n );\n }\n\n /**\n * Download an object from R2 (HTTP API).\n * @see https://developers.cloudflare.com/api/resources/r2/subresources/buckets/subresources/objects/methods/get/\n */\n async r2GetObject(bucketName: string, objectKey: string): Promise<ArrayBuffer> {\n const pathEncoded = objectKey\n .split(\"/\")\n .map((seg) => encodeURIComponent(seg))\n .join(\"/\");\n const url = `${CF_API_BASE}/accounts/${this.accountId}/r2/buckets/${encodeURIComponent(bucketName)}/objects/${pathEncoded}`;\n const res = await fetch(url, {\n headers: { Authorization: `Bearer ${this.apiToken}` },\n });\n if (!res.ok) {\n let errMsg = res.statusText;\n try {\n const data = (await res.json()) as {\n errors?: Array<{ message: string }>;\n };\n errMsg = data?.errors?.map((e) => e.message).join(\"; \") ?? errMsg;\n } catch {\n /* binary or empty */\n }\n throw new Error(`CF API error (R2 get): ${errMsg}`);\n }\n return res.arrayBuffer();\n }\n\n async kvDelete(namespaceId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/storage/kv/namespaces/${namespaceId}`,\n { method: \"DELETE\" }\n );\n }\n\n // ── Queues ───────────────────────────────────────────────────────────────\n\n /**\n * List every Cloudflare Queue in the account.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/list/\n */\n async queuesListAll(): Promise<\n Array<{ queue_id: string; queue_name: string; created_on?: string; modified_on?: string }>\n > {\n const all: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }>;\n result_info?: { count?: number; total_count?: number };\n }>(\n `/accounts/${this.accountId}/queues?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page++;\n }\n return all;\n }\n\n /**\n * Create a new Cloudflare Queue.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/create/\n */\n async queueCreate(\n queueName: string,\n ): Promise<{ queue_id: string; queue_name: string }> {\n const data = await this.request<{\n result: { queue_id: string; queue_name: string };\n }>(`/accounts/${this.accountId}/queues`, {\n method: \"POST\",\n body: JSON.stringify({ queue_name: queueName }),\n });\n return data.result;\n }\n\n /**\n * Delete a Cloudflare Queue by id.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/delete/\n */\n async queueDelete(queueId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/queues/${encodeURIComponent(queueId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Hyperdrive ───────────────────────────────────────────────────────────\n\n /**\n * List every Hyperdrive config in the account.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/list/\n */\n async hyperdriveListAll(): Promise<\n Array<{\n id: string;\n name: string;\n origin?: { scheme?: string; host?: string; database?: string; port?: number; user?: string };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: string;\n name: string;\n origin?: {\n scheme?: string;\n host?: string;\n database?: string;\n port?: number;\n user?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n }>;\n }>(`/accounts/${this.accountId}/hyperdrive/configs`);\n return data.result ?? [];\n }\n\n /**\n * Create a Hyperdrive config.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/create/\n */\n async hyperdriveCreate(body: {\n name: string;\n origin: {\n scheme: string;\n host: string;\n port?: number;\n database: string;\n user: string;\n password: string;\n access_client_id?: string;\n access_client_secret?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n mtls?: { ca_certificate_id?: string; mtls_certificate_id?: string };\n }): Promise<{ id: string; name: string }> {\n const data = await this.request<{ result: { id: string; name: string } }>(\n `/accounts/${this.accountId}/hyperdrive/configs`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Patch an existing Hyperdrive configuration in place. Cloudflare accepts\n * partial updates here (true `PATCH`), so callers may send only the\n * fields that drifted. Origin patches must include the full origin\n * payload (the password is write-only and never returned, so Tamer\n * reads it back from the resource config every apply).\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/edit/\n */\n async hyperdrivePatch(\n configId: string,\n body: {\n name?: string;\n origin?: {\n scheme?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n access_client_id?: string;\n access_client_secret?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n mtls?: { ca_certificate_id?: string; mtls_certificate_id?: string };\n origin_connection_limit?: number;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/hyperdrive/configs/${encodeURIComponent(configId)}`,\n { method: \"PATCH\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete a Hyperdrive config by id.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/delete/\n */\n async hyperdriveDelete(configId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/hyperdrive/configs/${encodeURIComponent(configId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Vectorize (v2) ───────────────────────────────────────────────────────\n\n /**\n * List every Vectorize index in the account (v2 storage subsystem).\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/list/\n */\n async vectorizeListAll(): Promise<\n Array<{\n id?: string;\n name: string;\n description?: string;\n config?: { dimensions: number; metric: string };\n created_on?: string;\n modified_on?: string;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id?: string;\n name: string;\n description?: string;\n config?: { dimensions: number; metric: string };\n created_on?: string;\n modified_on?: string;\n }>;\n }>(`/accounts/${this.accountId}/vectorize/v2/indexes`);\n return data.result ?? [];\n }\n\n /**\n * Create a Vectorize v2 index. `dimensions` and `metric` are immutable.\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/create/\n */\n async vectorizeCreate(body: {\n name: string;\n description?: string;\n config: { dimensions: number; metric: string };\n }): Promise<{ id?: string; name: string }> {\n const data = await this.request<{ result: { id?: string; name: string } }>(\n `/accounts/${this.accountId}/vectorize/v2/indexes`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete a Vectorize index by name.\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/delete/\n */\n async vectorizeDelete(indexName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/vectorize/v2/indexes/${encodeURIComponent(indexName)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── AI Gateway ───────────────────────────────────────────────────────────\n\n /**\n * List every AI Gateway in the account.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/list/\n */\n async aiGatewayListAll(): Promise<\n Array<{\n id: string;\n cache_ttl?: number;\n cache_invalidate_on_update?: boolean;\n collect_logs?: boolean;\n rate_limiting_interval?: number;\n rate_limiting_limit?: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n created_at?: string;\n modified_at?: string;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: string;\n cache_ttl?: number;\n cache_invalidate_on_update?: boolean;\n collect_logs?: boolean;\n rate_limiting_interval?: number;\n rate_limiting_limit?: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n created_at?: string;\n modified_at?: string;\n }>;\n }>(`/accounts/${this.accountId}/ai-gateway/gateways?per_page=100`);\n return data.result ?? [];\n }\n\n /**\n * Create an AI Gateway. The gateway `id` is user-supplied and acts as both\n * primary key and routing slug under `https://gateway.ai.cloudflare.com/`.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/create/\n */\n async aiGatewayCreate(body: {\n id: string;\n cache_ttl: number;\n cache_invalidate_on_update: boolean;\n collect_logs: boolean;\n rate_limiting_interval: number;\n rate_limiting_limit: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n }): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/accounts/${this.accountId}/ai-gateway/gateways`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Update an existing AI Gateway in place. The Cloudflare API uses `PUT`\n * (not PATCH) and is full-replace on the listed fields, so callers must\n * supply the complete desired state — Tamer's `apply` reads the recorded\n * state row and merges declared overrides before calling this.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/update/\n */\n async aiGatewayUpdate(\n gatewayId: string,\n body: {\n cache_ttl: number;\n cache_invalidate_on_update: boolean;\n collect_logs: boolean;\n rate_limiting_interval: number;\n rate_limiting_limit: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/ai-gateway/gateways/${encodeURIComponent(gatewayId)}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete an AI Gateway by id.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/delete/\n */\n async aiGatewayDelete(gatewayId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/ai-gateway/gateways/${encodeURIComponent(gatewayId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Pipelines (V1, SQL-based) ────────────────────────────────────────────\n\n /**\n * List every Pipeline in the account (paginated, 100/page). Uses the V1\n * SQL pipelines endpoint; the deprecated `/accounts/{id}/pipelines`\n * (HTTP/binding sources) is not used.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/list_v1/\n */\n async pipelineListAll(): Promise<\n Array<{\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n }>\n > {\n type Row = {\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n };\n const all: Row[] = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Row[];\n result_info?: { count?: number; total_count?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/pipelines?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a Pipeline. Server assigns the `id`; `name` is user-supplied\n * and uniquely identifies the pipeline within the account.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/create_v1/\n */\n async pipelineCreate(body: {\n name: string;\n sql: string;\n }): Promise<{\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n }> {\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n };\n }>(`/accounts/${this.accountId}/pipelines/v1/pipelines`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Delete a Pipeline by server-assigned id.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/delete_v1/\n */\n async pipelineDelete(pipelineId: string): Promise<void> {\n const pathId = pipelinesV1IdForPath(pipelineId);\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/pipelines/${encodeURIComponent(pathId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Pipelines v1 streams / sinks (Iceberg, Logpush) ─────────────────────\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/list/\n */\n async pipelinesV1StreamListAll(): Promise<\n Array<{ id: string; name: string; endpoint?: string }>\n > {\n const all: Array<{ id: string; name: string; endpoint?: string }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{ id: string; name: string; endpoint?: string }>;\n result_info?: { count?: number; total_count?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/streams?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/create/\n */\n async pipelinesV1StreamCreate(\n body: Record<string, unknown>,\n ): Promise<{\n id: string;\n name: string;\n endpoint?: string;\n }> {\n const data = await this.request<{\n result: { id: string; name: string; endpoint?: string };\n }>(`/accounts/${this.accountId}/pipelines/v1/streams`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Path id: 32 lower-case hex chars (no hyphens). The dashboard issues a\n * plain `DELETE` with no query string; pass `{ force: true }` only if the API\n * docs require it for your case.\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/delete/\n */\n async pipelinesV1StreamDelete(\n streamId: string,\n query?: { force?: boolean },\n ): Promise<void> {\n const pathId = pipelinesV1IdForPath(streamId);\n const qs = new URLSearchParams();\n if (query?.force) qs.set(\"force\", \"true\");\n const tail = qs.toString() ? `?${qs.toString()}` : \"\";\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/streams/${encodeURIComponent(pathId)}${tail}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/list/\n */\n async pipelinesV1SinkListAll(): Promise<\n Array<{ id: string; name: string; type: string }>\n > {\n const all: Array<{ id: string; name: string; type: string }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{ id: string; name: string; type: string }>;\n result_info?: { count?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/sinks?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * R2 Data Catalog sink `config` includes `table_name` and `namespace` as\n * Cloudflare has registered them (may differ from the name sent at create).\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/get/\n */\n async pipelinesV1SinkGet(sinkId: string): Promise<{\n id: string;\n name: string;\n type: string;\n config?: Record<string, unknown>;\n }> {\n const pathId = pipelinesV1IdForPath(sinkId);\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n type: string;\n config?: Record<string, unknown>;\n };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/sinks/${encodeURIComponent(pathId)}`,\n );\n return data.result;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/create/\n */\n async pipelinesV1SinkCreate(\n body: Record<string, unknown>,\n ): Promise<{ id: string; name: string; type: string }> {\n const data = await this.request<{\n result: { id: string; name: string; type: string };\n }>(`/accounts/${this.accountId}/pipelines/v1/sinks`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Path id: 32 lower-case hex chars (no hyphens). Optional `{ force: true }`\n * matches `?force=true` when the product requires it (e.g. some sink types).\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/delete/\n */\n async pipelinesV1SinkDelete(\n sinkId: string,\n query?: { force?: boolean },\n ): Promise<void> {\n const pathId = pipelinesV1IdForPath(sinkId);\n const qs = new URLSearchParams();\n if (query?.force) qs.set(\"force\", \"true\");\n const tail = qs.toString() ? `?${qs.toString()}` : \"\";\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/sinks/${encodeURIComponent(pathId)}${tail}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── R2 Data Catalog (Iceberg) ────────────────────────────────────────────\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/list/\n */\n async r2DataCatalogList(): Promise<{\n warehouses: Array<{\n id: string;\n bucket: string;\n name: string;\n status?: string;\n }>;\n }> {\n const data = await this.request<{\n result?: {\n warehouses: Array<{\n id: string;\n bucket: string;\n name: string;\n status?: string;\n }>;\n };\n }>(`/accounts/${this.accountId}/r2-catalog`);\n return { warehouses: data.result?.warehouses ?? [] };\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/enable/\n */\n async r2DataCatalogEnable(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/enable`,\n { method: \"POST\" },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/update/\n * (Store catalog credentials)\n */\n async r2DataCatalogStoreCredential(\n bucketName: string,\n token: string,\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/credential`,\n {\n method: \"POST\",\n body: JSON.stringify({ token }),\n },\n );\n }\n\n /**\n * Deactivates the R2 Data Catalog for a bucket (metadata files remain in R2\n * until the bucket is emptied or objects are removed). Next `apply` will\n * re-enable the catalog as part of `pipelinesAuto` when needed.\n *\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/disable/\n */\n async r2DataCatalogDisable(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/disable`,\n { method: \"POST\" },\n );\n }\n\n /**\n * List every Workflow registered on the account (paginated, 100/page).\n * Cloudflare returns the configured class + script binding plus\n * aggregate instance counts; we only consume the registration metadata.\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/list/\n */\n async workflowListAll(): Promise<\n Array<{\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n created_on?: string;\n modified_on?: string;\n triggered_on?: string;\n }>\n > {\n type Item = {\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n created_on?: string;\n modified_on?: string;\n triggered_on?: string;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/workflows?page=${page}&per_page=100`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create or update a Workflow registration. Cloudflare's `PUT` is upsert:\n * if `workflow_name` exists it patches `class_name` / `script_name` /\n * `limits`, otherwise it creates a new one. The bound class must already\n * be deployed in `script_name`'s code (PUT against an unknown class\n * succeeds at registration time but fails at first instance create).\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/update/\n */\n async workflowUpsert(\n name: string,\n body: {\n class_name: string;\n script_name: string;\n limits?: { steps?: number };\n },\n ): Promise<{\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n version_id?: string;\n created_on?: string;\n modified_on?: string;\n }> {\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n version_id?: string;\n created_on?: string;\n modified_on?: string;\n };\n }>(\n `/accounts/${this.accountId}/workflows/${encodeURIComponent(name)}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete a Workflow registration by name. Per Cloudflare's docs this only\n * removes the workflow itself — the worker that hosts the class is\n * untouched and existing in-flight instances continue to run.\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/delete/\n */\n async workflowDelete(name: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workflows/${encodeURIComponent(name)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List every Secrets Store store on the account (paginated, 100/page).\n * Stores are account-scoped containers; their internal secret entries\n * are listed via {@link secretsStoreSecretListAll}.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/list/\n */\n async secretsStoreListAll(): Promise<\n Array<{\n id: string;\n name: string;\n account_id?: string;\n created?: string;\n modified?: string;\n }>\n > {\n type Item = {\n id: string;\n name: string;\n account_id?: string;\n created?: string;\n modified?: string;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/secrets_store/stores?page=${page}&per_page=100`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a new Secrets Store. Per the API a store name uniquely identifies\n * the container within an account but is **not** itself a primary key —\n * the assigned `id` is. Tamer enforces uniqueness via the derived\n * `sec-{logical}-t-{tenantId}-{env}` name and short-circuits to the\n * existing id when it finds a match in `secretsStoreListAll`.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/create/\n */\n async secretsStoreCreate(\n name: string,\n ): Promise<{ id: string; name: string }> {\n const data = await this.request<{\n result: { id: string; name: string };\n }>(`/accounts/${this.accountId}/secrets_store/stores`, {\n method: \"POST\",\n body: JSON.stringify({ name }),\n });\n return data.result;\n }\n\n /**\n * Delete a Secrets Store by id. Cloudflare cascades the deletion to all\n * secrets inside the store, so callers should ensure no live worker is\n * still binding into this store before invoking.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/delete/\n */\n async secretsStoreDelete(storeId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/secrets_store/stores/${encodeURIComponent(storeId)}`,\n { method: \"DELETE\" },\n );\n }\n\n async dispatchNamespaceListAll(): Promise<\n Array<{ namespace_name: string; script_count?: number }>\n > {\n const data = await this.request<{\n result: Array<{ namespace_name: string; script_count?: number }>;\n }>(`/accounts/${this.accountId}/workers/dispatch/namespaces`);\n return data.result ?? [];\n }\n\n async dispatchNamespaceCreate(namespaceName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/dispatch/namespaces`,\n {\n method: \"POST\",\n body: JSON.stringify({ name: namespaceName }),\n },\n );\n }\n\n async dispatchNamespaceDelete(namespaceName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(namespaceName)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * Upload a user Worker module to a Workers for Platforms dispatch namespace (multipart).\n * @see https://developers.cloudflare.com/api/operations/namespace-worker-script-upload-worker-module\n */\n async dispatchNamespaceScriptPut(\n dispatchNamespace: string,\n scriptName: string,\n formData: FormData,\n ): Promise<void> {\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts/${encodeURIComponent(scriptName)}`;\n const res = await fetch(url, {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n },\n body: formData,\n });\n const data = (await res.json()) as { success?: boolean; errors?: Array<{ message: string }> };\n if (!res.ok) {\n const errMsg =\n data?.errors?.map((e) => e.message).join(\"; \") ?? res.statusText;\n throw new Error(`CF API error: ${errMsg}`);\n }\n }\n\n /**\n * List every script inside a dispatch namespace.\n * @see https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/list/\n */\n async dispatchNamespaceScriptList(\n dispatchNamespace: string,\n ): Promise<Array<{ id: string }>> {\n const data = await this.request<{\n result?: Array<{ id: string }>;\n }>(\n `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts`,\n );\n return data.result ?? [];\n }\n\n /**\n * Remove a script from a Workers for Platforms dispatch namespace.\n * @see https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/delete/\n */\n async dispatchNamespaceScriptDelete(\n dispatchNamespace: string,\n scriptName: string,\n options?: { force?: boolean },\n ): Promise<void> {\n const q = options?.force ? \"?force=true\" : \"\";\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts/${encodeURIComponent(scriptName)}${q}`;\n const res = await fetch(url, {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n },\n });\n if (!res.ok) {\n let errMsg = res.statusText;\n try {\n const data = (await res.json()) as {\n errors?: Array<{ message: string }>;\n };\n errMsg = data?.errors?.map((e) => e.message).join(\"; \") ?? errMsg;\n } catch {\n /* empty body */\n }\n throw new Error(`CF API error: ${errMsg}`);\n }\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/list/\n */\n async zoneWorkerRoutesList(\n zoneId: string,\n ): Promise<Array<{ id: string; pattern: string; script: string }>> {\n const data = await this.request<{\n result?: Array<{ id: string; pattern: string; script: string }>;\n }>(`/zones/${zoneId}/workers/routes`);\n return data.result ?? [];\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/create/\n */\n async zoneWorkerRouteCreate(\n zoneId: string,\n body: { pattern: string; script: string },\n ): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/zones/${zoneId}/workers/routes`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n },\n );\n return data.result;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/delete/\n */\n async zoneWorkerRouteDelete(zoneId: string, routeId: string): Promise<void> {\n await this.request(\n `/zones/${zoneId}/workers/routes/${encodeURIComponent(routeId)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List every DNS record on a zone (paginated, 100/page). Returns the\n * subset of fields Tamer cares about — the full Cloudflare object also\n * carries `meta`, `proxiable`, `created_on`, `modified_on`, etc., none of\n * which we persist in state.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/list/\n */\n async zoneDnsRecordListAll(\n zoneId: string,\n ): Promise<\n Array<{\n id: string;\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string | null;\n }>\n > {\n type Item = {\n id: string;\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string | null;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(`/zones/${zoneId}/dns_records?page=${page}&per_page=100`);\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a DNS record on a zone. The Cloudflare API rejects duplicate\n * `(type, name, content)` triples for record types where that combination\n * is meaningful (CNAME, A, AAAA), so callers should pre-check via\n * {@link zoneDnsRecordListAll}.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/create/\n */\n async zoneDnsRecordCreate(\n zoneId: string,\n body: {\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string;\n },\n ): Promise<{ id: string; type: string; name: string; content: string }> {\n const data = await this.request<{\n result: { id: string; type: string; name: string; content: string };\n }>(`/zones/${zoneId}/dns_records`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Patch a DNS record in place. Cloudflare's PATCH endpoint accepts any\n * subset of mutable fields (`content`, `ttl`, `proxied`, `priority`,\n * `comment`) but rejects `type` changes — Tamer falls back to\n * delete-and-recreate when the type drifts.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/edit/\n */\n async zoneDnsRecordPatch(\n zoneId: string,\n recordId: string,\n body: Partial<{\n type: string;\n name: string;\n content: string;\n ttl: number;\n proxied: boolean;\n priority: number;\n comment: string;\n }>,\n ): Promise<void> {\n await this.request(\n `/zones/${zoneId}/dns_records/${encodeURIComponent(recordId)}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(body),\n },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/delete/\n */\n async zoneDnsRecordDelete(zoneId: string, recordId: string): Promise<void> {\n await this.request(\n `/zones/${zoneId}/dns_records/${encodeURIComponent(recordId)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * Look up zones by exact name.\n *\n * Account-scoped tokens with `Zone Read` see every zone under the account.\n * Returns an array because Cloudflare allows the same name across accounts;\n * the caller normally takes `[0]`.\n *\n * @see https://developers.cloudflare.com/api/operations/zones-get\n */\n async zonesListByName(\n name: string,\n ): Promise<Array<{ id: string; name: string }>> {\n const qs = new URLSearchParams({\n name,\n \"account.id\": this.accountId,\n per_page: \"50\",\n });\n const data = await this.request<{\n result?: Array<{ id: string; name: string }>;\n }>(`/zones?${qs.toString()}`);\n return data.result ?? [];\n }\n\n /**\n * List account-scoped Logpush jobs (includes `workers_trace_events`).\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/list/\n */\n async logpushAccountJobsList(): Promise<\n Array<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n error_message?: string | null;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n error_message?: string | null;\n }>;\n }>(`/accounts/${this.accountId}/logpush/jobs`);\n return data.result ?? [];\n }\n\n /**\n * Fetch one account-scoped Logpush job (includes `destination_conf`).\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/get/\n */\n async logpushAccountJobGet(jobId: number): Promise<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n output_options?: Record<string, unknown>;\n }> {\n const data = await this.request<{\n result?: {\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n output_options?: Record<string, unknown>;\n };\n }>(`/accounts/${this.accountId}/logpush/jobs/${jobId}`);\n if (!data.result?.id) {\n throw new Error(\n `Logpush job GET ${jobId}: missing result (job may not exist on this account)`,\n );\n }\n return data.result;\n }\n\n /**\n * Create an account Logpush job. Caller supplies `destination_conf` and dataset.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/create/\n */\n async logpushAccountJobCreate(body: {\n name: string;\n dataset: string;\n destination_conf: string;\n enabled?: boolean;\n filter?: string;\n output_options?: Record<string, unknown>;\n }): Promise<{ id: number }> {\n const data = await this.request<{ result: { id: number } }>(\n `/accounts/${this.accountId}/logpush/jobs`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Update mutable Logpush job fields in place.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/update/\n */\n async logpushAccountJobUpdate(\n jobId: number,\n body: {\n destination_conf: string;\n enabled?: boolean;\n filter?: string;\n output_options?: Record<string, unknown>;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/logpush/jobs/${jobId}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete a Logpush job by numeric id.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/delete/\n */\n async logpushAccountJobDelete(jobId: number): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/logpush/jobs/${jobId}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List all permission groups for account-owned API tokens (paginated).\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/subresources/permission_groups/methods/list/\n */\n async accountTokenPermissionGroupsListAll(): Promise<\n Array<{ id: string; name: string; scopes?: string[] }>\n > {\n const all: Array<{ id: string; name: string; scopes?: string[] }> = [];\n const seen = new Set<string>();\n let page = 1;\n const perPage = 100;\n /** Failsafe: pagination must always terminate even if the API omits `total_count` or repeats pages. */\n const maxPage = 500;\n while (true) {\n if (page > maxPage) {\n throw new Error(\n `Account token permission groups: exceeded ${maxPage} pages (partial count ${all.length}) — ` +\n `refusing to paginate further (check Cloudflare API or file a bug)`,\n );\n }\n const data = await this.request<{\n result?: Array<{ id: string; name: string; scopes?: string[] }>;\n result_info?: {\n per_page?: number;\n count?: number;\n total_count?: number;\n };\n }>(\n `/accounts/${this.accountId}/tokens/permission_groups?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n if (batch.length === 0) break;\n\n const newRows = batch.filter((g) => g.id && !seen.has(g.id));\n for (const g of newRows) {\n seen.add(g.id);\n }\n if (newRows.length === 0) {\n break;\n }\n all.push(...newRows);\n\n if (batch.length < perPage) break;\n const total = data.result_info?.total_count;\n if (typeof total === \"number\" && all.length >= total) break;\n page++;\n }\n return all;\n }\n\n /**\n * List all account-owned API tokens (paginated).\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/list/\n */\n async accountTokenListAll(): Promise<\n Array<{\n id: string;\n name?: string;\n status?: string;\n }>\n > {\n type Row = { id: string; name?: string; status?: string };\n const all: Row[] = [];\n let page = 1;\n const perPage = 50;\n const maxPage = 500;\n while (page <= maxPage) {\n const data = await this.request<{\n result?: Row[];\n result_info?: {\n page?: number;\n per_page?: number;\n total_count?: number;\n };\n }>(\n `/accounts/${this.accountId}/tokens?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const total = data.result_info?.total_count;\n if (typeof total === \"number\" && all.length >= total) break;\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create an account-owned API token. `result.value` is only returned on create.\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/create/\n */\n async accountTokenCreate(body: {\n name: string;\n policies: Array<{\n effect: \"allow\" | \"deny\";\n permission_groups: Array<{ id: string }>;\n resources: Record<string, string> | Record<string, Record<string, string>>;\n }>;\n }): Promise<{ id: string; value?: string }> {\n const data = await this.request<{ result: { id: string; value?: string } }>(\n `/accounts/${this.accountId}/tokens`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete (revoke) an account-owned API token.\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/delete/\n */\n async accountTokenDelete(tokenId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/tokens/${encodeURIComponent(tokenId)}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\n\n/** Max audit rows retained per secret name (oldest dropped on insert). */\nexport const SECRET_HISTORY_CAP = 50;\n\n/**\n * Account-scoped D1 database for encrypted secrets (`tamer-secrets`).\n * Each env's secrets are isolated by row key: `{env}:{secretName}`.\n */\nexport function tamerSecretsDatabaseName(): string {\n return \"tamer-secrets\";\n}\n\n/** Row key for a secret in the shared D1: `{env}:{secretName}`. */\nexport function secretRowKey(env: string, secretName: string): string {\n return `${env}:${secretName}`;\n}\n\nexport async function findTamerSecretsDatabaseUuid(\n api: CFApiClient,\n): Promise<string | undefined> {\n const name = tamerSecretsDatabaseName();\n const all = await api.d1ListAll();\n return all.find((d) => d.name === name)?.uuid;\n}\n\nconst SECRETS_TABLE_DDL = `CREATE TABLE IF NOT EXISTS secrets (\n name TEXT PRIMARY KEY,\n ciphertext BLOB NOT NULL,\n iv BLOB NOT NULL,\n wrapped_dek BLOB NOT NULL,\n dek_iv BLOB NOT NULL,\n value_hash TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n updated_by TEXT\n)`;\n\nconst SECRET_HISTORY_TABLE_DDL = `CREATE TABLE IF NOT EXISTS secret_history (\n name TEXT NOT NULL,\n value_hash TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n updated_by TEXT\n)`;\n\n/**\n * Create `tamer-secrets` (account-scoped) if missing and ensure `secrets` /\n * `secret_history` tables. Idempotent — safe to call on every bootstrap or\n * first vault touch.\n */\nexport async function ensureTamerSecretsDatabase(\n api: CFApiClient,\n): Promise<string> {\n let uuid = await findTamerSecretsDatabaseUuid(api);\n if (!uuid) {\n const created = await api.d1Create(tamerSecretsDatabaseName());\n uuid = created.uuid;\n }\n\n await api.d1Query(uuid, SECRETS_TABLE_DDL);\n await api.d1Query(uuid, SECRET_HISTORY_TABLE_DDL);\n\n return uuid;\n}\n\n/**\n * Delete all secret rows for a specific env from the shared account-scoped D1.\n * Used by `tamer destroy --wipe-metadata`.\n */\nexport async function deleteEnvSecretRows(\n api: CFApiClient,\n env: string,\n): Promise<boolean> {\n const uuid = await findTamerSecretsDatabaseUuid(api);\n if (!uuid) return false;\n await api.d1Query(\n uuid,\n `DELETE FROM secrets WHERE name LIKE ?`,\n [`${env}:%`],\n );\n await api.d1Query(\n uuid,\n `DELETE FROM secret_history WHERE name LIKE ?`,\n [`${env}:%`],\n );\n return true;\n}\n","import type { MasterKey } from \"./types.js\";\n\nexport const MASTER_KEY_BYTE_LENGTH = 32;\n\nconst MASTER_KEY_ENV_PREFIX = \"TAMER_SECRETS_KEY_\";\n\n/** Env var name for the per-env master key (e.g. `TAMER_SECRETS_KEY_dev`). */\nexport function masterKeyEnvVarName(env: string): string {\n return `${MASTER_KEY_ENV_PREFIX}${env}`;\n}\n\n/** Generate a fresh 256-bit master key as base64 (print once, store externally). */\nexport function generateMasterKey(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(MASTER_KEY_BYTE_LENGTH));\n return bytesToBase64(bytes);\n}\n\n/** Parse and validate a base64 master key string into raw key material. */\nexport function parseMasterKey(base64: string): MasterKey {\n const trimmed = base64.trim();\n if (!trimmed) {\n throw new Error(\"secrets: master key must be a non-empty base64 string\");\n }\n\n const bytes = base64ToBytes(trimmed);\n\n if (bytes.length !== MASTER_KEY_BYTE_LENGTH) {\n throw new Error(\n `secrets: master key must decode to ${MASTER_KEY_BYTE_LENGTH} bytes (got ${bytes.length})`,\n );\n }\n\n return bytes;\n}\n\n/**\n * Read the master key for `env` from `process.env`.\n * Never logs or returns the env var name together with the key value.\n */\nexport function readMasterKeyFromEnv(env: string): MasterKey {\n const varName = masterKeyEnvVarName(env);\n const raw = process.env[varName];\n if (!raw) {\n throw new Error(\n `secrets: master key requires env var ${varName} (set it before running secrets commands)`,\n );\n }\n return parseMasterKey(raw);\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(\"secrets: master key is not valid base64\");\n }\n return new Uint8Array(Buffer.from(base64, \"base64\"));\n}\n","import type {\n DispatchNamespaceResourceConfig,\n TenantMeta,\n} from \"../../types.js\";\n\n// Tiny per-TenantMeta cache so we don't recompile the regex on every\n// resolve call (which happens once per resource, per env, per command).\n// `null` = \"config opted out\" (no `ephemeralEnvPattern`); we cache the\n// negative answer too so the predicate stays branch-free at the call\n// site. Loader has already validated the source string compiles.\nconst ephemeralPredicateCache = new WeakMap<TenantMeta, RegExp | null>();\n\nfunction ephemeralPredicateFor(tenant: TenantMeta): RegExp | null {\n if (ephemeralPredicateCache.has(tenant)) {\n return ephemeralPredicateCache.get(tenant) ?? null;\n }\n const pat = tenant.ephemeralEnvPattern;\n const compiled = pat ? new RegExp(pat) : null;\n ephemeralPredicateCache.set(tenant, compiled);\n return compiled;\n}\n\n/**\n * `true` when `env` matches `tenant.ephemeralEnvPattern` (e.g.\n * `\"^pr-\"` for PR previews, `\"^(pr|feature)-\"` for branch previews).\n *\n * Ephemeral envs share **one** dispatch namespace\n * (`{ns}-ephemeral`) so we don't churn dispatch-namespace creates per\n * preview, and dispatch-script names carry the env suffix\n * (`{product}-{workspace}-{env}`) so multiple previews can coexist\n * inside that shared namespace. When the config doesn't pin a\n * pattern, no env is ephemeral — every env gets its own dispatch\n * namespace `{ns}-{env}`.\n */\nexport function isEphemeralEnv(env: string, tenant: TenantMeta): boolean {\n const re = ephemeralPredicateFor(tenant);\n if (!re) return false;\n return re.test(env);\n}\n\n/** Resolved Cloudflare dispatch namespace name for the given env. */\nexport function effectiveDispatchNamespaceName(\n config: DispatchNamespaceResourceConfig,\n env: string,\n tenant: TenantMeta,\n): string {\n if (config.envSuffix) {\n if (env === \"local\") return config.namespace;\n if (isEphemeralEnv(env, tenant)) return `${config.namespace}-ephemeral`;\n return `${config.namespace}-${env}`;\n }\n return config.namespace;\n}\n","import type { RouteResourceConfig } from \"../../types.js\";\nimport type {\n Route,\n ZoneNameRoute,\n CustomDomainRoute,\n} from \"../../generated/wrangler-types.js\";\n\nconst DEFAULT_PROD_ENVS = [\"prod\", \"production\"];\nconst DEFAULT_SKIP_ENVS = [\"local\"];\n\n/**\n * Per `docs/handoff.md` §6:\n * - prod / production → bare apex (`todo.com`)\n * - any other env (including ephemeral `pr-*`) → `{env}.{apex}`\n * - `local` (or anything in `skipEnvs`) → no route\n *\n * The resource-name `-{env}` suffix on workers/D1/R2/KV is decoupled from\n * URLs; this function only computes the URL.\n */\nexport function effectiveHostForEnv(\n route: RouteResourceConfig,\n env: string,\n): string | undefined {\n const skipEnvs = route.skipEnvs ?? DEFAULT_SKIP_ENVS;\n if (skipEnvs.includes(env)) return undefined;\n const prodEnvs = route.prodEnvs ?? DEFAULT_PROD_ENVS;\n if (prodEnvs.includes(env)) return route.host;\n return `${env}.${route.host}`;\n}\n\n/**\n * Expand one Tamer route into a wrangler `Route` (or `undefined` if the env\n * should not receive the route at all).\n */\nexport function expandRouteForEnv(\n route: RouteResourceConfig,\n env: string,\n): Route | undefined {\n const host = effectiveHostForEnv(route, env);\n if (!host) return undefined;\n const zone = route.zone ?? route.host;\n\n if (route.customDomain) {\n const cd: CustomDomainRoute = { pattern: host, custom_domain: true };\n return cd;\n }\n\n const path = route.path ?? \"/*\";\n const expanded: ZoneNameRoute = {\n pattern: `${host}${path}`,\n zone_name: zone,\n };\n return expanded;\n}\n\n/**\n * Expand `tamerRoutes` for the given env, dropping any that resolve to\n * `undefined` (`local`, `skipEnvs`).\n *\n * Note: ephemeral envs (matching `tenant.ephemeralEnvPattern`) follow the\n * same `{env}.{apex}` prefix rule as any non-prod env — e.g. an env named\n * `pr-1234` resolves to `pr-1234.todo.com`. Callers that want a different\n * URL scheme for ephemeral envs should special-case before calling.\n */\nexport function effectiveRoutesForEnv(\n tamerRoutes: RouteResourceConfig[] | undefined,\n env: string,\n): Route[] {\n if (!tamerRoutes || tamerRoutes.length === 0) return [];\n const out: Route[] = [];\n for (const r of tamerRoutes) {\n const expanded = expandRouteForEnv(r, env);\n if (expanded) out.push(expanded);\n }\n return out;\n}\n\n/**\n * Zone-name routes are attached via the Cloudflare Workers Routes HTTP API\n * (`/zones/{id}/workers/routes`), not via `wrangler.json`, so deploys stay\n * consistent with `tamer drift` / destroy.\n */\nexport function isApiManagedZoneRoute(r: Route): r is ZoneNameRoute {\n return (\n typeof r === \"object\" &&\n r !== null &&\n \"zone_name\" in r &&\n typeof (r as ZoneNameRoute).zone_name === \"string\" &&\n \"pattern\" in r &&\n typeof (r as ZoneNameRoute).pattern === \"string\" &&\n !(\n \"custom_domain\" in r &&\n (r as { custom_domain?: boolean }).custom_domain === true\n )\n );\n}\n\n/** Custom-domain `tamerRoutes` stay in wrangler until a dedicated API path exists. */\nexport function isWranglerOnlyTamerRoute(r: Route): r is CustomDomainRoute {\n return (\n typeof r === \"object\" &&\n r !== null &&\n \"custom_domain\" in r &&\n (r as CustomDomainRoute).custom_domain === true\n );\n}\n","/** Reject path segments in generated Wrangler config filename. */\nexport function assertSafeWranglerOutFile(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) {\n throw new Error(\"wranglerOutFile cannot be empty\");\n }\n if (\n trimmed.includes(\"/\") ||\n trimmed.includes(\"\\\\\") ||\n trimmed.startsWith(\"..\")\n ) {\n throw new Error(\n `Invalid wranglerOutFile \"${name}\": use a basename only (e.g. wrangler.json)`,\n );\n }\n return trimmed;\n}\n\n/** Extra CLI args so Wrangler uses a non-default config file. */\nexport function wranglerConfigCliArgs(outFile: string): string[] {\n if (outFile === \"wrangler.json\") return [];\n return [\"--config\", outFile];\n}\n","/**\n * Cross-resource reference resolver — Tamer's `!Ref` / `!GetAtt` analogue.\n *\n * Syntax: `${tamer:<kind>:<logicalName>.<field>}` (whole-string OR\n * interpolated). Recognized in worker `vars`, `tamerRoutes[].host` and\n * `tamerRoutes[].zone`, `r2_buckets[].bucket_name`, `services[].service`,\n * `dispatch_namespaces[].namespace`, and external `resources.d1[].databaseName`.\n * Resolved at wrangler-config-generation time against the in-memory state snapshot,\n * so all referenced resources must already\n * have been created (typically by an earlier loop within `tamer apply`).\n *\n * Examples:\n * \"${tamer:r2:assets.name}\" → derived bucket name\n * \"${tamer:queue:events.id}\" → queue id (uuid)\n * \"${tamer:d1:settings.binding}\" → wrangler binding key\n * \"queue=${tamer:queue:events.name};dim=128\" → interpolated mid-string\n * \"${tamer:worker:api.name}\" → deployed worker name\n * \"${tamer:dispatch_namespace:workspace.name}\" → namespace name\n * \"${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name}\" → R2 SQL table name (normalized)\n * \"${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name_pipelines}\" → Pipelines-reported name before normalize\n * \"${tamer:config:stack.account_id}\" → `config.account_id` or CLI `accountId` (same as wrangler account)\n *\n * Throws `TamerReferenceError` with the originating field path on any\n * unresolved reference; `tamer apply` / `deploy` surface this as a clear\n * \"run apply first\" or \"typo in logicalName\" message.\n */\n\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport type {\n CfiConfig,\n LogpushPipelinesStateEntry,\n StateEntry,\n WorkerConfig,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport { resolveDeployedWorkerName } from \"../config/resolver.js\";\n\nexport class TamerReferenceError extends Error {\n constructor(message: string, public readonly fieldPath: string) {\n super(`${message} (at ${fieldPath})`);\n this.name = \"TamerReferenceError\";\n }\n}\n\n// Field token is broad enough to cover both built-in resource fields\n// (`name`, `id`, `binding` — all lower-case) and `${tamer:import:<stack>.<output>}`\n// where the output name is a CloudFormation-style identifier\n// (`^[a-zA-Z][a-zA-Z0-9_-]*$`). Each `lookupReference` branch enforces the\n// allowed field set for its kind, so widening here is purely a parsing concern.\nconst REF_RE = /\\$\\{tamer:([a-z0-9_]+):([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}/g;\nconst FULL_REF_RE = /^\\$\\{tamer:([a-z0-9_]+):([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}$/;\n\nexport interface ReferenceContext {\n config: CfiConfig;\n env: string;\n state: StateManager;\n naming: NamingEngine;\n /**\n * When `true`, unresolved references are left in place instead of throwing.\n * Used by read-only commands (`plan`, `drift`, `status`) so they don't fail\n * on a config that has not yet been `apply`ed.\n */\n tolerant?: boolean;\n /**\n * Stack outputs imported from sibling stacks living in the same\n * `tamer-state-{env}` D1, keyed by source stack name → output name →\n * resolved literal. Populated by `fetchStackImports` at command start so\n * cross-stack references resolve without re-reading D1 mid-resolution.\n * Empty/undefined when no `${tamer:import:…}` references appear in config.\n */\n imports?: Record<string, Record<string, string>>;\n /**\n * Effective account id for the current tamer command (`config.account_id` ??\n * `CLOUDFLARE_ACCOUNT_ID` from the caller). Fills\n * `${tamer:config:stack.account_id}` when the config file omits\n * top-level `account_id` but the CLI has already resolved the id.\n */\n accountId?: string;\n}\n\n/**\n * Scan a string for any `${tamer:...}` references. Returns true when at\n * least one reference is present (used for cheap pre-checks).\n */\nexport function stringHasReference(s: string): boolean {\n REF_RE.lastIndex = 0;\n return REF_RE.test(s);\n}\n\n/**\n * Resolve every `${tamer:...}` reference in `value`. Replacement preserves\n * surrounding text for partial-string interpolation. `fieldPath` is included\n * in any thrown {@link TamerReferenceError} for actionable diagnostics.\n */\nexport function resolveReferencesInString(\n value: string,\n ctx: ReferenceContext,\n fieldPath: string,\n): string {\n if (!stringHasReference(value)) return value;\n\n return value.replace(REF_RE, (match, kind, logicalName, field) => {\n try {\n return lookupReference(\n kind as string,\n logicalName as string,\n field as string,\n ctx,\n fieldPath,\n );\n } catch (err) {\n if (ctx.tolerant && err instanceof TamerReferenceError) {\n return match;\n }\n throw err;\n }\n });\n}\n\n/**\n * Walk a `vars` record (or any flat string→string map) replacing references\n * in every value. Returns a new object; the input is not mutated.\n */\nexport function resolveReferencesInVars(\n vars: Record<string, string> | undefined,\n ctx: ReferenceContext,\n fieldPathPrefix: string,\n): Record<string, string> | undefined {\n if (!vars) return vars;\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(vars)) {\n if (typeof value !== \"string\") {\n out[key] = value;\n continue;\n }\n out[key] = resolveReferencesInString(\n value,\n ctx,\n `${fieldPathPrefix}.${key}`,\n );\n }\n return out;\n}\n\nfunction lookupReference(\n kind: string,\n logicalName: string,\n field: string,\n ctx: ReferenceContext,\n fieldPath: string,\n): string {\n switch (kind) {\n case \"d1\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"d1_database\" && entry.logicalName === logicalName,\n );\n case \"r2\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"r2_bucket\" && entry.logicalName === logicalName,\n );\n case \"kv\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"kv_namespace\" && entry.logicalName === logicalName,\n );\n case \"queue\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"queue\" && entry.logicalName === logicalName,\n );\n case \"hyperdrive\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"hyperdrive\" && entry.logicalName === logicalName,\n );\n case \"vectorize\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"vectorize\" && entry.logicalName === logicalName,\n );\n case \"ai_gateway\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"ai_gateway\" && entry.logicalName === logicalName,\n );\n case \"pipeline\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"pipeline\" && entry.logicalName === logicalName,\n );\n case \"workflow\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"workflow\" && entry.logicalName === logicalName,\n );\n case \"secret_store\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) =>\n entry.type === \"secrets_store\" && entry.logicalName === logicalName,\n );\n case \"dispatch_namespace\":\n return lookupDispatchNamespace(ctx, logicalName, field, fieldPath);\n case \"worker\":\n return lookupWorker(ctx, logicalName, field, fieldPath);\n case \"import\":\n return lookupImport(ctx, logicalName, field, fieldPath);\n case \"logpush_pipelines\":\n return lookupLogpushPipelines(ctx, logicalName, field, fieldPath);\n case \"config\":\n return lookupConfigField(ctx, logicalName, field, fieldPath);\n default:\n throw new TamerReferenceError(\n `Unknown reference kind \"${kind}\" — expected one of d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | secret_store | dispatch_namespace | worker | import | logpush_pipelines | config`,\n fieldPath,\n );\n }\n}\n\nfunction lookupConfigField(\n ctx: ReferenceContext,\n _logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n if (field === \"account_id\") {\n const id = (ctx.accountId ?? ctx.config.account_id ?? \"\").trim();\n if (!id) {\n throw new TamerReferenceError(\n `Reference \\${tamer:config:stack.account_id} needs the stack Cloudflare account id — set top-level account_id in tamer/project.config.ts or pass CLOUDFLARE_ACCOUNT_ID when running tamer.`,\n fieldPath,\n );\n }\n return id;\n }\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on config reference — expected account_id`,\n fieldPath,\n );\n}\n\nfunction getLogpushPipelinesEntry(\n ctx: ReferenceContext,\n logicalName: string,\n fieldPath: string,\n): LogpushPipelinesStateEntry {\n const all = ctx.state.getAll();\n const entry = Object.values(all).find(\n (e): e is LogpushPipelinesStateEntry =>\n e.type === \"logpush_pipelines\" && e.logicalName === logicalName,\n );\n if (!entry) {\n throw new TamerReferenceError(\n `Reference \\${tamer:logpush_pipelines:${logicalName}.…} cannot be resolved — ` +\n `no pipelines graph in state for logpush job \"${logicalName}\". Run a full \\`tamer apply\\` (including the Logpush / pipelinesAuto step) for env \"${ctx.env}\" first.`,\n fieldPath,\n );\n }\n return entry;\n}\n\n/**\n * Exposes fields from the `logpush_pipelines:*` D1 state row (after\n * `ensurePipelinesLogpushProvision` has run) for `outputs` and `vars`, e.g.\n * `${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name}`.\n */\nfunction lookupLogpushPipelines(\n ctx: ReferenceContext,\n logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n const entry = getLogpushPipelinesEntry(ctx, logicalName, fieldPath);\n switch (field) {\n case \"r2_data_catalog_table_name\":\n case \"iceberg_table\": {\n const v = entry.r2DataCatalogTableName?.trim();\n if (!v) {\n throw new TamerReferenceError(\n `logpush_pipelines state for \"${logicalName}\" has no r2DataCatalogTableName (sink not yet created, or pre-upgrade state). ` +\n `Re-run a full \\`tamer apply\\` for env \"${ctx.env}\" after pipelinesAuto provisions the sink, or set table manually in consuming stack.`,\n fieldPath,\n );\n }\n return v;\n }\n case \"r2_data_catalog_table_name_pipelines\":\n case \"iceberg_table_pipelines\": {\n const v = entry.r2DataCatalogTableNamePipelines?.trim();\n if (v) return v;\n const fallback = entry.r2DataCatalogTableName?.trim();\n if (!fallback) {\n throw new TamerReferenceError(\n `logpush_pipelines state for \"${logicalName}\" has no table name (sink not yet created). ` +\n `Re-run \\`tamer apply\\` for env \"${ctx.env}\".`,\n fieldPath,\n );\n }\n return fallback;\n }\n case \"r2_data_catalog_namespace\":\n case \"iceberg_namespace\": {\n const v = (entry.r2DataCatalogNamespace ?? \"default\").trim();\n return v || \"default\";\n }\n case \"name\":\n return entry.pipelineName;\n case \"id\":\n return entry.pipelineId;\n default:\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on logpush_pipelines reference — ` +\n `expected r2_data_catalog_table_name | r2_data_catalog_table_name_pipelines | r2_data_catalog_namespace | name | id | iceberg_table | iceberg_table_pipelines | iceberg_namespace`,\n fieldPath,\n );\n }\n}\n\n/**\n * Resolve a `${tamer:import:<stack>.<output>}` against pre-fetched sibling\n * stack outputs. The pre-fetch (`fetchStackImports`) loads every imported\n * stack's `cfi_state:{stack}` row before resolution begins; this lookup is\n * pure map access. Throws if the stack isn't in `ctx.imports` (config\n * never declared it / pre-fetch wasn't wired in for this command) or if\n * the named output hasn't been published yet (sibling stack hasn't run\n * `apply` since the output was declared, or has been destroyed).\n */\nfunction lookupImport(\n ctx: ReferenceContext,\n stackName: string,\n outputName: string,\n fieldPath: string,\n): string {\n const imports = ctx.imports;\n if (!imports || !(stackName in imports)) {\n throw new TamerReferenceError(\n `Reference \\${tamer:import:${stackName}.${outputName}} cannot be resolved — ` +\n `no imported stack \"${stackName}\" available. Ensure stack \"${stackName}\" ` +\n `exists in env \"${ctx.env}\" (run 'tamer apply' there first) and that the ` +\n `current command pre-fetches sibling stacks.`,\n fieldPath,\n );\n }\n const stackOutputs = imports[stackName]!;\n if (!(outputName in stackOutputs)) {\n const available = Object.keys(stackOutputs).sort();\n const hint = available.length > 0\n ? ` Available outputs on stack \"${stackName}\": ${available.join(\", \")}.`\n : ` Stack \"${stackName}\" has no published outputs — run 'tamer apply' there with an \\`outputs:\\` block.`;\n throw new TamerReferenceError(\n `Reference \\${tamer:import:${stackName}.${outputName}} cannot be resolved — ` +\n `output \"${outputName}\" not found on imported stack \"${stackName}\".${hint}`,\n fieldPath,\n );\n }\n return stackOutputs[outputName]!;\n}\n\nfunction lookupResource(\n ctx: ReferenceContext,\n kind: string,\n logicalName: string,\n field: string,\n fieldPath: string,\n predicate: (entry: StateEntry) => boolean,\n): string {\n const all = ctx.state.getAll();\n const entry = Object.values(all).find(predicate);\n if (!entry) {\n throw new TamerReferenceError(\n `Reference \\${tamer:${kind}:${logicalName}.${field}} cannot be resolved — no ${kind} resource named \"${logicalName}\" in state. Run 'tamer apply --env ${ctx.env}' first.`,\n fieldPath,\n );\n }\n\n switch (field) {\n case \"name\":\n return resourceName(entry);\n case \"id\":\n return resourceId(entry, kind, logicalName, fieldPath);\n case \"binding\":\n return resourceBinding(entry);\n default:\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on ${kind} reference — expected name | id | binding`,\n fieldPath,\n );\n }\n}\n\nfunction resourceName(entry: StateEntry): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n case \"dispatch_namespace\":\n case \"r2_bucket\":\n return entry.derivedName;\n case \"dns_record\":\n return entry.name;\n case \"logpush_job\":\n return entry.derivedName;\n case \"logpush_pipelines\":\n return entry.pipelineName;\n case \"worker_route\":\n return entry.pattern;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .name reference — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction resourceId(\n entry: StateEntry,\n kind: string,\n logicalName: string,\n fieldPath: string,\n): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n return entry.cfId;\n case \"r2_bucket\":\n throw new TamerReferenceError(\n `R2 bucket \"${logicalName}\" has no .id (R2 buckets are addressed by name); use \\${tamer:${kind}:${logicalName}.name}`,\n fieldPath,\n );\n case \"dispatch_namespace\":\n return entry.derivedName;\n case \"dns_record\":\n return entry.recordId;\n case \"logpush_job\":\n return String(entry.cfJobId);\n case \"logpush_pipelines\":\n return entry.pipelineId;\n case \"worker_route\":\n return entry.routeId;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .id — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction resourceBinding(entry: StateEntry): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"r2_bucket\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n return entry.bindingKey;\n case \"dispatch_namespace\":\n return entry.derivedName;\n case \"dns_record\":\n throw new Error(\n \"internal: dns_record has no .binding — use .name or .id in config references\",\n );\n case \"logpush_job\":\n throw new Error(\n \"internal: logpush_job has no .binding — use .name or .id in config references\",\n );\n case \"logpush_pipelines\":\n throw new Error(\n \"internal: logpush_pipelines has no .binding — use .name or .id in config references\",\n );\n case \"worker_route\":\n return entry.routeId;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .binding — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction lookupDispatchNamespace(\n ctx: ReferenceContext,\n logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n const declared = getDispatchNamespaces(ctx.config).find(\n (d) => d.logicalName === logicalName,\n );\n if (!declared) {\n throw new TamerReferenceError(\n `Reference \\${tamer:dispatch_namespace:${logicalName}.${field}} cannot be resolved — no dispatchNamespaces entry named \"${logicalName}\" in the Tamer project config`,\n fieldPath,\n );\n }\n if (field !== \"name\" && field !== \"id\") {\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on dispatch_namespace reference — expected name | id`,\n fieldPath,\n );\n }\n const all = ctx.state.getAll();\n const stateEntry = Object.values(all).find(\n (e) => e.type === \"dispatch_namespace\" && e.logicalName === logicalName,\n );\n if (!stateEntry || stateEntry.type !== \"dispatch_namespace\") {\n throw new TamerReferenceError(\n `Reference \\${tamer:dispatch_namespace:${logicalName}.${field}} unresolved — no state entry. Run 'tamer apply --env ${ctx.env}' first.`,\n fieldPath,\n );\n }\n return stateEntry.derivedName;\n}\n\nfunction lookupWorker(\n ctx: ReferenceContext,\n workerKey: string,\n field: string,\n fieldPath: string,\n): string {\n let target: WorkerConfig | undefined;\n if (ctx.config.workers && ctx.config.workers[workerKey]) {\n target = ctx.config.workers[workerKey];\n } else if (ctx.config.worker && workerKey === \"default\") {\n target = ctx.config.worker;\n }\n if (!target) {\n throw new TamerReferenceError(\n `Reference \\${tamer:worker:${workerKey}.${field}} cannot be resolved — no worker key \"${workerKey}\" in the Tamer project config`,\n fieldPath,\n );\n }\n if (field !== \"name\") {\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on worker reference — only \"name\" is supported (the env-suffixed deployed script name)`,\n fieldPath,\n );\n }\n return resolveDeployedWorkerName(\n ctx.config,\n workerKey,\n target,\n ctx.env,\n ctx.naming,\n );\n}\n\n/**\n * True iff `value` is a single full-string reference (e.g. `\"${tamer:r2:x.name}\"`).\n * Surface for callers that want to short-circuit type coercion.\n */\nexport function isFullReference(value: string): boolean {\n FULL_REF_RE.lastIndex = 0;\n return FULL_REF_RE.test(value);\n}\n","import { resolve } from \"path\";\nimport {\n materializeTamerResolvable,\n materializeVars,\n} from \"../../dx/normalize.js\";\nimport type {\n CfiConfig,\n TenantMeta,\n TamerResolvableString,\n WorkerConfig,\n WorkerResources,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport {\n effectiveDispatchNamespaceName,\n isEphemeralEnv,\n} from \"../../features/dispatch-namespace/dispatch-namespace.resolve.js\";\nimport type { Route, WranglerConfig } from \"../../generated/wrangler-types.js\";\nimport { NamingEngine } from \"../naming/NamingEngine.js\";\nimport {\n effectiveRoutesForEnv,\n isApiManagedZoneRoute,\n isWranglerOnlyTamerRoute,\n} from \"../routes/routes.resolve.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport { assertSafeWranglerOutFile } from \"../wrangler/wranglerOutFile.js\";\nimport {\n resolveReferencesInString,\n resolveReferencesInVars,\n} from \"../references/references.js\";\nimport type { RouteResourceConfig } from \"../../types.js\";\n\n/** Wrangler script name after env suffix rules (matches `tamer deploy`). */\nexport function resolveDeployedWorkerName(\n _config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n naming: NamingEngine,\n): string {\n const m = workerConfig as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n if (sn) {\n if (env === \"local\") return sn;\n return `${sn}-${env}`;\n }\n return naming.workerName(workerKey, env);\n}\n\n/**\n * Map from base service-binding target name (`scriptName` for envs other than\n * `local`, or the local-deployed name) → env-suffixed deployed name for every\n * worker in `config`. Used to auto-rewrite intra-stack `services[].service`\n * fields so fixtures don't have to repeat env overrides for every env.\n */\nexport function buildIntraStackScriptNameMap(\n config: CfiConfig,\n env: string,\n naming: NamingEngine,\n): Map<string, string> {\n const map = new Map<string, string>();\n if (config.workers) {\n for (const [key, wc] of Object.entries(config.workers)) {\n const m = wc as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n const baseName = sn ?? naming.workerName(key, \"local\");\n const deployed = resolveDeployedWorkerName(config, key, wc, env, naming);\n map.set(baseName, deployed);\n }\n }\n if (config.worker) {\n const w = config.worker;\n const m = w as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n const baseName = sn ?? naming.workerName(\"default\", \"local\");\n const deployed = resolveDeployedWorkerName(\n config,\n \"default\",\n w,\n env,\n naming,\n );\n map.set(baseName, deployed);\n }\n return map;\n}\n\n/** Returns a worker config copy whose `services[].service` is rewritten to env-suffixed deployed names. */\nexport function rewriteIntraStackServiceTargets(\n workerConfig: WorkerConfig,\n baseToDeployed: Map<string, string>,\n): WorkerConfig {\n const services = (\n workerConfig as WorkerConfig & {\n services?: Array<{ binding: string; service: string; environment?: string }>;\n }\n ).services;\n if (!services || services.length === 0) return workerConfig;\n let rewroteAny = false;\n const rewritten = services.map((s) => {\n const target = baseToDeployed.get(s.service);\n if (!target || target === s.service) return s;\n rewroteAny = true;\n return { ...s, service: target };\n });\n if (!rewroteAny) return workerConfig;\n return { ...workerConfig, services: rewritten };\n}\n\nexport interface ResolvedWorkerConfig {\n workerKey: string;\n workerName: string;\n workerDir: string;\n env: string;\n /** Basename of generated Wrangler JSON (default `wrangler.json`). */\n wranglerOutFile: string;\n /** Passed to `wrangler deploy --dispatch-namespace` when set. */\n dispatchNamespace?: string;\n wranglerConfig: WranglerConfig;\n resources: WorkerResources;\n /**\n * Zone routes from `tamerRoutes` managed via Workers Routes API after\n * `wrangler deploy` — not embedded in {@link wranglerConfig.routes}.\n */\n apiManagedRoutes: import(\"../../generated/wrangler-types.js\").ZoneNameRoute[];\n}\n\nfunction mergeVars(\n base: Record<string, TamerResolvableString> = {},\n override: Record<string, TamerResolvableString> = {},\n): Record<string, TamerResolvableString> {\n return { ...base, ...override };\n}\n\n/** Same env merge as `resolveWorkerConfig` (for deploy topo-sort service edges). */\nexport function mergedWorkerConfigForEnv(\n workerConfig: WorkerConfig,\n env: string,\n tenant: TenantMeta,\n): WorkerConfig {\n let merged = { ...workerConfig } as WorkerConfig & {\n vars?: Record<string, string>;\n };\n\n if (env === \"local\" && workerConfig.local) {\n merged = {\n ...merged,\n ...workerConfig.local,\n vars: mergeVars(workerConfig.vars, workerConfig.local.vars),\n } as WorkerConfig & { vars?: Record<string, string> };\n } else if (workerConfig.env?.[env]) {\n const envOverride = workerConfig.env[env];\n merged = {\n ...merged,\n ...envOverride,\n vars: mergeVars(workerConfig.vars, envOverride.vars),\n } as WorkerConfig & { vars?: Record<string, string> };\n }\n\n const mv = (merged as WorkerConfig & { vars?: Record<string, string> }).vars;\n if (mv && Object.prototype.hasOwnProperty.call(mv, \"BRANCH_SUFFIX\")) {\n merged = {\n ...merged,\n vars: {\n ...mv,\n BRANCH_SUFFIX: isEphemeralEnv(env, tenant) ? env : \"\",\n },\n } as WorkerConfig & { vars?: Record<string, string> };\n }\n\n return merged;\n}\n\n/**\n * Align `dispatch_namespaces[].namespace` and `vars.WFP_NAMESPACE` with\n * {@link effectiveDispatchNamespaceName} for envs that have no explicit\n * `worker.env[env]` block (e.g. `pr-*` shared namespace).\n */\nexport function applyDispatchNamespaceEnvOverrides(\n config: CfiConfig,\n merged: WorkerConfig,\n env: string,\n): WorkerConfig {\n const dns = getDispatchNamespaces(config);\n if (dns.length === 0) return merged;\n const resolved = effectiveDispatchNamespaceName(dns[0], env, config.tenant);\n const m = merged as WorkerConfig & {\n dispatch_namespaces?: Array<{ binding: string; namespace: string }>;\n vars?: Record<string, string>;\n };\n let next: WorkerConfig = merged;\n if (m.dispatch_namespaces?.length) {\n next = {\n ...next,\n dispatch_namespaces: m.dispatch_namespaces.map((d) => ({\n ...d,\n namespace: resolved,\n })),\n } as WorkerConfig;\n }\n if (\n m.vars &&\n typeof m.vars.WFP_NAMESPACE === \"string\" &&\n m.vars.WFP_NAMESPACE === dns[0].namespace\n ) {\n const v = (next as WorkerConfig & { vars?: Record<string, string> }).vars;\n next = {\n ...(next as object),\n vars: { ...v!, WFP_NAMESPACE: resolved },\n } as WorkerConfig;\n }\n return next;\n}\n\n/**\n * Walk the merged worker config and replace `${tamer:<kind>:<logical>.<field>}`\n * references in `vars` and `tamerRoutes[].host` / `.zone` against the current\n * state snapshot. Also resolves `r2_buckets[].bucket_name`,\n * **`services[].service`**, **`dispatch_namespaces[].namespace`**, and\n * `resources.d1[].databaseName` when `ownership` is `external`. Throws\n * `TamerReferenceError` (with field path) if any\n * reference is unresolved — bubbles up to the caller as a fatal.\n */\nexport function resolveCrossResourceReferences(\n merged: WorkerConfig,\n ctx: {\n config: CfiConfig;\n env: string;\n state: StateManager;\n naming: NamingEngine;\n workerKey: string;\n tolerant?: boolean;\n /**\n * Pre-fetched sibling stack outputs (`fetchStackImports` result) so\n * `${tamer:import:<stack>.<output>}` references in worker `vars` /\n * `tamerRoutes` resolve without mid-resolution D1 reads.\n */\n imports?: Record<string, Record<string, string>>;\n /** Same as wrangler `account_id` (drives `${tamer:config:stack.account_id}`). */\n accountId: string;\n },\n): WorkerConfig {\n const refCtx = {\n config: ctx.config,\n env: ctx.env,\n state: ctx.state,\n naming: ctx.naming,\n tolerant: ctx.tolerant,\n imports: ctx.imports,\n accountId: ctx.accountId,\n };\n const m = merged as WorkerConfig & { vars?: Record<string, string> };\n let next: WorkerConfig = merged;\n if (m.vars) {\n const resolvedVars = resolveReferencesInVars(\n materializeVars(m.vars)!,\n refCtx,\n `worker[${ctx.workerKey}].vars`,\n );\n if (resolvedVars && resolvedVars !== m.vars) {\n next = { ...next, vars: resolvedVars } as WorkerConfig;\n }\n }\n const tamerRoutes = (\n next as WorkerConfig & { tamerRoutes?: RouteResourceConfig[] }\n ).tamerRoutes;\n if (tamerRoutes && tamerRoutes.length > 0) {\n let mutated = false;\n const resolvedRoutes = tamerRoutes.map((r, idx) => {\n const fieldBase = `worker[${ctx.workerKey}].tamerRoutes[${idx}]`;\n const host = resolveReferencesInString(\n r.host,\n refCtx,\n `${fieldBase}.host`,\n );\n const zone = r.zone\n ? resolveReferencesInString(r.zone, refCtx, `${fieldBase}.zone`)\n : r.zone;\n if (host !== r.host || zone !== r.zone) mutated = true;\n return { ...r, host, ...(zone !== undefined ? { zone } : {}) };\n });\n if (mutated) {\n next = { ...next, tamerRoutes: resolvedRoutes } as WorkerConfig;\n }\n }\n\n const r2Buckets = (\n next as WorkerConfig & {\n r2_buckets?: Array<{ binding: string; bucket_name: string }>;\n }\n ).r2_buckets;\n if (r2Buckets && r2Buckets.length > 0) {\n let mutated = false;\n const resolvedBuckets = r2Buckets.map((b, idx) => {\n const raw = b.bucket_name;\n if (raw === undefined) return b;\n const fieldBase = `worker[${ctx.workerKey}].r2_buckets[${idx}].bucket_name`;\n const bucket_name = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (bucket_name !== raw) mutated = true;\n return { ...b, bucket_name };\n });\n if (mutated) {\n next = { ...next, r2_buckets: resolvedBuckets } as WorkerConfig;\n }\n }\n\n const svc = (\n next as WorkerConfig & {\n services?: Array<{ binding: string; service: string; environment?: string }>;\n }\n ).services;\n if (svc && svc.length > 0) {\n let mutated = false;\n const resolvedSvc = svc.map((s, idx) => {\n const raw = s.service;\n const fieldBase = `worker[${ctx.workerKey}].services[${idx}].service`;\n const service = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (service !== raw) mutated = true;\n return { ...s, service };\n });\n if (mutated) {\n next = { ...next, services: resolvedSvc } as WorkerConfig;\n }\n }\n\n const dispatchNsMerged = (\n next as WorkerConfig & {\n dispatch_namespaces?: Array<{ binding: string; namespace: string }>;\n }\n ).dispatch_namespaces;\n if (dispatchNsMerged && dispatchNsMerged.length > 0) {\n let mutated = false;\n const resolvedDn = dispatchNsMerged.map((d, idx) => {\n const raw = d.namespace;\n const fieldBase = `worker[${ctx.workerKey}].dispatch_namespaces[${idx}].namespace`;\n const namespace = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (namespace !== raw) mutated = true;\n return { ...d, namespace };\n });\n if (mutated) {\n next = { ...next, dispatch_namespaces: resolvedDn } as WorkerConfig;\n }\n }\n\n const resBlock = (\n next as WorkerConfig & { resources?: WorkerResources }\n ).resources;\n if (resBlock?.d1 && resBlock.d1.length > 0) {\n let mutated = false;\n const d1Resolved = resBlock.d1.map((d1c, idx) => {\n if (d1c.ownership !== \"external\" || !d1c.databaseName) return d1c;\n const fieldBase = `worker[${ctx.workerKey}].resources.d1[${idx}].databaseName`;\n const databaseName = resolveReferencesInString(\n materializeTamerResolvable(d1c.databaseName),\n refCtx,\n fieldBase,\n );\n if (databaseName !== d1c.databaseName) mutated = true;\n return { ...d1c, databaseName };\n });\n if (mutated) {\n next = {\n ...next,\n resources: { ...resBlock, d1: d1Resolved },\n } as WorkerConfig;\n }\n }\n\n return next;\n}\n\nfunction stripTamerFields(config: Record<string, unknown>): Record<string, unknown> {\n const {\n path,\n config: configPath,\n resources,\n local,\n env,\n scriptName: _scriptName,\n wranglerOutFile: _out,\n dispatchNamespace: _dispatchNs,\n tamerRoutes: _tamerRoutes,\n tamerStaleRouteSweepZones: _tamerStaleRouteSweepZones,\n build: _build,\n secrets: _secrets,\n alias: _alias,\n ...rest\n } = config;\n return rest;\n}\n\nexport interface ResolveWorkerConfigOptions {\n /**\n * `strict` (default): unresolved `${tamer:...}` references throw, surfacing\n * a clear \"run apply first\" message. `tolerant`: leaves unresolved\n * references in place — used by read-only callers (`plan`, `drift`,\n * `status`) so a not-yet-applied config doesn't crash them.\n */\n referencesMode?: \"strict\" | \"tolerant\";\n /**\n * Pre-fetched sibling stack outputs powering\n * `${tamer:import:<stack>.<output>}`. Caller is responsible for\n * scanning the config (`importedStackNames`) and loading them via\n * `fetchStackImports` before invoking this resolver.\n */\n imports?: Record<string, Record<string, string>>;\n}\n\n/**\n * Env merge + intra-stack `services` rewrite + sibling-stack resolution for\n * **`resources.d1[].databaseName` only** when `ownership: \"external\"`.\n *\n * Use before {@link ResourceModule.pickResources} during `apply` / `sync` /\n * `drift` so imported D1 names are known **without** resolving worker `vars`\n * (those references often need resources created earlier in the same `apply`).\n */\nexport function mergeWorkerConfigForResourcePick(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): WorkerConfig {\n let merged = mergedWorkerConfigForEnv(workerConfig, env, config.tenant);\n merged = applyDispatchNamespaceEnvOverrides(config, merged, env);\n const intraMap = buildIntraStackScriptNameMap(config, env, naming);\n merged = rewriteIntraStackServiceTargets(merged, intraMap);\n const refCtx = {\n config,\n env,\n state,\n naming,\n tolerant: opts.referencesMode === \"tolerant\",\n imports: opts.imports,\n accountId,\n };\n const resBlock = (merged as WorkerConfig & { resources?: WorkerResources })\n .resources;\n if (!resBlock?.d1?.length) return merged;\n\n const d1Resolved = resBlock.d1.map((d1c, idx) => {\n if (d1c.ownership !== \"external\" || !d1c.databaseName) return d1c;\n const fieldBase = `worker[${workerKey}].resources.d1[${idx}].databaseName`;\n const databaseName = resolveReferencesInString(\n materializeTamerResolvable(d1c.databaseName),\n refCtx,\n fieldBase,\n );\n return { ...d1c, databaseName };\n });\n return {\n ...merged,\n resources: { ...resBlock, d1: d1Resolved },\n } as WorkerConfig;\n}\n\n/**\n * Env-merged worker config with every `${tamer:…}` site resolved for wrangler\n * (`vars`, `tamerRoutes`, `r2_buckets[].bucket_name`, external D1 names).\n * Used by {@link resolveWorkerConfig} after resource state is up to date.\n */\nexport function mergeWorkerConfigWithResolvedRefs(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): WorkerConfig {\n let merged = mergedWorkerConfigForEnv(workerConfig, env, config.tenant);\n merged = applyDispatchNamespaceEnvOverrides(config, merged, env);\n const intraMap = buildIntraStackScriptNameMap(config, env, naming);\n merged = rewriteIntraStackServiceTargets(merged, intraMap);\n return resolveCrossResourceReferences(merged, {\n config,\n env,\n state,\n naming,\n workerKey,\n tolerant: opts.referencesMode === \"tolerant\",\n imports: opts.imports,\n accountId,\n });\n}\n\nexport async function resolveWorkerConfig(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n baseDir: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): Promise<ResolvedWorkerConfig> {\n const merged = mergeWorkerConfigWithResolvedRefs(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n opts,\n );\n\n const workerDir = workerConfig.path\n ? resolve(baseDir, workerConfig.path)\n : baseDir;\n\n const m = merged as WorkerConfig & {\n scriptName?: string;\n wranglerOutFile?: string;\n dispatchNamespace?: string;\n };\n const workerName = resolveDeployedWorkerName(\n config,\n workerKey,\n merged as WorkerConfig,\n env,\n naming,\n );\n\n const wranglerOutFile = assertSafeWranglerOutFile(\n m.wranglerOutFile?.trim() || \"wrangler.json\",\n );\n const dispatchNamespace = m.dispatchNamespace?.trim() || undefined;\n\n const stripped = stripTamerFields(merged as Record<string, unknown>);\n const tamerRoutes = (\n merged as WorkerConfig & { tamerRoutes?: import(\"../../types.js\").RouteResourceConfig[] }\n ).tamerRoutes;\n const expandedRoutes = effectiveRoutesForEnv(tamerRoutes, env);\n const apiManagedRoutes = expandedRoutes.filter(isApiManagedZoneRoute);\n const wranglerTamerRoutes = expandedRoutes.filter(isWranglerOnlyTamerRoute);\n const existingRoutes = (stripped.routes as Route[] | undefined) ?? [];\n const mergedRoutes: Route[] = [...existingRoutes, ...wranglerTamerRoutes];\n\n /** Non-local deploys emit `routes: []` when there are none — omitting `routes` can leave stale Wrangler-published custom domains attached from a prior config. */\n const wranglerRoutes: Route[] | undefined =\n mergedRoutes.length > 0 ? mergedRoutes : env === \"local\" ? undefined : [];\n\n const wranglerConfig: WranglerConfig = {\n ...stripped,\n ...(wranglerRoutes !== undefined ? { routes: wranglerRoutes } : {}),\n name: workerName,\n account_id: accountId,\n compatibility_date:\n (stripped.compatibility_date as string | undefined) ??\n config.compatibility_date,\n } as WranglerConfig;\n\n return {\n workerKey,\n workerName,\n workerDir,\n env,\n wranglerOutFile,\n dispatchNamespace,\n wranglerConfig,\n resources: (merged as WorkerConfig & { resources?: WorkerResources })\n .resources ??\n workerConfig.resources ??\n {},\n apiManagedRoutes,\n };\n}\n","import { z } from \"zod\";\n\nconst D1StateEntrySchema = z.object({\n type: z.literal(\"d1_database\"),\n logicalName: z.string(),\n shardDate: z.string().optional(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n migrationsDir: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst R2StateEntrySchema = z.object({\n type: z.literal(\"r2_bucket\"),\n logicalName: z.string(),\n createdDate: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst KVStateEntrySchema = z.object({\n type: z.literal(\"kv_namespace\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst QueueStateEntrySchema = z.object({\n type: z.literal(\"queue\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n producerBinding: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst VectorizeStateEntrySchema = z.object({\n type: z.literal(\"vectorize\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n dimensions: z.number(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst AIGatewayStateEntrySchema = z.object({\n type: z.literal(\"ai_gateway\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n cacheTtl: z.number(),\n cacheInvalidateOnUpdate: z.boolean(),\n collectLogs: z.boolean(),\n authentication: z.boolean(),\n rateLimitingInterval: z.number(),\n rateLimitingLimit: z.number(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst PipelineStateEntrySchema = z.object({\n type: z.literal(\"pipeline\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n sql: z.string(),\n status: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst WorkflowStateEntrySchema = z.object({\n type: z.literal(\"workflow\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n className: z.string(),\n scriptName: z.string(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst SecretsStoreStateEntrySchema = z.object({\n type: z.literal(\"secrets_store\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst HyperdriveStateEntrySchema = z.object({\n type: z.literal(\"hyperdrive\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n originHost: z.string(),\n originDatabase: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst DnsRecordTypeSchema = z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n]);\n\nconst DnsRecordStateEntrySchema = z.object({\n type: z.literal(\"dns_record\"),\n logicalName: z.string(),\n zoneId: z.string(),\n recordType: DnsRecordTypeSchema,\n name: z.string(),\n content: z.string(),\n ttl: z.number(),\n proxied: z.boolean(),\n priority: z.number().optional(),\n comment: z.string(),\n recordId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst DispatchNamespaceStateEntrySchema = z.object({\n type: z.literal(\"dispatch_namespace\"),\n logicalName: z.string(),\n derivedName: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst LogpushJobStateEntrySchema = z.object({\n type: z.literal(\"logpush_job\"),\n logicalName: z.string(),\n derivedName: z.string(),\n cfJobId: z.number(),\n dataset: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst LogpushPipelinesStateEntrySchema = z.object({\n type: z.literal(\"logpush_pipelines\"),\n logicalName: z.string(),\n streamId: z.string(),\n streamIngestBaseUrl: z.string().optional(),\n sinkId: z.string(),\n pipelineId: z.string(),\n streamName: z.string(),\n sinkName: z.string(),\n pipelineName: z.string(),\n r2DataCatalogTableName: z.string().optional(),\n r2DataCatalogTableNamePipelines: z.string().optional(),\n r2DataCatalogNamespace: z.string().optional(),\n catalogBucketDerivedName: z.string(),\n mintedR2CatalogTokenId: z.string().optional(),\n mintedR2CatalogTokenValue: z.string().optional(),\n mintedPipelinesSendTokenId: z.string().optional(),\n mintedPipelinesSendTokenValue: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst WorkerRouteStateEntrySchema = z.object({\n type: z.literal(\"worker_route\"),\n workerKey: z.string(),\n workerName: z.string(),\n zoneId: z.string(),\n zoneName: z.string(),\n routeId: z.string(),\n pattern: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst SecretStateEntrySchema = z.object({\n type: z.literal(\"secret\"),\n worker: z.string(),\n name: z.string(),\n lastPushedHash: z.string(),\n lastPushedAt: z.string(),\n});\n\nconst StateEntrySchema = z.discriminatedUnion(\"type\", [\n D1StateEntrySchema,\n R2StateEntrySchema,\n KVStateEntrySchema,\n QueueStateEntrySchema,\n HyperdriveStateEntrySchema,\n VectorizeStateEntrySchema,\n AIGatewayStateEntrySchema,\n PipelineStateEntrySchema,\n WorkflowStateEntrySchema,\n SecretsStoreStateEntrySchema,\n DnsRecordStateEntrySchema,\n DispatchNamespaceStateEntrySchema,\n LogpushJobStateEntrySchema,\n LogpushPipelinesStateEntrySchema,\n WorkerRouteStateEntrySchema,\n SecretStateEntrySchema,\n]);\n\nconst ProvisioningStatusSchema = z.enum([\n \"pending\",\n \"d1_created\",\n \"migrations_applied\",\n \"script_uploaded\",\n \"ready\",\n \"tombstoned\",\n]);\n\nconst TenantD1ShardRefSchema = z.object({\n role: z.string(),\n derivedName: z.string(),\n cfId: z.string(),\n});\n\nconst TenantStateEntrySchema = z.object({\n product: z.string(),\n workspace: z.string(),\n provisioningStatus: ProvisioningStatusSchema,\n dispatchNamespaceName: z.string(),\n scriptName: z.string(),\n d1Shards: z.array(TenantD1ShardRefSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst CfiStackMetaSchema = z.object({\n name: z.string().optional(),\n owner: z.string().optional(),\n});\n\nconst CfiOperationNameSchema = z.enum([\n \"bootstrap\",\n \"apply\",\n \"deploy\",\n \"destroy\",\n \"provision-tenant\",\n \"destroy-tenant\",\n \"import\",\n \"sync\",\n]);\n\nconst CfiOperationStatusSchema = z.enum([\n \"in_progress\",\n \"succeeded\",\n \"failed\",\n]);\n\nconst CfiStackOutputValueSchema = z.object({\n value: z.string(),\n source: z.string(),\n resolvedAt: z.string(),\n});\n\nconst CfiOperationRecordSchema = z.object({\n command: CfiOperationNameSchema,\n status: CfiOperationStatusSchema,\n startedAt: z.string(),\n completedAt: z.string().optional(),\n errorMessage: z.string().optional(),\n detail: z.string().optional(),\n});\n\nexport const CfiStateSchema = z.object({\n tenantId: z.string(),\n env: z.string(),\n schemaVersion: z.number(),\n syncedAt: z.string(),\n resources: z.record(z.string(), StateEntrySchema),\n /** Optimistic concurrency: incremented on each successful D1 persist. */\n revision: z.number().optional(),\n /** Runtime-provisioned workspace tenants (not declared in `tamer.config.ts`). */\n tenants: z.record(z.string(), TenantStateEntrySchema).optional(),\n /** Stack metadata. */\n stack: CfiStackMetaSchema.optional(),\n /** Resolved + persisted `outputs:` from `tamer.config.ts`. */\n stackOutputs: z.record(z.string(), CfiStackOutputValueSchema).optional(),\n /** Last operation that mutated this state row. */\n lastOperation: CfiOperationRecordSchema.optional(),\n /** Completed ops (newest first), capped on append. */\n operationHistory: z.array(CfiOperationRecordSchema).optional(),\n});\n\nexport type CfiStateValidated = z.infer<typeof CfiStateSchema>;\nexport type TenantStateEntryValidated = z.infer<typeof TenantStateEntrySchema>;\n","/**\n * Single source of truth for \"what stack are we?\" The value flows into the\n * D1 row key (`cfi_state:{stackName}`) and into\n * `${tamer:import:<stackName>.<output>}` lookups, so commands MUST agree\n * on the same derivation. Order: explicit `config.stack.name` →\n * `tenant.slug` → literal `\"default\"` (defensive — the loader requires\n * `tenant.slug` to be set, but the StateManager constructor accepts the\n * fallback so unit tests that build state without a config keep working).\n */\nimport type { CfiConfig } from \"../../types.js\";\n\nexport const DEFAULT_STACK_NAME = \"default\";\n\nexport function stackNameForConfig(config: CfiConfig): string {\n return config.stack?.name ?? config.tenant.slug ?? DEFAULT_STACK_NAME;\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\nimport type { CfiState } from \"../../types.js\";\nimport { CfiStateSchema } from \"./stateSchema.js\";\nimport { DEFAULT_STACK_NAME } from \"./stackName.js\";\n\n/**\n * Schema versions:\n * 2: original (resources only).\n * 3: + `tenants` map, + `revision` for optimistic concurrency.\n * 4: + `stack` metadata, + `lastOperation` (CloudFormation-style stack info).\n * All v4 additions are optional; existing v3 documents are upgraded\n * in-place during parse with no data loss.\n * 5: + `secret` state entries (fingerprints only; additive resource rows).\n */\nconst STATE_SCHEMA_VERSION = 5;\n\n/**\n * Account-scoped D1 database that holds JSON state for **all** envs\n * (`tamer-state`). Each env's state is isolated by row key:\n * `cfi_state:{env}:{stackName}`.\n */\nexport function tamerStateDatabaseName(): string {\n return \"tamer-state\";\n}\n\n/**\n * D1 `tamer_kv.k` value for a given env + stack's state row.\n * Format: `cfi_state:{env}:{stackName}` — env namespacing ensures\n * cross-env isolation within the shared account-scoped D1.\n */\nexport function stateRowKey(env: string, stackName: string): string {\n return `cfi_state:${env}:${stackName}`;\n}\n\nexport function createEmptyCfiState(tenantId: string, env: string): CfiState {\n return {\n tenantId,\n env,\n schemaVersion: STATE_SCHEMA_VERSION,\n syncedAt: new Date().toISOString(),\n resources: {},\n revision: 0,\n tenants: {},\n };\n}\n\n/** In-place upgrade for parsed JSON before Zod validation. */\nexport function migrateRawCfiStateInPlace(raw: Record<string, unknown>): void {\n const v = raw.schemaVersion;\n if (typeof v !== \"number\") {\n throw new Error(\"tamer state: schemaVersion must be a number\");\n }\n if (v < 2) {\n throw new Error(`tamer state: unsupported schemaVersion ${v}`);\n }\n if (v > STATE_SCHEMA_VERSION) {\n throw new Error(\n `tamer state: unknown schemaVersion ${v} (engine supports up to ${STATE_SCHEMA_VERSION})`,\n );\n }\n if (v === 2) {\n raw.tenants = {};\n raw.revision = 0;\n raw.schemaVersion = 3;\n }\n if (!raw.tenants || typeof raw.tenants !== \"object\") {\n raw.tenants = {};\n }\n if (typeof raw.revision !== \"number\") {\n raw.revision = 0;\n }\n if (raw.schemaVersion === 3) {\n raw.schemaVersion = 4;\n }\n if (raw.schemaVersion === 4) {\n raw.schemaVersion = STATE_SCHEMA_VERSION;\n }\n}\n\nexport async function findTamerStateDatabaseUuid(\n api: CFApiClient,\n): Promise<string | undefined> {\n const name = tamerStateDatabaseName();\n const all = await api.d1ListAll();\n return all.find((d) => d.name === name)?.uuid;\n}\n\n/**\n * Create `tamer-state` (account-scoped) if missing, ensure `tamer_kv` table.\n * When `env` is provided, also seeds an initial empty\n * `cfi_state:{env}:{stackName}` row for that stack. When `env` is omitted\n * (e.g. from `tamer bootstrap`), only creates the D1 + table — the first\n * `tamer apply` will seed the row automatically via the StateManager.\n *\n * Idempotent — re-running is always safe.\n */\nexport async function ensureTamerStateDatabase(\n api: CFApiClient,\n tenantId: string,\n env?: string,\n stackName: string = DEFAULT_STACK_NAME,\n): Promise<string> {\n let uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) {\n const created = await api.d1Create(tamerStateDatabaseName());\n uuid = created.uuid;\n }\n\n await api.d1Query(\n uuid,\n `CREATE TABLE IF NOT EXISTS tamer_kv (\n k TEXT PRIMARY KEY,\n v TEXT NOT NULL\n )`,\n );\n\n if (!env) return uuid;\n\n const rowKey = stateRowKey(env, stackName);\n const { rows } = await api.d1Query(\n uuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n if (rows.length === 0) {\n const initial = createEmptyCfiState(tenantId, env);\n await api.d1Query(\n uuid,\n `INSERT INTO tamer_kv (k, v) VALUES (?, ?)`,\n [rowKey, JSON.stringify(initial)],\n );\n }\n\n return uuid;\n}\n\nexport function parseCfiStateJson(json: string): CfiState {\n const raw = JSON.parse(json) as Record<string, unknown>;\n migrateRawCfiStateInPlace(raw);\n const result = CfiStateSchema.safeParse(raw);\n if (!result.success) {\n throw new Error(`Invalid tamer state JSON: ${result.error.message}`);\n }\n return result.data as CfiState;\n}\n\n/**\n * Delete all state rows for a specific env from the shared account-scoped D1.\n * Used by `tamer destroy --wipe-metadata` to clean up an env's state without\n * affecting other envs that share the same `tamer-state` database.\n *\n * Note: this does NOT delete the D1 database itself — the shared `tamer-state`\n * database persists for other envs. To remove Tamer entirely from an account,\n * delete the D1/R2 resources manually via the Cloudflare dashboard.\n */\nexport async function deleteEnvStateRows(\n api: CFApiClient,\n env: string,\n): Promise<boolean> {\n const uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) return false;\n await api.d1Query(\n uuid,\n `DELETE FROM tamer_kv WHERE k LIKE ?`,\n [`cfi_state:${env}:%`],\n );\n return true;\n}\n","import type { TenantMeta } from \"../../types.js\";\nimport { isEphemeralEnv } from \"../../features/dispatch-namespace/dispatch-namespace.resolve.js\";\n\n/** Stable map key for `CfiState.tenants` (workspace-scoped product tenant). */\nexport function tenantStateKey(product: string, workspace: string): string {\n return `${product}:${workspace}`;\n}\n\n/**\n * Dispatch-namespace script name per `docs/handoff.md` §6: non-ephemeral\n * envs collapse to `{product}-{workspace}` (one script per workspace);\n * ephemeral envs (matching `tenant.ephemeralEnvPattern`) carry the env\n * in the script name (`{product}-{workspace}-{env}`) so multiple\n * previews can coexist in the shared `{ns}-ephemeral` namespace.\n */\nexport function tenantDispatchScriptName(\n product: string,\n workspace: string,\n env: string,\n tenant: TenantMeta,\n): string {\n if (isEphemeralEnv(env, tenant)) {\n return `${product}-${workspace}-${env}`;\n }\n return `${product}-${workspace}`;\n}\n\nconst SAFE = /[^a-z0-9_-]/gi;\n\n/**\n * Per-shard D1 database name for a tenant. Stable across `provision-tenant`\n * runs and across env so re-provisioning + drift detection can match by\n * name. Format: `db_{role}_{w}_{p}_t_{tid}_{env}`.\n *\n * db_system_acme_todo_t_platform_prod\n * db_app_acme_todo_t_platform_prod\n *\n * `role` is whatever the operator declared in `tenant.d1Shards` in\n * `tamer.config.ts`. Tamer is opinion-free about the shard layout — a\n * Dragoncore-style product picks `[\"system\", \"app\", \"history\"]`, a\n * single-DB tenant picks `[\"main\"]`, an audit-only tenant picks\n * `[\"audit\"]`, etc. The role itself is validated by the loader (lowercase\n * ASCII subset) so it slots cleanly into the D1 naming scheme.\n *\n * D1 names are length-bounded (Cloudflare currently allows up to 64\n * chars), and this scheme keeps every shard well under that limit even\n * for long workspace + product slugs.\n */\nexport function tenantShardDatabaseName(\n role: string,\n workspace: string,\n product: string,\n platformTenantId: string,\n env: string,\n): string {\n const w = workspace.replace(SAFE, \"_\").toLowerCase();\n const p = product.replace(SAFE, \"_\").toLowerCase();\n return `db_${role}_${w}_${p}_t_${platformTenantId}_${env}`;\n}\n\n/**\n * Parse + validate a `--shards a,b,c` CLI argument against the configured\n * shard set in `tamer.config.ts`. The CLI flag may only **trim** the\n * configured layout (e.g. `--shards system` on a stack whose config\n * declares `[\"system\",\"app\",\"history\"]` provisions just the system\n * shard for an ephemeral preview); it cannot extend it, because the\n * config is the source of truth that `apply` / `drift` / `destroy`\n * other operators read.\n *\n * Returns the requested roles in canonical order (matches `allowed`\n * order, regardless of input order) so plan/apply output is\n * deterministic and partial-failure resumes pick up at the next\n * canonical role.\n */\nexport function parseTenantShardRoles(\n raw: string,\n allowed: readonly string[],\n): string[] {\n const allowedSet = new Set(allowed);\n const requested = raw\n .split(\",\")\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean);\n const unknown = requested.filter((r) => !allowedSet.has(r));\n if (unknown.length > 0) {\n const list = allowed.length > 0 ? allowed.join(\", \") : \"(none configured)\";\n throw new Error(\n `unknown tenant shard role(s) \"${unknown.join(\", \")}\"; ` +\n `must be a subset of tenant.d1Shards in the Tamer project config: ${list}`,\n );\n }\n const seen = new Set(requested);\n return allowed.filter((r) => seen.has(r));\n}\n","/** Thrown when D1 `cfi_state` was updated by another writer since {@link StateManager.hydrate}. */\nexport class StateConflictError extends Error {\n readonly code = \"STATE_CONFLICT\" as const;\n constructor(message: string) {\n super(message);\n this.name = \"StateConflictError\";\n }\n}\n","import type {\n CfiState,\n CfiOperationName,\n CfiOperationRecord,\n CfiStackMeta,\n CfiStackOutputValue,\n StateEntry,\n TenantStateEntry,\n} from \"../../types.js\";\nimport type { CFApiClient } from \"../api/CFApiClient.js\";\nimport {\n createEmptyCfiState,\n findTamerStateDatabaseUuid,\n parseCfiStateJson,\n stateRowKey,\n} from \"./tamerStateDb.js\";\nimport { tenantStateKey } from \"../tenant/tenantKeys.js\";\nimport { StateConflictError } from \"./StateConflictError.js\";\nimport { DEFAULT_STACK_NAME } from \"./stackName.js\";\n\nconst OPERATION_HISTORY_CAP = 50;\n\n/**\n * Authoritative deployment state for an env.\n *\n * - **Non-local:** stored as JSON in Cloudflare D1 (`tamer-state`,\n * account-scoped). Each env's state is isolated by row key:\n * `cfi_state:{env}:{stackName}`.\n * Call {@link hydrate} before {@link load}, then {@link persist} after mutations.\n * - **local:** in-memory only (no persistence).\n */\nexport class StateManager {\n private state: CfiState | null = null;\n private dirty = false;\n /** Set when {@link hydrate} loads remote state. */\n private tamerStateDbUuid: string | null = null;\n /**\n * Remote `revision` at last hydrate (or last successful persist). Used for\n * optimistic concurrency on D1 persist.\n */\n private baselineRevision = 0;\n\n /**\n * @param tenantId `config.tenant.id` — recorded on the state row for\n * diagnostics; not part of the row key.\n * @param env Cloudflare environment name; included in the D1 row key\n * (`cfi_state:{env}:{stackName}`) for isolation within the\n * shared account-scoped `tamer-state` database.\n * @param stackName Stack identity (`config.stack.name ?? tenant.slug`).\n * Combined with env to form the D1 row key, so multiple\n * stacks and multiple envs coexist in one D1 without\n * clobbering each other. Defaults to `\"default\"`.\n */\n constructor(\n private tenantId: string,\n private env: string,\n private stackName: string = DEFAULT_STACK_NAME,\n ) {}\n\n /**\n * Load state from D1 (remote) or allocate empty state (local).\n * Required before {@link load} for every command.\n */\n async hydrate(api: CFApiClient): Promise<void> {\n if (this.state) return;\n\n if (this.env === \"local\") {\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n return;\n }\n\n const uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) {\n throw new Error(\n `Tamer state database \"tamer-state\" not found. Run: tamer bootstrap --env ${this.env}`,\n );\n }\n this.tamerStateDbUuid = uuid;\n\n const rowKey = stateRowKey(this.env, this.stackName);\n const { rows } = await api.d1Query(\n uuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n if (rows.length === 0) {\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n this.dirty = true;\n return;\n }\n const v = rows[0]![\"v\"];\n if (typeof v !== \"string\") {\n throw new Error(`tamer_kv.${rowKey} must be a string column`);\n }\n this.state = parseCfiStateJson(v);\n this.baselineRevision = this.state.revision ?? 0;\n }\n\n /**\n * Stack identifier this manager is bound to (the `cfi_state:{name}` row\n * key suffix). Exposed so `fetchStackImports` and diagnostics can show\n * the operator which row this manager owns.\n */\n getStackName(): string {\n return this.stackName;\n }\n\n /**\n * Allocate empty in-memory state without touching D1. Use for read-only\n * \"what-would-state-look-like\" snapshots (e.g. drift-aware plan refresh)\n * where we want to drive the module `sync` hooks against a fresh slate\n * and then discard the result. {@link persist} is unsafe afterwards\n * because there is no D1 baseline to compare against.\n */\n hydrateInMemory(): void {\n if (this.state) return;\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n }\n\n /** Clear cached state so the next {@link hydrate} reloads from D1. */\n reset(): void {\n this.state = null;\n this.tamerStateDbUuid = null;\n this.dirty = false;\n this.baselineRevision = 0;\n }\n\n load(): CfiState {\n if (!this.state) {\n throw new Error(\"StateManager: call await hydrate(api) before load()\");\n }\n return this.state;\n }\n\n get(derivedName: string): StateEntry | undefined {\n const s = this.load();\n return s.resources[derivedName];\n }\n\n set(derivedName: string, entry: StateEntry): void {\n const s = this.load();\n s.resources[derivedName] = entry;\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n delete(derivedName: string): void {\n const s = this.load();\n delete s.resources[derivedName];\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n getAll(): Record<string, StateEntry> {\n return this.load().resources;\n }\n\n getTenant(product: string, workspace: string): TenantStateEntry | undefined {\n const s = this.load();\n return s.tenants?.[tenantStateKey(product, workspace)];\n }\n\n setTenant(entry: TenantStateEntry): void {\n const s = this.load();\n if (!s.tenants) s.tenants = {};\n s.tenants[tenantStateKey(entry.product, entry.workspace)] = entry;\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n deleteTenant(product: string, workspace: string): void {\n const s = this.load();\n if (!s.tenants) return;\n delete s.tenants[tenantStateKey(product, workspace)];\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n listTenants(): TenantStateEntry[] {\n return Object.values(this.load().tenants ?? {});\n }\n\n /** CloudFormation-style stack metadata (name, owner). Returns a copy. */\n getStackMeta(): CfiStackMeta | undefined {\n const s = this.load().stack;\n return s ? { ...s } : undefined;\n }\n\n /**\n * Set or merge stack metadata. Pass `undefined` fields to clear them; only\n * provided keys are written, so callers can update one field at a time.\n */\n setStackMeta(meta: CfiStackMeta): void {\n const s = this.load();\n s.stack = { ...(s.stack ?? {}), ...meta };\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n /**\n * Resolved + persisted `outputs:` for this stack. Returns `{}` when none\n * have been recorded yet (e.g. before the first successful `apply`). The\n * returned object is a shallow copy — mutate via {@link replaceStackOutputs}.\n */\n getStackOutputs(): Record<string, CfiStackOutputValue> {\n return { ...(this.load().stackOutputs ?? {}) };\n }\n\n /**\n * Replace this stack's `stackOutputs` map wholesale. Pass `{}` to clear\n * (e.g. when `outputs` is removed from `tamer.config.ts`); pass a fresh\n * map keyed by output name to commit a successful apply's resolved values.\n * No-op when the new map is structurally identical to the existing one\n * (avoids gratuitous `revision` bumps on no-op applies).\n */\n replaceStackOutputs(next: Record<string, CfiStackOutputValue>): void {\n const s = this.load();\n const prev = s.stackOutputs ?? {};\n if (stackOutputsEqual(prev, next)) return;\n if (Object.keys(next).length === 0) {\n delete s.stackOutputs;\n } else {\n s.stackOutputs = { ...next };\n }\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n getLastOperation(): CfiOperationRecord | undefined {\n return this.load().lastOperation;\n }\n\n /** Completed operations (`succeeded` / `failed` only), newest first. */\n getOperationHistory(): CfiOperationRecord[] {\n const h = this.load().operationHistory;\n return h ? h.map((e) => ({ ...e })) : [];\n }\n\n /**\n * Begin recording a CloudFormation-style operation marker. Sets `status:\n * \"in_progress\"` and `startedAt`; pair with {@link finishOperation} on\n * success or {@link failOperation} on error. Persist between calls if the\n * operation may take a long time and you want concurrent operators to see\n * the in-progress marker.\n */\n beginOperation(command: CfiOperationName, detail?: string): void {\n const s = this.load();\n s.lastOperation = {\n command,\n status: \"in_progress\",\n startedAt: new Date().toISOString(),\n detail,\n };\n s.syncedAt = s.lastOperation.startedAt;\n this.dirty = true;\n }\n\n finishOperation(detail?: string): void {\n const s = this.load();\n if (!s.lastOperation) return;\n s.lastOperation.status = \"succeeded\";\n s.lastOperation.completedAt = new Date().toISOString();\n if (detail !== undefined) s.lastOperation.detail = detail;\n s.syncedAt = s.lastOperation.completedAt;\n this.appendTerminalOperationToHistory(s.lastOperation);\n this.dirty = true;\n }\n\n failOperation(errorMessage: string): void {\n const s = this.load();\n if (!s.lastOperation) return;\n s.lastOperation.status = \"failed\";\n s.lastOperation.completedAt = new Date().toISOString();\n s.lastOperation.errorMessage = errorMessage;\n s.syncedAt = s.lastOperation.completedAt;\n this.appendTerminalOperationToHistory(s.lastOperation);\n this.dirty = true;\n }\n\n private appendTerminalOperationToHistory(op: CfiOperationRecord): void {\n if (op.status !== \"succeeded\" && op.status !== \"failed\") return;\n const s = this.load();\n const entry: CfiOperationRecord = {\n command: op.command,\n status: op.status,\n startedAt: op.startedAt,\n completedAt: op.completedAt,\n errorMessage: op.errorMessage,\n detail: op.detail,\n };\n const prev = s.operationHistory ?? [];\n s.operationHistory = [entry, ...prev].slice(0, OPERATION_HISTORY_CAP);\n }\n\n /**\n * Persist to D1 (no-op for local). Uses optimistic concurrency: re-reads\n * `revision` before write; throws {@link StateConflictError} if another\n * writer advanced the row since {@link hydrate}.\n */\n async persist(api: CFApiClient): Promise<void> {\n if (this.env === \"local\") {\n this.dirty = false;\n return;\n }\n if (!this.dirty || !this.state || !this.tamerStateDbUuid) return;\n\n const rowKey = stateRowKey(this.env, this.stackName);\n const { rows } = await api.d1Query(\n this.tamerStateDbUuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n let remoteRev = 0;\n if (rows.length > 0) {\n const v = rows[0]![\"v\"];\n if (typeof v === \"string\") {\n remoteRev = parseCfiStateJson(v).revision ?? 0;\n }\n }\n if (remoteRev !== this.baselineRevision) {\n throw new StateConflictError(\n `Tamer state conflict (stack=${this.stackName}): remote revision ${remoteRev} !== expected ${this.baselineRevision}. Re-run after refresh.`,\n );\n }\n\n this.state.revision = remoteRev + 1;\n this.state.syncedAt = new Date().toISOString();\n const json = JSON.stringify(this.state);\n await api.d1Query(\n this.tamerStateDbUuid,\n `INSERT INTO tamer_kv (k, v) VALUES (?, ?)\n ON CONFLICT(k) DO UPDATE SET v = excluded.v`,\n [rowKey, json],\n );\n this.baselineRevision = this.state.revision;\n this.dirty = false;\n }\n\n /** Mark clean without writing (e.g. before deleting the state database). */\n clearDirty(): void {\n this.dirty = false;\n }\n}\n\nfunction stackOutputsEqual(\n a: Record<string, CfiStackOutputValue>,\n b: Record<string, CfiStackOutputValue>,\n): boolean {\n const ak = Object.keys(a).sort();\n const bk = Object.keys(b).sort();\n if (ak.length !== bk.length) return false;\n for (let i = 0; i < ak.length; i++) {\n if (ak[i] !== bk[i]) return false;\n const k = ak[i]!;\n const av = a[k]!;\n const bv = b[k]!;\n // `resolvedAt` is intentionally excluded — same value+source = no churn.\n if (av.value !== bv.value || av.source !== bv.source) return false;\n }\n return true;\n}\n","/**\n * Cross-stack import pre-fetch.\n *\n * `${tamer:import:<stack>.<output>}` is Tamer's CloudFormation\n * `Fn::ImportValue` analogue — a stack reads outputs published by a sibling\n * stack that lives in the same `tamer-state-{env}` D1 (see\n * `cfi_state:{stack}` row keying). This module:\n *\n * 1. Statically scans the current project config for every\n * `${tamer:import:<stack>.<output>}` reference (vars, tamerRoutes, worker\n * `services[].service`, `dispatch_namespaces[].namespace`, `outputs`, …).\n * 2. Pre-fetches each referenced sibling stack's persisted outputs at\n * command start so {@link ReferenceContext.imports} is fully populated\n * before any `resolveReferencesInString` call fires. Resolution is\n * then a pure map lookup (no D1 round-trips mid-resolution → no\n * partial-failure modes).\n *\n * Pre-fetch failures are intentionally surfaced eagerly. If an imported\n * stack has no state row at all (never `apply`d) we record an empty\n * outputs map; the `lookupImport` step then throws with a clear \"run\n * apply on <stack>\" message rather than a generic \"no such reference\".\n */\nimport type { CFApiClient } from \"../api/CFApiClient.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport type {\n CfiConfig,\n TamerResolvableString,\n WranglerR2BucketResolvable,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport { StateManager } from \"../state/StateManager.js\";\nimport { stackNameForConfig } from \"../state/stackName.js\";\n\nconst IMPORT_RE = /\\$\\{tamer:import:([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}/g;\n\n/** A single `${tamer:import:<stack>.<output>}` site collected by scan. */\nexport interface DiscoveredImportRef {\n stack: string;\n output: string;\n /** Free-form pointer for diagnostics (e.g. `worker[api].vars.DB_ID`). */\n fieldPath: string;\n}\n\n/**\n * Walk the merged `CfiConfig` and collect every `${tamer:import:…}` ref\n * site along with where it was found. Used both to drive the pre-fetch\n * (which sibling stacks to load) and by `tamer status` to render an\n * \"inbound imports\" panel even before any `apply` has run.\n *\n * Self-imports (current stack importing from its own name) are filtered\n * out — they are almost always a config typo and would otherwise\n * silently resolve via the same row this command is about to write.\n */\nexport function scanConfigForImports(\n config: CfiConfig,\n): DiscoveredImportRef[] {\n const selfStack = stackNameForConfig(config);\n const refs: DiscoveredImportRef[] = [];\n const seen = new Set<string>();\n const push = (raw: string | undefined, fieldPath: string) => {\n if (!raw) return;\n IMPORT_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = IMPORT_RE.exec(raw)) !== null) {\n const stack = m[1]!;\n const output = m[2]!;\n if (stack === selfStack) continue;\n const key = `${fieldPath}::${stack}.${output}`;\n if (seen.has(key)) continue;\n seen.add(key);\n refs.push({ stack, output, fieldPath });\n }\n };\n\n const walkVars = (\n vars: Record<string, TamerResolvableString> | undefined,\n pathPrefix: string,\n ) => {\n if (!vars) return;\n for (const [k, v] of Object.entries(vars)) {\n push(materializeTamerResolvable(v), `${pathPrefix}.${k}`);\n }\n };\n\n const walkR2BucketNames = (\n w: { r2_buckets?: WranglerR2BucketResolvable[] | undefined },\n pathPrefix: string,\n ) => {\n if (!w.r2_buckets) return;\n w.r2_buckets.forEach((b, i) => {\n if (b.bucket_name === undefined) return;\n push(\n materializeTamerResolvable(b.bucket_name),\n `${pathPrefix}.r2_buckets[${i}].bucket_name`,\n );\n });\n };\n\n const walkD1DatabaseNames = (\n w: { resources?: { d1?: Array<{ databaseName?: TamerResolvableString }> } },\n pathPrefix: string,\n ) => {\n const d1 = w.resources?.d1;\n if (!d1) return;\n d1.forEach((d, i) => {\n if (d.databaseName === undefined) return;\n push(\n materializeTamerResolvable(d.databaseName),\n `${pathPrefix}.resources.d1[${i}].databaseName`,\n );\n });\n };\n\n /** Service bindings / WfP namespace strings may carry `${tamer:import:…}`. */\n const walkBindingsWithRefs = (\n w: {\n services?: Array<{ service?: TamerResolvableString }>;\n dispatch_namespaces?: Array<{ namespace?: TamerResolvableString }>;\n },\n pathPrefix: string,\n ) => {\n w.services?.forEach((s, i) => {\n if (s.service === undefined) return;\n push(\n materializeTamerResolvable(s.service),\n `${pathPrefix}.services[${i}].service`,\n );\n });\n w.dispatch_namespaces?.forEach((d, i) => {\n if (d.namespace === undefined) return;\n push(\n materializeTamerResolvable(d.namespace),\n `${pathPrefix}.dispatch_namespaces[${i}].namespace`,\n );\n });\n };\n\n if (config.worker) {\n walkVars(config.worker.vars, \"worker.vars\");\n walkR2BucketNames(config.worker, \"worker\");\n walkD1DatabaseNames(config.worker, \"worker\");\n walkBindingsWithRefs(config.worker, \"worker\");\n if (config.worker.tamerRoutes) {\n config.worker.tamerRoutes.forEach((r, i) => {\n push(r.host, `worker.tamerRoutes[${i}].host`);\n push(r.zone, `worker.tamerRoutes[${i}].zone`);\n });\n }\n }\n if (config.workers) {\n for (const [key, w] of Object.entries(config.workers)) {\n walkVars(w.vars, `worker[${key}].vars`);\n walkR2BucketNames(w, `worker[${key}]`);\n walkD1DatabaseNames(w, `worker[${key}]`);\n walkBindingsWithRefs(w, `worker[${key}]`);\n if (w.tamerRoutes) {\n w.tamerRoutes.forEach((r, i) => {\n push(r.host, `worker[${key}].tamerRoutes[${i}].host`);\n push(r.zone, `worker[${key}].tamerRoutes[${i}].zone`);\n });\n }\n }\n }\n if (config.outputs) {\n for (const [name, source] of Object.entries(config.outputs)) {\n push(materializeTamerResolvable(source), `outputs.${name}`);\n }\n }\n // Dispatch namespace declarations are static identifiers today — no\n // string-interpolated fields that could carry imports — but if that\n // changes, extend here. Keeping the call site documented:\n void getDispatchNamespaces;\n\n return refs;\n}\n\n/** Distinct sibling stack names referenced anywhere in `config`. */\nexport function importedStackNames(config: CfiConfig): string[] {\n const refs = scanConfigForImports(config);\n return [...new Set(refs.map((r) => r.stack))].sort();\n}\n\n/**\n * Hydrate every imported sibling stack's persisted outputs and return\n * them shaped for {@link ReferenceContext.imports}.\n *\n * - `local` env: returns `{}` immediately. Local mode never persists\n * state, so cross-stack imports are inherently unresolvable. Callers\n * running in tolerant mode (`plan`, `status`) will see the placeholder\n * verbatim; strict callers (`apply`, `deploy`) will fail at resolution\n * with a clear \"no imported stack\" message.\n * - Missing sibling state row: recorded as an empty outputs map, so\n * `lookupImport` can produce a \"no published outputs\" diagnostic\n * (vs. the generic \"stack not pre-fetched\" error).\n *\n * The {@link CFApiClient} is shared with the caller for socket reuse.\n */\nexport async function fetchStackImports(\n api: CFApiClient,\n config: CfiConfig,\n env: string,\n): Promise<Record<string, Record<string, string>>> {\n const stacks = importedStackNames(config);\n if (stacks.length === 0 || env === \"local\") return {};\n\n const out: Record<string, Record<string, string>> = {};\n for (const stack of stacks) {\n // Each sibling gets its own StateManager so the returned outputs are\n // fully decoupled from the current stack's mutable state. We never\n // call `persist` on these — read-only.\n const sibling = new StateManager(config.tenant.id, env, stack);\n try {\n await sibling.hydrate(api);\n } catch (err) {\n // A missing tamer-state-{env} D1 surfaces here as \"Tamer state\n // database not found\"; that's a hard error common to every stack\n // in the env, so re-throw rather than silently degrade.\n throw new Error(\n `Failed to hydrate imported stack \"${stack}\" from env \"${env}\": ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n const persisted = sibling.getStackOutputs();\n const flat: Record<string, string> = {};\n for (const [name, v] of Object.entries(persisted)) {\n flat[name] = v.value;\n }\n out[stack] = flat;\n }\n return out;\n}\n","import type { WorkerConfig } from \"../../types.js\";\n\n/** Declared secret names for a worker; empty when `secrets` is absent. */\nexport function requiredSecretsForWorker(workerConfig: WorkerConfig): string[] {\n return workerConfig.secrets?.required ?? [];\n}\n","import type { NamingConventions, TenantMeta } from \"../../types.js\";\n\nfunction reLiteral(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport class NamingEngine {\n constructor(\n private tenant: TenantMeta,\n private conventions?: NamingConventions\n ) {}\n\n /** Tenant id for per-resource {@link CloudflareNameFn} overrides. */\n get tenantId(): string {\n return this.tenant.id;\n }\n\n d1SingleName(logicalName: string, env: string): string {\n if (this.conventions?.d1Single) {\n return this.conventions.d1Single(logicalName, this.tenant.id, env);\n }\n return `db_${logicalName}_t_${this.tenant.id}_${env}`;\n }\n\n d1ShardName(\n logicalName: string,\n shardDate: string,\n env: string\n ): string {\n if (this.conventions?.d1Shard) {\n return this.conventions.d1Shard(\n logicalName,\n shardDate,\n this.tenant.id,\n env\n );\n }\n const dateNoDashes = shardDate.replace(/-/g, \"\");\n if (logicalName === \"default\" || logicalName === \"\") {\n return `db_${dateNoDashes}_t_${this.tenant.id}_${env}`;\n }\n return `db_${logicalName}_${dateNoDashes}_t_${this.tenant.id}_${env}`;\n }\n\n d1SingleBindingKey(logicalName: string): string {\n return `DB_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n d1ShardBindingKey(logicalName: string, shardDate: string): string {\n const dateNoDashes = shardDate.replace(/-/g, \"\");\n return `DB_${logicalName.toUpperCase().replace(/-/g, \"_\")}_${dateNoDashes}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n r2BucketName(logicalName: string, env: string): string {\n if (this.conventions?.r2Bucket) {\n const dateNoDashes = new Date().toISOString().slice(0, 10).replace(/-/g, \"\");\n return this.conventions.r2Bucket(\n logicalName,\n dateNoDashes,\n this.tenant.id,\n env,\n );\n }\n return `r2-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n /**\n * Wrangler `r2_buckets[].binding`: logical + tenant only (same idea as {@link kvBindingKey}).\n * Stable across envs; default {@link r2BucketName} is `r2-{logical}-t-{tenant}-{env}`.\n */\n r2BindingKey(logicalName: string): string {\n return `R2_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n kvNamespaceName(logicalName: string, env: string): string {\n return `kv_${logicalName}_t_${this.tenant.id}_${env}`;\n }\n\n kvBindingKey(logicalName: string): string {\n return `KV_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n queueName(logicalName: string, env: string): string {\n return `q-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n queueBindingKey(logicalName: string): string {\n return `Q_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n hyperdriveName(logicalName: string, env: string): string {\n return `hd-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n hyperdriveBindingKey(logicalName: string): string {\n return `HD_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n vectorizeName(logicalName: string, env: string): string {\n return `vec-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n vectorizeBindingKey(logicalName: string): string {\n return `VEC_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n /**\n * AI Gateway slug (== Cloudflare gateway id). Per the Cloudflare API,\n * gateway ids are case-sensitive lowercase ascii with `-`/`_`. Format:\n * `aigw-{logical}-t-{tenantId}-{env}`.\n */\n aiGatewayId(logicalName: string, env: string): string {\n return `aigw-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Stable cross-reference binding key for AI Gateway. AI Gateway has no\n * Wrangler binding kind today, so this is only consumed by\n * `${tamer:ai_gateway:<logical>.binding}` interpolations.\n */\n aiGatewayBindingKey(logicalName: string): string {\n return `AI_GW_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n /**\n * Cloudflare-side pipeline name. Pipelines V1 names must be lowercase\n * alphanumerics + hyphens (no underscores), so we mirror the R2 scheme.\n * Pattern: `pipe-{logical}-t-{tenantId}-{env}`.\n */\n pipelineName(logicalName: string, env: string): string {\n return `pipe-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Wrangler binding key emitted in `pipelines[]`. Uppercased logical with\n * the tenant id appended so two tenants can share a worker namespace\n * without colliding bindings.\n */\n pipelineBindingKey(logicalName: string): string {\n return `PIPE_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n pipelineMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.pipelineName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n /**\n * Cloudflare-side workflow name. Workflow names accept lowercase\n * alphanumerics + hyphens; we mirror the pipelines/AI-Gateway hyphen\n * scheme. Pattern: `wf-{logical}-t-{tenantId}-{env}`.\n */\n workflowName(logicalName: string, env: string): string {\n if (this.conventions?.workflow) {\n return this.conventions.workflow(logicalName, this.tenant.id, env);\n }\n return `wf-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Wrangler binding key emitted in `workflows[]`. Uppercased logical with\n * the tenant id appended so two tenants sharing a script can't collide.\n */\n workflowBindingKey(logicalName: string): string {\n return `WF_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n workflowMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.workflowName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n /**\n * Cloudflare Secrets Store name. Account-scoped — the API allows free-form\n * names (the dashboard examples use both `service_x_keys` and dashed\n * variants), so we mirror our hyphen convention for consistency with\n * pipelines / workflows / AI Gateway. Pattern:\n * `sec-{logical}-t-{tenantId}-{env}`.\n */\n secretsStoreName(logicalName: string, env: string): string {\n return `sec-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Stable cross-reference key for the store. Secrets Store has no Wrangler\n * binding kind directly — `secrets_store_secrets[]` references the\n * resolved `store_id`, not the store name — so this only powers\n * `${tamer:secret_store:<n>.binding}` interpolations.\n */\n secretsStoreBindingKey(logicalName: string): string {\n return `SEC_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n secretsStoreMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.secretsStoreName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n workerName(workerKey: string, env: string | \"local\"): string {\n if (this.conventions?.workerName) {\n return this.conventions.workerName(\n this.tenant.slug,\n workerKey,\n env,\n this.tenant.id\n );\n }\n if (env === \"local\") {\n return `${this.tenant.slug}-${workerKey}-${this.tenant.id}`;\n }\n return `${this.tenant.slug}-${workerKey}-${env}-${this.tenant.id}`;\n }\n\n /** Whether stack {@link NamingConventions.d1Shard} is configured. */\n hasD1ShardConvention(): boolean {\n return Boolean(this.conventions?.d1Shard);\n }\n\n d1MatchPattern(logicalName: string, env: string): (name: string) => boolean {\n if (this.conventions?.d1Shard) {\n return (name: string) => {\n const shardDate = this.extractD1ShardDate(name);\n if (!shardDate) return false;\n return this.d1ShardName(logicalName, shardDate, env) === name;\n };\n }\n const suffix = `_t_${this.tenant.id}_${env}`;\n if (logicalName === \"default\" || logicalName === \"\") {\n return (name: string) =>\n /^db_\\d{8}_t_/.test(name) && name.endsWith(suffix);\n }\n const prefix = `db_${logicalName}_`;\n return (name: string) =>\n name.startsWith(prefix) && name.endsWith(suffix);\n }\n\n /**\n * Default: exact {@link r2BucketName}, or legacy dated buckets\n * `r2-{logical}-{YYYYMMDD}-t-{tenant}-{env}` from older Tamer versions.\n * Custom {@link NamingConventions.r2Bucket}: exact name only (uses today's date\n * when calling the hook, same as apply).\n */\n r2MatchPattern(logicalName: string, env: string): (name: string) => boolean {\n if (this.conventions?.r2Bucket) {\n const expected = this.r2BucketName(logicalName, env);\n return (name: string) => name === expected;\n }\n const exactNew = `r2-${logicalName}-t-${this.tenant.id}-${env}`;\n const legacyDated = new RegExp(\n `^r2-${reLiteral(logicalName)}-\\\\d{8}-t-${reLiteral(this.tenant.id)}-${reLiteral(env)}$`,\n );\n return (name: string) => name === exactNew || legacyDated.test(name);\n }\n\n extractD1ShardDate(name: string): string | null {\n const compact = name.match(/_(\\d{8})_t_/);\n if (compact) {\n const d = compact[1];\n return `${d.slice(0, 4)}-${d.slice(4, 6)}-${d.slice(6, 8)}`;\n }\n const underscored = name.match(/_(\\d{4})_(\\d{2})_(\\d{2})_t_/);\n if (underscored) {\n return `${underscored[1]}-${underscored[2]}-${underscored[3]}`;\n }\n return null;\n }\n\n extractR2Date(name: string): string | null {\n const match = name.match(/r2-\\w+-(\\d{8})-t-/);\n if (match) {\n const d = match[1];\n return `${d.slice(0, 4)}-${d.slice(4, 6)}-${d.slice(6, 8)}`;\n }\n return null;\n }\n}\n","import type { CfiConfig } from \"../../types.js\";\nimport { NamingEngine } from \"../naming/NamingEngine.js\";\n\nexport function namingFromConfig(config: CfiConfig): NamingEngine {\n const conventions =\n \"naming\" in config && config.naming ? config.naming : undefined;\n return new NamingEngine(config.tenant, conventions);\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\nimport type { EncryptedSecret, SecretFingerprint } from \"./types.js\";\nimport {\n findTamerSecretsDatabaseUuid,\n SECRET_HISTORY_CAP,\n secretRowKey,\n} from \"./secretsDb.js\";\n\nexport interface VaultSecretRecord {\n name: string;\n ciphertext: Uint8Array;\n iv: Uint8Array;\n wrappedDek: Uint8Array;\n dekIv: Uint8Array;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface VaultSecretListItem {\n name: string;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface SecretHistoryEntry {\n name: string;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\n/**\n * Encrypted secrets vault backed by account-scoped `tamer-secrets` D1.\n * Each env's secrets are isolated by row key: `{env}:{secretName}`.\n * Stores ciphertext only — never plaintext.\n */\nexport class SecretsVault {\n private databaseId: string | undefined;\n\n constructor(\n private readonly api: CFApiClient,\n private readonly env: string,\n databaseId?: string,\n ) {\n this.databaseId = databaseId;\n }\n\n /** Convert a logical secret name to its D1 row key: `{env}:{name}`. */\n private key(name: string): string {\n return secretRowKey(this.env, name);\n }\n\n /** Reverse: strip the `{env}:` prefix from a D1 row key. */\n private unkey(rowKey: string): string {\n const prefix = `${this.env}:`;\n return rowKey.startsWith(prefix) ? rowKey.slice(prefix.length) : rowKey;\n }\n\n private async dbId(): Promise<string> {\n if (this.databaseId) return this.databaseId;\n const uuid = await findTamerSecretsDatabaseUuid(this.api);\n if (!uuid) {\n throw new Error(\n `secrets vault not provisioned (expected D1 \"tamer-secrets\"); run tamer bootstrap`,\n );\n }\n this.databaseId = uuid;\n return uuid;\n }\n\n async upsert(\n name: string,\n encrypted: EncryptedSecret,\n valueHash: SecretFingerprint,\n options?: { updatedBy?: string },\n ): Promise<void> {\n const updatedAt = new Date().toISOString();\n const updatedBy = options?.updatedBy;\n const db = await this.dbId();\n const key = this.key(name);\n\n await this.api.d1Query(\n db,\n `INSERT INTO secrets (\n name, ciphertext, iv, wrapped_dek, dek_iv, value_hash, updated_at, updated_by\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(name) DO UPDATE SET\n ciphertext = excluded.ciphertext,\n iv = excluded.iv,\n wrapped_dek = excluded.wrapped_dek,\n dek_iv = excluded.dek_iv,\n value_hash = excluded.value_hash,\n updated_at = excluded.updated_at,\n updated_by = excluded.updated_by`,\n [\n key,\n blobParam(encrypted.ciphertext),\n blobParam(encrypted.iv),\n blobParam(encrypted.wrappedDek),\n blobParam(encrypted.dekIv),\n valueHash,\n updatedAt,\n updatedBy ?? null,\n ],\n );\n\n await this.api.d1Query(\n db,\n `INSERT INTO secret_history (name, value_hash, updated_at, updated_by)\n VALUES (?, ?, ?, ?)`,\n [key, valueHash, updatedAt, updatedBy ?? null],\n );\n\n await this.api.d1Query(\n db,\n `DELETE FROM secret_history\n WHERE name = ?\n AND rowid IN (\n SELECT rowid FROM (\n SELECT rowid FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC\n LIMIT -1 OFFSET ?\n )\n )`,\n [key, key, SECRET_HISTORY_CAP],\n );\n }\n\n async get(name: string): Promise<VaultSecretRecord | undefined> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, ciphertext, iv, wrapped_dek, dek_iv, value_hash, updated_at, updated_by\n FROM secrets WHERE name = ?`,\n [this.key(name)],\n );\n if (rows.length === 0) return undefined;\n return rowToVaultSecret(rows[0]!, this.env);\n }\n\n async list(): Promise<VaultSecretListItem[]> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, value_hash, updated_at, updated_by\n FROM secrets WHERE name LIKE ? ORDER BY name`,\n [`${this.env}:%`],\n );\n return rows.map((row) => ({\n name: this.unkey(String(row.name)),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n }));\n }\n\n async delete(name: string): Promise<boolean> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `DELETE FROM secrets WHERE name = ? RETURNING name`,\n [this.key(name)],\n );\n return rows.length > 0;\n }\n\n /** Append an audit row (e.g. after `secrets get`) without changing the secret. */\n async appendAudit(\n name: string,\n options?: { updatedBy?: string },\n ): Promise<void> {\n const record = await this.get(name);\n if (!record) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n const updatedAt = new Date().toISOString();\n const updatedBy = options?.updatedBy;\n const db = await this.dbId();\n const key = this.key(name);\n\n await this.api.d1Query(\n db,\n `INSERT INTO secret_history (name, value_hash, updated_at, updated_by)\n VALUES (?, ?, ?, ?)`,\n [key, record.valueHash, updatedAt, updatedBy ?? null],\n );\n\n await this.api.d1Query(\n db,\n `DELETE FROM secret_history\n WHERE name = ?\n AND rowid IN (\n SELECT rowid FROM (\n SELECT rowid FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC\n LIMIT -1 OFFSET ?\n )\n )`,\n [key, key, SECRET_HISTORY_CAP],\n );\n }\n\n async history(name: string): Promise<SecretHistoryEntry[]> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, value_hash, updated_at, updated_by\n FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC`,\n [this.key(name)],\n );\n return rows.map((row) => ({\n name: this.unkey(String(row.name)),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n }));\n }\n}\n\nfunction rowToVaultSecret(\n row: Record<string, unknown>,\n env: string,\n): VaultSecretRecord {\n const rawName = String(row.name);\n const prefix = `${env}:`;\n return {\n name: rawName.startsWith(prefix) ? rawName.slice(prefix.length) : rawName,\n ciphertext: blobFromRow(row.ciphertext),\n iv: blobFromRow(row.iv),\n wrappedDek: blobFromRow(row.wrapped_dek),\n dekIv: blobFromRow(row.dek_iv),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n };\n}\n\n/** D1 HTTP API accepts base64 for BLOB bind parameters. */\nfunction blobParam(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction blobFromRow(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) return value;\n if (typeof value === \"string\") {\n return new Uint8Array(Buffer.from(value, \"base64\"));\n }\n if (Array.isArray(value)) {\n return new Uint8Array(value as number[]);\n }\n throw new Error(\"secrets vault: invalid BLOB column value\");\n}\n","import { getWorkers, loadConfig } from \"../../../core/config/loader.js\";\nimport {\n mergeWorkerConfigForResourcePick,\n resolveDeployedWorkerName,\n} from \"../../../core/config/resolver.js\";\nimport { fetchStackImports } from \"../../../core/imports/fetchStackImports.js\";\nimport { requiredSecretsForWorker } from \"../../../core/secrets/declared.js\";\nimport { resolve, relative } from \"path\";\nimport { cloudflareAccountIdFromEnv } from \"../../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../../core/config/namingFromConfig.js\";\nimport { CFApiClient } from \"../../../core/api/CFApiClient.js\";\nimport { readMasterKeyFromEnv } from \"../../../core/secrets/masterKey.js\";\nimport { SecretsVault } from \"../../../core/secrets/SecretsVault.js\";\nimport type { SecretsVaultReader } from \"../../../core/secrets/reconcile.js\";\nimport { ensureTamerSecretsDatabase } from \"../../../core/secrets/secretsDb.js\";\nimport { StateManager } from \"../../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../../core/state/stackName.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../../types.js\";\nexport function resolveSecretsEnv(env?: string): string {\n const resolved = env ?? \"dev\";\n if (resolved === \"local\") {\n throw new Error(\n 'secrets commands require a remote env (e.g. --env dev); \"local\" has no vault',\n );\n }\n return resolved;\n}\n\n/** Operator identity for vault audit rows (`USER` / `USERNAME` / `cli`). */\nexport function cliUpdatedBy(): string {\n return process.env.USER ?? process.env.USERNAME ?? \"cli\";\n}\n\nexport function vaultReaderFromVault(vault: SecretsVault): SecretsVaultReader {\n return {\n async get(name: string) {\n const row = await vault.get(name);\n if (!row) return undefined;\n return { name: row.name, valueHash: row.valueHash };\n },\n };\n}\n\nexport interface SecretsCommandContext {\n env: string;\n config: CfiConfig;\n api: CFApiClient;\n vault: SecretsVault;\n state: StateManager;\n naming: ReturnType<typeof namingFromConfig>;\n accountId: string;\n masterKey: Uint8Array;\n}\n\nexport async function createSecretsContext(options: {\n env?: string;\n configPath?: string;\n}): Promise<SecretsCommandContext> {\n const env = resolveSecretsEnv(options.env);\n const config = await loadConfig(options.configPath, { env });\n const accountId = config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n\n const api = new CFApiClient(accountId);\n const secretsUuid = await ensureTamerSecretsDatabase(api);\n const vault = new SecretsVault(api, env, secretsUuid);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n const masterKey = readMasterKeyFromEnv(env);\n\n return {\n env,\n config,\n api,\n vault,\n state,\n naming: namingFromConfig(config),\n accountId,\n masterKey,\n };\n}\n\nexport interface SecretWorkerInput {\n workerKey: string;\n required: string[];\n workerSecretNames: string[];\n deployedName: string;\n}\n\nexport async function collectSecretWorkers(\n ctx: SecretsCommandContext,\n workerFilter?: string,\n): Promise<SecretWorkerInput[]> {\n const workers = await getWorkers(ctx.config);\n const imports = await fetchStackImports(ctx.api, ctx.config, ctx.env).catch(\n () => ({}),\n );\n const out: SecretWorkerInput[] = [];\n\n for (const [workerKey, workerConfig] of workers) {\n if (workerFilter && workerKey !== workerFilter) continue;\n\n const merged = mergeWorkerConfigForResourcePick(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.accountId,\n ctx.naming,\n ctx.state,\n { referencesMode: \"tolerant\", imports },\n );\n const required = requiredSecretsForWorker(merged);\n if (required.length === 0) continue;\n\n const deployedName = resolveDeployedWorkerName(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.naming,\n );\n\n let workerSecretNames: string[] = [];\n try {\n workerSecretNames = await ctx.api.workersSecretsList(deployedName);\n } catch {\n workerSecretNames = [];\n }\n\n out.push({ workerKey, required, workerSecretNames, deployedName });\n }\n\n return out;\n}\n\nexport function assertSecretName(name: string | undefined): string {\n const trimmed = name?.trim();\n if (!trimmed) {\n throw new Error(\"secret name is required\");\n }\n return trimmed;\n}\n\nexport interface WorkerSecretsLoadTarget {\n workerKey: string;\n workerDir: string;\n required: string[];\n}\n\n/** Resolve worker dir + declared secret names for `secrets load`. */\nexport async function resolveWorkerSecretsLoadTarget(\n ctx: SecretsCommandContext,\n workerKey: string,\n options?: { skipUndeclared?: boolean },\n): Promise<WorkerSecretsLoadTarget | null> {\n const baseDir = process.cwd();\n const workers = await getWorkers(ctx.config, baseDir);\n const hit = workers.find(([key]) => key === workerKey);\n if (!hit) {\n const available = workers.map(([key]) => key).sort().join(\", \");\n throw new Error(\n `secrets load: worker \"${workerKey}\" not found in config` +\n (available ? ` (available: ${available})` : \"\"),\n );\n }\n\n const [, workerConfig] = hit;\n const imports = await fetchStackImports(ctx.api, ctx.config, ctx.env).catch(\n () => ({}),\n );\n const merged = mergeWorkerConfigForResourcePick(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.accountId,\n ctx.naming,\n ctx.state,\n { referencesMode: \"tolerant\", imports },\n );\n const required = requiredSecretsForWorker(merged);\n if (required.length === 0) {\n if (options?.skipUndeclared) return null;\n throw new Error(\n `secrets load: worker \"${workerKey}\" has no secrets.required — declare names in config first`,\n );\n }\n\n const workerDir = workerConfig.path\n ? resolve(baseDir, workerConfig.path)\n : baseDir;\n\n return { workerKey, workerDir, required };\n}\n\n/** Path for logs — relative to cwd when possible. */\nexport function displayPathFromCwd(absOrRel: string): string {\n const rel = relative(process.cwd(), resolve(process.cwd(), absOrRel));\n return rel && !rel.startsWith(\"..\") ? rel.replace(/\\\\/g, \"/\") : absOrRel.replace(/\\\\/g, \"/\");\n}\n\n/** Vault + master key for deploy auto-push (remote envs only). */\nexport async function createDeploySecretsResources(\n api: CFApiClient,\n env: string,\n): Promise<{ vault: SecretsVault; masterKey: Uint8Array }> {\n const resolvedEnv = resolveSecretsEnv(env);\n const secretsUuid = await ensureTamerSecretsDatabase(api);\n const vault = new SecretsVault(api, resolvedEnv, secretsUuid);\n const masterKey = readMasterKeyFromEnv(resolvedEnv);\n return { vault, masterKey };\n}\n\nexport type WorkerConfigEntry = [string, WorkerConfig];\n","import { loadConfig } from \"../../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../../core/cloudflareEnv.js\";\nimport { CFApiClient } from \"../../../core/api/CFApiClient.js\";\nimport {\n ensureTamerSecretsDatabase,\n tamerSecretsDatabaseName,\n} from \"../../../core/secrets/secretsDb.js\";\nimport {\n generateMasterKey,\n masterKeyEnvVarName,\n} from \"../../../core/secrets/masterKey.js\";\nimport { resolveSecretsEnv } from \"./context.js\";\n\nexport async function runSecretsInit(options: {\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const env = resolveSecretsEnv(options.env);\n const config = await loadConfig(options.configPath, { env });\n const accountId = config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n\n const masterKey = generateMasterKey();\n const varName = masterKeyEnvVarName(env);\n\n const api = new CFApiClient(accountId);\n const uuid = await ensureTamerSecretsDatabase(api);\n\n console.log(`Secrets vault ready: D1 uuid=${uuid} name=${tamerSecretsDatabaseName()}`);\n console.log(\"\");\n console.log(`Generated master key for env \"${env}\" (store in two durable places — CI + password manager):`);\n console.log(\"\");\n console.log(`${varName}=${masterKey}`);\n console.log(\"\");\n console.log(\"This key is shown once. Tamer never persists it.\");\n}\n","import type { EncryptedSecret, MasterKey } from \"./types.js\";\n\nconst AES_GCM = \"AES-GCM\";\nconst AES_KEY_LENGTH = 256;\nconst IV_BYTE_LENGTH = 12;\n\ntype AesKeyUsage = \"encrypt\" | \"decrypt\" | \"wrapKey\" | \"unwrapKey\";\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength,\n ) as ArrayBuffer;\n}\n\n/** Thrown when decrypt or re-wrap fails (wrong key, tampered ciphertext, etc.). */\nexport class SecretsCryptoError extends Error {\n readonly code = \"SECRETS_CRYPTO_ERROR\" as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"SecretsCryptoError\";\n }\n}\n\n/** Envelope-encrypt a secret value under the master key. */\nexport async function encryptSecretValue(\n plaintext: string,\n masterKey: MasterKey,\n): Promise<EncryptedSecret> {\n const kek = await importAesKey(masterKey, [\"wrapKey\"]);\n const dek = await crypto.subtle.generateKey(\n { name: AES_GCM, length: AES_KEY_LENGTH },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const dekIv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const plaintextBytes = new TextEncoder().encode(plaintext);\n\n const ciphertextBuffer = await crypto.subtle.encrypt(\n { name: AES_GCM, iv },\n dek,\n plaintextBytes,\n );\n const wrappedDekBuffer = await crypto.subtle.wrapKey(\n \"raw\",\n dek,\n kek,\n { name: AES_GCM, iv: dekIv },\n );\n\n return {\n ciphertext: new Uint8Array(ciphertextBuffer),\n iv,\n wrappedDek: new Uint8Array(wrappedDekBuffer),\n dekIv,\n };\n}\n\n/** Decrypt an envelope-encrypted secret value. */\nexport async function decryptSecretValue(\n encrypted: EncryptedSecret,\n masterKey: MasterKey,\n): Promise<string> {\n try {\n const kek = await importAesKey(masterKey, [\"unwrapKey\"]);\n const dek = await crypto.subtle.unwrapKey(\n \"raw\",\n toArrayBuffer(encrypted.wrappedDek),\n kek,\n { name: AES_GCM, iv: toArrayBuffer(encrypted.dekIv) },\n { name: AES_GCM, length: AES_KEY_LENGTH },\n false,\n [\"decrypt\"],\n );\n const plaintextBuffer = await crypto.subtle.decrypt(\n { name: AES_GCM, iv: toArrayBuffer(encrypted.iv) },\n dek,\n toArrayBuffer(encrypted.ciphertext),\n );\n return new TextDecoder().decode(plaintextBuffer);\n } catch {\n throw new SecretsCryptoError(\n \"Failed to decrypt secret (wrong master key or corrupted ciphertext)\",\n );\n }\n}\n\n/**\n * Re-wrap the per-secret DEK under a new master key.\n * `ciphertext` and `iv` are unchanged — only `wrappedDek` / `dekIv` rotate.\n */\nexport async function rewrapEncryptedSecretDek(\n encrypted: EncryptedSecret,\n oldMasterKey: MasterKey,\n newMasterKey: MasterKey,\n): Promise<EncryptedSecret> {\n try {\n const oldKek = await importAesKey(oldMasterKey, [\"unwrapKey\"]);\n const newKek = await importAesKey(newMasterKey, [\"wrapKey\"]);\n\n const dek = await crypto.subtle.unwrapKey(\n \"raw\",\n toArrayBuffer(encrypted.wrappedDek),\n oldKek,\n { name: AES_GCM, iv: toArrayBuffer(encrypted.dekIv) },\n { name: AES_GCM, length: AES_KEY_LENGTH },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n\n const dekIv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const wrappedDekBuffer = await crypto.subtle.wrapKey(\n \"raw\",\n dek,\n newKek,\n { name: AES_GCM, iv: dekIv },\n );\n\n return {\n ciphertext: encrypted.ciphertext,\n iv: encrypted.iv,\n wrappedDek: new Uint8Array(wrappedDekBuffer),\n dekIv,\n };\n } catch {\n throw new SecretsCryptoError(\n \"Failed to re-wrap secret DEK (wrong old master key or corrupted wrapped DEK)\",\n );\n }\n}\n\nasync function importAesKey(\n rawKey: MasterKey,\n usages: AesKeyUsage[],\n): Promise<CryptoKey> {\n return crypto.subtle.importKey(\n \"raw\",\n toArrayBuffer(rawKey),\n { name: AES_GCM, length: AES_KEY_LENGTH },\n false,\n usages,\n );\n}\n","import type { SecretFingerprint } from \"./types.js\";\n\n/** SHA-256 fingerprint of secret plaintext (non-reversible). */\nexport async function secretValueFingerprint(\n plaintext: string,\n): Promise<SecretFingerprint> {\n const bytes = new TextEncoder().encode(plaintext);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", bytes);\n const hex = bytesToHex(new Uint8Array(hashBuffer));\n return `sha256:${hex}`;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return [...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n","/**\n * Read a secret value from stdin (pipe only — avoids shell history / argv).\n * Interactive prompt is intentionally not supported in v1.\n */\nexport async function readSecretValueFromStdin(): Promise<string> {\n if (process.stdin.isTTY) {\n throw new Error(\n \"secrets set: pipe the value on stdin (e.g. echo -n 'value' | tamer secrets set NAME --env dev); interactive entry is not supported yet\",\n );\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.from(chunk));\n }\n\n let value = Buffer.concat(chunks).toString(\"utf8\");\n if (value.endsWith(\"\\n\")) {\n value = value.slice(0, -1);\n }\n if (value.endsWith(\"\\r\")) {\n value = value.slice(0, -1);\n }\n if (!value) {\n throw new Error(\"secrets set: empty value on stdin\");\n }\n return value;\n}\n","import { encryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport { secretValueFingerprint } from \"../../../core/secrets/fingerprint.js\";\nimport {\n assertSecretName,\n cliUpdatedBy,\n createSecretsContext,\n} from \"./context.js\";\nimport { readSecretValueFromStdin } from \"./stdin.js\";\n\nexport async function runSecretsSet(options: {\n name?: string;\n env?: string;\n configPath?: string;\n /** Test hook — bypass stdin when provided. */\n readValue?: () => Promise<string>;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const plaintext = options.readValue\n ? await options.readValue()\n : await readSecretValueFromStdin();\n\n const encrypted = await encryptSecretValue(plaintext, ctx.masterKey);\n const valueHash = await secretValueFingerprint(plaintext);\n\n await ctx.vault.upsert(name, encrypted, valueHash, {\n updatedBy: cliUpdatedBy(),\n });\n\n console.log(`secrets: stored ${name} (${valueHash}) in ${ctx.env} vault`);\n}\n","import { readFileSync } from \"fs\";\nimport { resolve } from \"path\";\n\n/** Parse a dotenv-style file into key/value pairs (no variable expansion). */\nexport function parseDotenvContent(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const rawLine of content.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n const eq = line.indexOf(\"=\");\n if (eq <= 0) continue;\n\n const key = line.slice(0, eq).trim();\n let value = line.slice(eq + 1).trim();\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n if (key) {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nexport function readDotenvFile(filePath: string): Record<string, string> {\n const abs = resolve(process.cwd(), filePath);\n const content = readFileSync(abs, \"utf8\");\n return parseDotenvContent(content);\n}\n\n/** Default bulk-load file under a worker directory. */\nexport function defaultWorkerSecretsLoadFile(\n workerDir: string,\n env: string,\n): string {\n return `${workerDir.replace(/\\\\/g, \"/\")}/.dev.vars.${env}`;\n}\n\n/**\n * When loading for a worker, only `secrets.required` names are imported.\n * Returns keys to upsert; throws if the file contains undeclared names.\n */\nexport function filterSecretsLoadEntriesForWorker(\n fileEntries: Record<string, string>,\n required: readonly string[],\n): { entries: Record<string, string>; missing: string[] } {\n const requiredSet = new Set(required);\n const extras: string[] = [];\n const entries: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(fileEntries)) {\n if (requiredSet.has(name)) {\n entries[name] = value;\n } else {\n extras.push(name);\n }\n }\n\n if (extras.length > 0) {\n throw new Error(\n `secrets load: file contains key(s) not in worker secrets.required: ${extras.sort().join(\", \")}`,\n );\n }\n\n const missing = required.filter((name) => !(name in fileEntries)).sort();\n return { entries, missing };\n}\n\n/**\n * Reject plain `.dev.vars` — reserved for local `wrangler dev`, not vault seeding.\n */\nexport function assertRemoteSecretsLoadFile(filePath: string, env: string): void {\n const base = filePath.replace(/\\\\/g, \"/\").split(\"/\").pop() ?? filePath;\n if (base === \".dev.vars\") {\n throw new Error(\n \"`.dev.vars` is for local wrangler dev only. \" +\n `Seed the vault with \\`.dev.vars.${env}\\` or omit --file (default).`,\n );\n }\n}\n","import { encryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport { secretValueFingerprint } from \"../../../core/secrets/fingerprint.js\";\nimport { getWorkers } from \"../../../core/config/loader.js\";\nimport type { SecretsCommandContext } from \"./context.js\";\nimport {\n cliUpdatedBy,\n createSecretsContext,\n displayPathFromCwd,\n resolveSecretsEnv,\n resolveWorkerSecretsLoadTarget,\n type WorkerSecretsLoadTarget,\n} from \"./context.js\";\nimport {\n assertRemoteSecretsLoadFile,\n defaultWorkerSecretsLoadFile,\n filterSecretsLoadEntriesForWorker,\n readDotenvFile,\n} from \"./dotenv.js\";\n\nasync function loadSecretsForWorker(\n ctx: SecretsCommandContext,\n target: WorkerSecretsLoadTarget,\n fileOverride?: string,\n): Promise<number> {\n const file =\n fileOverride?.trim() ||\n defaultWorkerSecretsLoadFile(target.workerDir, ctx.env);\n assertRemoteSecretsLoadFile(file, ctx.env);\n\n const raw = readDotenvFile(file);\n const { entries: fileEntries, missing } = filterSecretsLoadEntriesForWorker(\n raw,\n target.required,\n );\n\n if (missing.length > 0) {\n console.log(\n `secrets load: worker \"${target.workerKey}\" — skipping ${missing.length} declared secret(s) not in file: ${missing.join(\", \")}`,\n );\n }\n\n const names = Object.keys(fileEntries).sort();\n if (names.length === 0) {\n console.log(\n `secrets load: worker \"${target.workerKey}\" — no entries to import from ${displayPathFromCwd(file)}`,\n );\n return 0;\n }\n\n let count = 0;\n for (const name of names) {\n const plaintext = fileEntries[name]!;\n const encrypted = await encryptSecretValue(plaintext, ctx.masterKey);\n const valueHash = await secretValueFingerprint(plaintext);\n await ctx.vault.upsert(name, encrypted, valueHash, {\n updatedBy: cliUpdatedBy(),\n });\n count += 1;\n }\n\n console.log(\n `secrets: loaded ${count} secret(s) into ${ctx.env} vault from ${displayPathFromCwd(file)} (worker ${target.workerKey})`,\n );\n return count;\n}\n\nasync function listWorkerSecretsLoadTargets(\n ctx: SecretsCommandContext,\n workerFilter?: string,\n): Promise<WorkerSecretsLoadTarget[]> {\n const workers = await getWorkers(ctx.config, process.cwd());\n const out: WorkerSecretsLoadTarget[] = [];\n\n for (const [workerKey] of workers) {\n if (workerFilter && workerKey !== workerFilter) continue;\n const target = await resolveWorkerSecretsLoadTarget(ctx, workerKey, {\n skipUndeclared: !workerFilter,\n });\n if (target) out.push(target);\n }\n\n return out;\n}\n\nexport async function runSecretsLoad(options: {\n /** Override path; requires `--worker`. */\n file?: string;\n env?: string;\n configPath?: string;\n /** When omitted, loads every worker that declares `secrets.required`. */\n worker?: string;\n}): Promise<void> {\n const env = resolveSecretsEnv(options.env);\n const workerKey = options.worker?.trim();\n const fileOverride = options.file?.trim();\n\n if (fileOverride && !workerKey) {\n throw new Error(\"secrets load: --file requires --worker <name>\");\n }\n\n const ctx = await createSecretsContext({\n env,\n configPath: options.configPath,\n });\n\n const targets = await listWorkerSecretsLoadTargets(ctx, workerKey);\n if (targets.length === 0) {\n const hint = workerKey\n ? `worker \"${workerKey}\" has no secrets.required`\n : \"no workers declare secrets.required\";\n console.log(`secrets load (${ctx.env}): ${hint}`);\n return;\n }\n\n let total = 0;\n for (const target of targets) {\n total += await loadSecretsForWorker(\n ctx,\n target,\n workerKey ? fileOverride : undefined,\n );\n }\n\n if (!workerKey && targets.length > 1) {\n console.log(\n `secrets load (${ctx.env}): ${total} secret(s) from ${targets.length} worker(s)`,\n );\n }\n}\n","import * as readline from \"readline/promises\";\nimport { decryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport {\n assertSecretName,\n cliUpdatedBy,\n createSecretsContext,\n} from \"./context.js\";\n\nexport type ConfirmFn = (prompt: string) => Promise<boolean>;\n\nasync function defaultConfirm(prompt: string): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new Error(\n \"secrets get: confirmation required; run in an interactive terminal or use a test hook\",\n );\n }\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n const answer = await rl.question(`${prompt} [y/N] `);\n const normalized = answer.trim().toLowerCase();\n return normalized === \"y\" || normalized === \"yes\";\n } finally {\n rl.close();\n }\n}\n\nexport async function runSecretsGet(options: {\n name?: string;\n env?: string;\n configPath?: string;\n confirm?: ConfirmFn;\n /** Skip confirmation (testing only). */\n yes?: boolean;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const record = await ctx.vault.get(name);\n if (!record) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n\n const confirm = options.confirm ?? defaultConfirm;\n if (!options.yes) {\n const ok = await confirm(\n `Reveal secret \"${name}\" from ${ctx.env} vault? This action is audit-logged.`,\n );\n if (!ok) {\n console.log(\"secrets get: cancelled\");\n return;\n }\n }\n\n await ctx.vault.appendAudit(name, { updatedBy: cliUpdatedBy() });\n\n const plaintext = await decryptSecretValue(\n {\n ciphertext: record.ciphertext,\n iv: record.iv,\n wrappedDek: record.wrappedDek,\n dekIv: record.dekIv,\n },\n ctx.masterKey,\n );\n\n process.stdout.write(plaintext);\n if (!plaintext.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n}\n","import { createSecretsContext } from \"./context.js\";\n\nexport async function runSecretsList(options: {\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const items = await ctx.vault.list();\n if (items.length === 0) {\n console.log(`secrets (${ctx.env}): (empty)`);\n return;\n }\n\n console.log(`secrets (${ctx.env}):`);\n for (const item of items) {\n const by = item.updatedBy ? ` by ${item.updatedBy}` : \"\";\n console.log(\n ` ${item.name} ${item.valueHash} last-set ${item.updatedAt}${by}`,\n );\n }\n}\n","import { assertSecretName, createSecretsContext } from \"./context.js\";\n\nexport async function runSecretsRm(options: {\n name?: string;\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const removed = await ctx.vault.delete(name);\n if (!removed) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n\n console.log(`secrets: removed ${name} from ${ctx.env} vault`);\n}\n","import type { StateManager } from \"../state/StateManager.js\";\nimport type { SecretStateEntry } from \"../../types.js\";\nimport type { ResourceDrift } from \"../drift/drift.types.js\";\nimport type { PlanItem } from \"../plan/plan.types.js\";\nimport { requiredSecretsForWorker } from \"./declared.js\";\n\n/** Vault metadata for reconciliation — ciphertext never leaves the vault layer. */\nexport interface VaultSecretMeta {\n name: string;\n valueHash: string;\n}\n\n/** Read-only vault view used by plan/drift (WS1 implements over D1). */\nexport interface SecretsVaultReader {\n get(name: string): Promise<VaultSecretMeta | undefined>;\n}\n\nexport type SecretReconcileStatus =\n | \"in_sync\"\n | \"declared_no_value\"\n | \"never_deployed\"\n | \"rotated_not_deployed\"\n | \"removed_from_vault\"\n | \"undeclared_on_worker\";\n\nexport interface SecretReconcileEntry {\n worker: string;\n name: string;\n status: SecretReconcileStatus;\n /** Vault `value_hash` when present. */\n vaultHash?: string;\n /** State `lastPushedHash` when present. */\n lastPushedHash?: string;\n /** Whether the secret binding exists on the worker script. */\n onWorker: boolean;\n}\n\n/** State row key: `secret:{worker}:{name}`. */\nexport function secretStateKey(worker: string, name: string): string {\n return `secret:${worker}:${name}`;\n}\n\n/** Plan/drift derived identifier: `{worker}:{name}`. */\nexport function secretDerivedName(worker: string, name: string): string {\n return `${worker}:${name}`;\n}\n\nexport interface ReconcileSecretsInput {\n workers: ReadonlyArray<{\n workerKey: string;\n required: readonly string[];\n workerSecretNames: readonly string[];\n }>;\n vault: SecretsVaultReader;\n state: StateManager;\n}\n\n/**\n * Compare declared secrets × vault fingerprints × state last-pushed hashes ×\n * worker presence. Returns one entry per relevant secret×worker pair.\n */\nexport async function reconcileSecrets(\n input: ReconcileSecretsInput,\n): Promise<SecretReconcileEntry[]> {\n const { workers, vault, state } = input;\n const allState = state.getAll();\n const secretStateByKey = new Map<string, SecretStateEntry>();\n for (const [key, entry] of Object.entries(allState)) {\n if (entry.type === \"secret\") {\n secretStateByKey.set(key, entry);\n }\n }\n\n const entries: SecretReconcileEntry[] = [];\n const seen = new Set<string>();\n\n function push(entry: SecretReconcileEntry): void {\n const key = secretStateKey(entry.worker, entry.name);\n if (seen.has(key)) return;\n seen.add(key);\n entries.push(entry);\n }\n\n for (const { workerKey, required, workerSecretNames } of workers) {\n const onWorkerSet = new Set(workerSecretNames);\n\n for (const name of required) {\n const vaultEntry = await vault.get(name);\n const stateEntry = secretStateByKey.get(secretStateKey(workerKey, name));\n push(\n classifyDeclaredSecret({\n worker: workerKey,\n name,\n vaultHash: vaultEntry?.valueHash,\n lastPushedHash: stateEntry?.lastPushedHash,\n onWorker: onWorkerSet.has(name),\n }),\n );\n }\n\n for (const name of workerSecretNames) {\n if (required.includes(name)) continue;\n const stateKey = secretStateKey(workerKey, name);\n if (seen.has(stateKey)) continue;\n const stateEntry = secretStateByKey.get(stateKey);\n const vaultEntry = await vault.get(name);\n if (stateEntry?.lastPushedHash && !vaultEntry) {\n push({\n worker: workerKey,\n name,\n status: \"removed_from_vault\",\n lastPushedHash: stateEntry.lastPushedHash,\n onWorker: true,\n });\n continue;\n }\n push({\n worker: workerKey,\n name,\n status: \"undeclared_on_worker\",\n onWorker: true,\n });\n }\n }\n\n for (const [key, stateEntry] of secretStateByKey) {\n if (seen.has(key)) continue;\n const vaultEntry = await vault.get(stateEntry.name);\n if (vaultEntry) continue;\n push({\n worker: stateEntry.worker,\n name: stateEntry.name,\n status: \"removed_from_vault\",\n lastPushedHash: stateEntry.lastPushedHash,\n onWorker: workers.some(\n (w) =>\n w.workerKey === stateEntry.worker &&\n w.workerSecretNames.includes(stateEntry.name),\n ),\n });\n }\n\n return entries;\n}\n\nfunction classifyDeclaredSecret(args: {\n worker: string;\n name: string;\n vaultHash?: string;\n lastPushedHash?: string;\n onWorker: boolean;\n}): SecretReconcileEntry {\n const { worker, name, vaultHash, lastPushedHash, onWorker } = args;\n\n if (!vaultHash) {\n return {\n worker,\n name,\n status: \"declared_no_value\",\n lastPushedHash,\n onWorker,\n };\n }\n\n if (!lastPushedHash) {\n return {\n worker,\n name,\n status: \"never_deployed\",\n vaultHash,\n onWorker,\n };\n }\n\n if (vaultHash !== lastPushedHash) {\n return {\n worker,\n name,\n status: \"rotated_not_deployed\",\n vaultHash,\n lastPushedHash,\n onWorker,\n };\n }\n\n if (!onWorker) {\n return {\n worker,\n name,\n status: \"never_deployed\",\n vaultHash,\n lastPushedHash,\n onWorker: false,\n };\n }\n\n return {\n worker,\n name,\n status: \"in_sync\",\n vaultHash,\n lastPushedHash,\n onWorker: true,\n };\n}\n\nexport function secretsDrift(entries: SecretReconcileEntry[]): ResourceDrift {\n const drift: ResourceDrift = {\n kind: \"secret\",\n missingFromCloudflare: [],\n unrecordedInState: [],\n undeployed: [],\n };\n\n for (const e of entries) {\n if (e.status === \"in_sync\") continue;\n\n const derivedName = secretDerivedName(e.worker, e.name);\n switch (e.status) {\n case \"declared_no_value\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"declared, no vault value\",\n });\n break;\n case \"never_deployed\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"never deployed\",\n });\n break;\n case \"rotated_not_deployed\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"rotated, not deployed\",\n });\n break;\n case \"removed_from_vault\":\n drift.missingFromCloudflare.push({\n logicalName: e.name,\n derivedName,\n detail: \"removed from vault\",\n });\n break;\n case \"undeclared_on_worker\":\n // Informational only — shown by `secrets verify`, not drift/plan failures.\n break;\n }\n }\n\n return drift;\n}\n\nexport function secretsPlanItems(entries: SecretReconcileEntry[]): PlanItem[] {\n const items: PlanItem[] = [];\n\n for (const e of entries) {\n const derivedName = secretDerivedName(e.worker, e.name);\n switch (e.status) {\n case \"never_deployed\":\n items.push({\n kind: \"secret\",\n action: \"create\",\n logicalName: e.name,\n derivedName,\n detail: \"never deployed\",\n });\n break;\n case \"rotated_not_deployed\":\n items.push({\n kind: \"secret\",\n action: \"update\",\n logicalName: e.name,\n derivedName,\n detail: \"rotated, not deployed\",\n changes: [\n {\n field: \"lastPushedHash\",\n from: e.lastPushedHash,\n to: e.vaultHash,\n kind: \"mutable\",\n },\n ],\n });\n break;\n default:\n break;\n }\n }\n\n return items;\n}\n\n/** Collect declared secret names per worker from resolved worker configs. */\nexport function requiredSecretsByWorker(\n workers: ReadonlyArray<{ workerKey: string; config: { secrets?: { required: string[] } } }>,\n): Array<{ workerKey: string; required: string[] }> {\n return workers.map(({ workerKey, config }) => ({\n workerKey,\n required: requiredSecretsForWorker(config),\n }));\n}\n\n/** In-memory vault stub for tests and pre-WS1 integration. */\nexport function vaultReaderFromMap(\n secrets: ReadonlyMap<string, VaultSecretMeta> | Record<string, VaultSecretMeta>,\n): SecretsVaultReader {\n const map =\n secrets instanceof Map\n ? secrets\n : new Map(Object.entries(secrets).map(([name, meta]) => [name, meta]));\n return {\n async get(name: string): Promise<VaultSecretMeta | undefined> {\n return map.get(name);\n },\n };\n}\n","import {\n reconcileSecrets,\n secretDerivedName,\n type SecretReconcileEntry,\n type SecretReconcileStatus,\n} from \"../../../core/secrets/reconcile.js\";\nimport {\n collectSecretWorkers,\n createSecretsContext,\n vaultReaderFromVault,\n} from \"./context.js\";\n\nconst STATUS_LABEL: Record<SecretReconcileStatus, string> = {\n in_sync: \"in sync\",\n declared_no_value: \"declared, no vault value\",\n never_deployed: \"never deployed\",\n rotated_not_deployed: \"rotated, not deployed\",\n removed_from_vault: \"removed from vault\",\n undeclared_on_worker: \"not in secrets.required\",\n};\n\nfunction isDeclaredIssue(status: SecretReconcileStatus): boolean {\n return status !== \"in_sync\" && status !== \"undeclared_on_worker\";\n}\n\nfunction sortEntries(\n entries: SecretReconcileEntry[],\n): SecretReconcileEntry[] {\n return [...entries].sort((a, b) =>\n secretDerivedName(a.worker, a.name).localeCompare(\n secretDerivedName(b.worker, b.name),\n ),\n );\n}\n\nfunction printEntry(entry: SecretReconcileEntry): void {\n const label = STATUS_LABEL[entry.status];\n const id = secretDerivedName(entry.worker, entry.name);\n const workerFlag = entry.onWorker ? \"on worker\" : \"not on worker\";\n console.log(` ${id} ${label} (${workerFlag})`);\n}\n\nexport async function runSecretsVerify(options: {\n env?: string;\n configPath?: string;\n}): Promise<number> {\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const workers = await collectSecretWorkers(ctx);\n if (workers.length === 0) {\n console.log(\n `secrets verify (${ctx.env}): no workers declare secrets.required`,\n );\n return 0;\n }\n\n const entries = await reconcileSecrets({\n workers: workers.map((w) => ({\n workerKey: w.workerKey,\n required: w.required,\n workerSecretNames: w.workerSecretNames,\n })),\n vault: vaultReaderFromVault(ctx.vault),\n state: ctx.state,\n });\n\n const declared = sortEntries(\n entries.filter((e) => e.status !== \"undeclared_on_worker\"),\n );\n const onWorkerOnly = sortEntries(\n entries.filter((e) => e.status === \"undeclared_on_worker\"),\n );\n\n console.log(`\\nSecrets verify — env ${ctx.env}\\n`);\n\n if (declared.length === 0 && onWorkerOnly.length === 0) {\n console.log(\" (no declared secrets)\\n\");\n return 0;\n }\n\n if (declared.length > 0) {\n console.log(\" Declared in config (secrets.required):\\n\");\n for (const entry of declared) {\n printEntry(entry);\n }\n console.log(\"\");\n }\n\n if (onWorkerOnly.length > 0) {\n console.log(\n \" On worker, not in secrets.required (outside Tamer management — add to config or remove from worker):\\n\",\n );\n for (const entry of onWorkerOnly) {\n printEntry(entry);\n }\n console.log(\"\");\n }\n\n const declaredIssues = declared.filter((e) => isDeclaredIssue(e.status)).length;\n\n if (declaredIssues === 0) {\n const suffix =\n onWorkerOnly.length > 0\n ? ` (${onWorkerOnly.length} on worker but not in config — informational only)`\n : \"\";\n console.log(`All declared secrets in sync.${suffix}\\n`);\n return 0;\n }\n\n console.log(`${declaredIssues} declared secret(s) need attention.\\n`);\n return 1;\n}\n","import { decryptSecretValue } from \"../../../core/secrets/crypto.js\";\n\nimport { secretStateKey } from \"../../../core/secrets/reconcile.js\";\n\nimport type { CFApiClient } from \"../../../core/api/CFApiClient.js\";\n\nimport type { SecretsVault } from \"../../../core/secrets/SecretsVault.js\";\n\nimport type { StateManager } from \"../../../core/state/StateManager.js\";\n\nimport type { SecretStateEntry } from \"../../../types.js\";\n\nimport {\n\n collectSecretWorkers,\n\n createSecretsContext,\n\n} from \"./context.js\";\n\n\n\nexport interface PushSecretsForDeployOptions {\n\n workerKey: string;\n\n deployedName: string;\n\n required: readonly string[];\n\n vault: SecretsVault;\n\n state: StateManager;\n\n api: CFApiClient;\n\n masterKey: Uint8Array;\n\n /** Log each pushed secret (CLI push). Default false for deploy. */\n\n logPushes?: boolean;\n\n}\n\n\n\nexport interface PushSecretsResult {\n\n pushed: number;\n\n skipped: number;\n\n}\n\n\n\n/**\n\n * Push stale/new required secrets for one worker via the CF API.\n\n * Skips secrets whose vault hash matches `lastPushedHash` in state.\n\n */\n\nexport async function pushSecretsForDeploy(\n\n options: PushSecretsForDeployOptions,\n\n): Promise<PushSecretsResult> {\n\n const {\n\n workerKey,\n\n deployedName,\n\n required,\n\n vault,\n\n state,\n\n api,\n\n masterKey,\n\n logPushes = false,\n\n } = options;\n\n\n\n if (required.length === 0) {\n\n return { pushed: 0, skipped: 0 };\n\n }\n\n\n\n let pushed = 0;\n\n let skipped = 0;\n\n\n\n for (const secretName of required) {\n\n const vaultRow = await vault.get(secretName);\n\n if (!vaultRow) {\n\n throw new Error(\n `secret \"${secretName}\" required by worker \"${workerKey}\" is missing from vault; run tamer secrets set ${secretName}`,\n );\n\n }\n\n\n\n const stateKey = secretStateKey(workerKey, secretName);\n\n const stateEntry = state.get(stateKey) as SecretStateEntry | undefined;\n\n const lastPushedHash =\n\n stateEntry?.type === \"secret\" ? stateEntry.lastPushedHash : undefined;\n\n\n\n if (lastPushedHash === vaultRow.valueHash) {\n\n skipped += 1;\n\n continue;\n\n }\n\n\n\n const plaintext = await decryptSecretValue(\n\n {\n\n ciphertext: vaultRow.ciphertext,\n\n iv: vaultRow.iv,\n\n wrappedDek: vaultRow.wrappedDek,\n\n dekIv: vaultRow.dekIv,\n\n },\n\n masterKey,\n\n );\n\n\n\n await api.workersSecretPut(deployedName, {\n\n name: secretName,\n\n text: plaintext,\n\n });\n\n\n\n const now = new Date().toISOString();\n\n state.set(stateKey, {\n\n type: \"secret\",\n\n worker: workerKey,\n\n name: secretName,\n\n lastPushedHash: vaultRow.valueHash,\n\n lastPushedAt: now,\n\n });\n\n\n\n pushed += 1;\n\n if (logPushes) {\n\n console.log(\n\n `secrets push: ${workerKey}:${secretName} → ${deployedName}`,\n\n );\n\n }\n\n }\n\n\n\n return { pushed, skipped };\n\n}\n\n\n\nexport async function runSecretsPush(options: {\n\n env?: string;\n\n configPath?: string;\n\n worker?: string;\n\n}): Promise<void> {\n\n const ctx = await createSecretsContext({\n\n env: options.env,\n\n configPath: options.configPath,\n\n });\n\n\n\n const workers = await collectSecretWorkers(ctx, options.worker);\n\n if (workers.length === 0) {\n\n const hint = options.worker\n\n ? `worker \"${options.worker}\" has no secrets.required`\n\n : \"no workers declare secrets.required\";\n\n console.log(`secrets push (${ctx.env}): ${hint}`);\n\n return;\n\n }\n\n\n\n let pushed = 0;\n\n let skipped = 0;\n\n\n\n for (const worker of workers) {\n\n const result = await pushSecretsForDeploy({\n\n workerKey: worker.workerKey,\n\n deployedName: worker.deployedName,\n\n required: worker.required,\n\n vault: ctx.vault,\n\n state: ctx.state,\n\n api: ctx.api,\n\n masterKey: ctx.masterKey,\n\n logPushes: true,\n\n });\n\n pushed += result.pushed;\n\n skipped += result.skipped;\n\n }\n\n\n\n if (pushed > 0) {\n\n await ctx.state.persist(ctx.api);\n\n }\n\n\n\n console.log(\n\n `secrets push (${ctx.env}): ${pushed} pushed, ${skipped} already current`,\n\n );\n\n}\n\n\n","import { runSecretsInit } from \"./init.js\";\nimport { runSecretsSet } from \"./set.js\";\nimport { runSecretsLoad } from \"./load.js\";\nimport { runSecretsGet } from \"./get.js\";\nimport { runSecretsList } from \"./list.js\";\nimport { runSecretsRm } from \"./rm.js\";\nimport { runSecretsVerify } from \"./verify.js\";\nimport { runSecretsPush } from \"./push.js\";\n\nexport const SECRETS_USAGE = `usage:\n tamer secrets init --env <env> [--config <path>]\n tamer secrets set <NAME> --env <env> [--config <path>] # value on stdin (pipe only)\n tamer secrets load --env <env> [--worker <name>] [--file <path>] [--config <path>]\n # each worker: {workerDir}/.dev.vars.{env}; all declared workers when --worker omitted\n tamer secrets get <NAME> --env <env> [--config <path>] # confirmation + audit log\n tamer secrets list --env <env> [--config <path>]\n tamer secrets rm <NAME> --env <env> [--config <path>]\n tamer secrets verify --env <env> [--config <path>]\n tamer secrets push --env <env> [--worker <name>] [--config <path>]`;\n\nexport interface ParsedSecretsCommand {\n subcommand?: string;\n name?: string;\n env?: string;\n configPath?: string;\n file?: string;\n worker?: string;\n yes?: boolean;\n}\n\nexport function parseSecretsArgs(argv: string[]): ParsedSecretsCommand {\n const positional: string[] = [];\n const opts: Record<string, string | boolean> = {};\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2).replace(/-/g, \"_\");\n const next = argv[i + 1];\n if (next && !next.startsWith(\"--\")) {\n opts[key] = next;\n i++;\n } else {\n opts[key] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n\n return {\n subcommand: positional[0],\n name: positional[1],\n env: opts.env as string | undefined,\n configPath: opts.config as string | undefined,\n file: opts.file as string | undefined,\n worker: opts.worker as string | undefined,\n yes: opts.yes === true,\n };\n}\n\nexport async function runSecrets(argv: string[]): Promise<number> {\n const parsed = parseSecretsArgs(argv);\n const { subcommand } = parsed;\n\n switch (subcommand) {\n case \"init\":\n await runSecretsInit({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"set\":\n await runSecretsSet({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"load\":\n await runSecretsLoad({\n file: parsed.file,\n env: parsed.env,\n configPath: parsed.configPath,\n worker: parsed.worker,\n });\n return 0;\n case \"get\":\n await runSecretsGet({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n yes: parsed.yes,\n });\n return 0;\n case \"list\":\n await runSecretsList({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"rm\":\n await runSecretsRm({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"verify\":\n return runSecretsVerify({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n case \"push\":\n await runSecretsPush({\n env: parsed.env,\n configPath: parsed.configPath,\n worker: parsed.worker,\n });\n return 0;\n default:\n console.error(SECRETS_USAGE);\n return 1;\n }\n}\n","import { z } from \"zod\";\n\nconst BaseArgsSchema = z.object({\n env: z.string().optional(),\n config: z.string().optional(),\n worker: z.string().optional(),\n});\n\nconst ApplyArgsSchema = BaseArgsSchema.extend({\n add_shard: z.string().optional(),\n plan: z.string().optional(),\n allow_stale: z.boolean().optional(),\n rollback_on_failure: z.boolean().optional(),\n /** `kind:logicalName` — apply only that resource (e.g. `d1:settings`). */\n target: z.string().optional(),\n});\n\nconst DestroyArgsSchema = BaseArgsSchema.extend({\n env: z.string().min(1, { error: \"env is required for destroy\" }),\n force: z.boolean().optional(),\n skip_workers: z.boolean().optional(),\n confirm_env: z.string().optional(),\n wipe_metadata: z.boolean().optional(),\n plan: z.string().optional(),\n allow_stale: z.boolean().optional(),\n});\n\nconst BootstrapArgsSchema = z.object({\n config: z.string().optional(),\n});\n\nconst DriftArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n});\n\nconst PlanArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n detailed_exitcode: z.boolean().optional(),\n out: z.string().optional(),\n destroy: z.boolean().optional(),\n target: z.string().optional(),\n});\n\nconst ImportArgsSchema = z.object({\n env: z.string().min(1, { error: \"env is required for import\" }),\n config: z.string().optional(),\n kind: z.enum(\n [\n \"d1\",\n \"r2\",\n \"kv\",\n \"queue\",\n \"hyperdrive\",\n \"vectorize\",\n \"ai_gateway\",\n \"pipeline\",\n \"workflow\",\n \"secret_store\",\n \"dns_record\",\n \"dispatch_namespace\",\n \"worker_route\",\n ],\n {\n error:\n \"kind must be one of d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | secret_store | dns_record | dispatch_namespace | worker_route\",\n },\n ),\n logical: z.string().min(1, { error: \"logical is required\" }),\n cf_id: z.string().optional(),\n shard_date: z.string().optional(),\n created_date: z.string().optional(),\n route_id: z.string().optional(),\n zone_name: z.string().optional(),\n});\n\nconst StatusArgsSchema = BaseArgsSchema.extend({\n tenant: z.string().optional(),\n});\n\nconst EventsArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n limit: z.coerce.number().int().min(1).max(100).optional(),\n});\n\nconst DoctorArgsSchema = z.object({\n json: z.boolean().optional(),\n});\n\nconst ProvisionTenantArgsSchema = z\n .object({\n env: z.string().min(1, { error: \"env is required\" }),\n product: z.string().min(1, { error: \"product is required\" }),\n workspace: z.string().min(1, { error: \"workspace is required\" }),\n main: z.string().optional(),\n artifact_key: z.string().optional(),\n module_name: z.string().optional(),\n config: z.string().optional(),\n compatibility_date: z.string().optional(),\n compat_flags: z.string().optional(),\n /**\n * Comma-separated subset of `tenant.d1Shards` declared in\n * `tamer.config.ts`. Defaults to the full configured set when\n * omitted; passing `--shards a,b` may only **trim** that set\n * (the config is the source of truth — extending the layout is\n * an edit to `tamer.config.ts`, not a CLI flag, so `apply` /\n * `drift` / other operators see the same shape). When the\n * config has no `tenant.d1Shards`, `provision-tenant` only\n * uploads the dispatch script — no per-tenant D1 fan-out.\n *\n * Validated against the configured set inside `provision-tenant`\n * (the CLI parser doesn't see the config yet); typos surface\n * with the configured roles in the error message.\n */\n shards: z.string().optional(),\n /**\n * Emit a single trailing JSON line on stdout describing the\n * provisioning result `{ status, tenant, shards, scriptName,\n * dispatchNamespaceName }` (or `{ status: \"failed\", error }` on\n * failure). Designed so `provision-workflow` (Cloudflare Container\n * caller per `docs/handoff.md` §7) can parse the result without\n * scraping human logs.\n */\n json: z.boolean().optional(),\n })\n .refine((d) => !!(d.main || d.artifact_key), {\n message: \"Provide --main <file> or --artifact-key <r2-key> (under tamer-artifacts-{env})\",\n });\n\n// The `--confirm-tenant` requirement for protected envs lives **inside**\n// `runDestroyTenant`, not here, because it depends on\n// `tenant.protectedEnvs` from `tamer.config.ts` (which the CLI parser\n// hasn't loaded yet). See `src/core/env/protectedEnvs.ts`.\nconst DestroyTenantArgsSchema = z.object({\n env: z.string().min(1, { error: \"env is required\" }),\n product: z.string().min(1, { error: \"product is required\" }),\n workspace: z.string().min(1, { error: \"workspace is required\" }),\n force: z.boolean().optional(),\n confirm_tenant: z.string().optional(),\n config: z.string().optional(),\n /** See ProvisionTenantArgsSchema.json. */\n json: z.boolean().optional(),\n});\n\nconst DeployArgsSchema = BaseArgsSchema.extend({\n dispatch_namespace: z.string().optional(),\n});\n\nconst DevArgsSchema = BaseArgsSchema.extend({\n all: z.boolean().optional(),\n});\n\nexport type CommandOptions = {\n sync: z.infer<typeof BaseArgsSchema>;\n apply: z.infer<typeof ApplyArgsSchema>;\n dev: z.infer<typeof DevArgsSchema>;\n deploy: z.infer<typeof DeployArgsSchema>;\n migrate: z.infer<typeof BaseArgsSchema>;\n types: z.infer<typeof BaseArgsSchema>;\n status: z.infer<typeof StatusArgsSchema>;\n events: z.infer<typeof EventsArgsSchema>;\n bootstrap: z.infer<typeof BootstrapArgsSchema>;\n destroy: z.infer<typeof DestroyArgsSchema>;\n drift: z.infer<typeof DriftArgsSchema>;\n plan: z.infer<typeof PlanArgsSchema>;\n import: z.infer<typeof ImportArgsSchema>;\n doctor: z.infer<typeof DoctorArgsSchema>;\n provision_tenant: z.infer<typeof ProvisionTenantArgsSchema>;\n destroy_tenant: z.infer<typeof DestroyTenantArgsSchema>;\n};\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const opts: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2).replace(/-/g, \"_\");\n const next = argv[i + 1];\n if (next && !next.startsWith(\"--\")) {\n opts[key] = next;\n i++;\n } else {\n opts[key] = true;\n }\n }\n }\n return opts;\n}\n\nfunction toOpts(raw: Record<string, string | boolean>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(raw)) {\n opts[k] = v;\n }\n return opts;\n}\n\nfunction formatZodError(error: z.ZodError): string {\n return error.issues\n .map((e) => (e.path.length ? `${e.path.join(\".\")}: ${e.message}` : e.message))\n .join(\"; \");\n}\n\nexport function parseSyncArgs(argv: string[]): { env?: string; configPath?: string } {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseApplyArgs(argv: string[]): {\n env?: string;\n addShard?: string;\n configPath?: string;\n planFile?: string;\n allowStale?: boolean;\n rollbackOnFailure?: boolean;\n target?: string;\n} {\n const parsed = ApplyArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n addShard: parsed.data.add_shard,\n configPath: parsed.data.config,\n planFile: parsed.data.plan,\n allowStale: parsed.data.allow_stale,\n rollbackOnFailure: parsed.data.rollback_on_failure,\n target: parsed.data.target,\n };\n}\n\nexport function parseDevArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n all?: boolean;\n} {\n const parsed = DevArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n all: parsed.data.all,\n };\n}\n\nexport function parseDeployArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n dispatchNamespace?: string;\n} {\n const parsed = DeployArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n dispatchNamespace: parsed.data.dispatch_namespace,\n };\n}\n\nexport function parseMigrateArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n} {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseTypesArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n} {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseStatusArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n tenant?: string;\n} {\n const parsed = StatusArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n tenant: parsed.data.tenant,\n };\n}\n\nexport function parseEventsArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n limit?: number;\n json?: boolean;\n} {\n const parsed = EventsArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n limit: parsed.data.limit,\n json: parsed.data.json,\n };\n}\n\nexport function parseDoctorArgs(argv: string[]): { json?: boolean } {\n const parsed = DoctorArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return { json: parsed.data.json };\n}\n\nexport function parseProvisionTenantArgs(argv: string[]): {\n env: string;\n product: string;\n workspace: string;\n main?: string;\n artifactKey?: string;\n moduleName?: string;\n configPath?: string;\n compatibilityDate?: string;\n compatibilityFlags?: string[];\n /**\n * Raw `--shards` value, validated against `tenant.d1Shards` from the\n * loaded config inside `provision-tenant` (the CLI parser doesn't\n * see the config yet, so we can't enforce the subset rule here).\n */\n shardsRaw?: string;\n json?: boolean;\n} {\n const parsed = ProvisionTenantArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n product: d.product,\n workspace: d.workspace,\n main: d.main,\n artifactKey: d.artifact_key,\n moduleName: d.module_name,\n configPath: d.config,\n compatibilityDate: d.compatibility_date,\n compatibilityFlags: d.compat_flags\n ?.split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n shardsRaw: d.shards,\n json: d.json,\n };\n}\n\nexport function parseDestroyTenantArgs(argv: string[]): {\n env: string;\n product: string;\n workspace: string;\n force?: boolean;\n confirmTenant?: string;\n configPath?: string;\n json?: boolean;\n} {\n const parsed = DestroyTenantArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n product: d.product,\n workspace: d.workspace,\n force: d.force,\n confirmTenant: d.confirm_tenant,\n configPath: d.config,\n json: d.json,\n };\n}\n\nexport function parseDestroyArgs(argv: string[]): {\n env: string;\n force?: boolean;\n skipWorkers?: boolean;\n confirmEnv?: string;\n configPath?: string;\n wipeMetadata?: boolean;\n planFile?: string;\n allowStale?: boolean;\n} {\n const raw = parseArgs(argv);\n const opts = toOpts(raw);\n const parsed = DestroyArgsSchema.safeParse(opts);\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n force: parsed.data.force,\n skipWorkers: parsed.data.skip_workers,\n confirmEnv: parsed.data.confirm_env,\n configPath: parsed.data.config,\n wipeMetadata: parsed.data.wipe_metadata,\n planFile: parsed.data.plan,\n allowStale: parsed.data.allow_stale,\n };\n}\n\nexport function parseDriftArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n json?: boolean;\n} {\n const parsed = DriftArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n json: parsed.data.json,\n };\n}\n\nexport function parsePlanArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n json?: boolean;\n detailedExitcode?: boolean;\n out?: string;\n destroy?: boolean;\n target?: string;\n} {\n const parsed = PlanArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n json: parsed.data.json,\n detailedExitcode: parsed.data.detailed_exitcode,\n out: parsed.data.out,\n destroy: parsed.data.destroy,\n target: parsed.data.target,\n };\n}\n\nexport function parseImportArgs(argv: string[]): {\n env: string;\n configPath?: string;\n kind:\n | \"d1\"\n | \"r2\"\n | \"kv\"\n | \"queue\"\n | \"hyperdrive\"\n | \"vectorize\"\n | \"ai_gateway\"\n | \"pipeline\"\n | \"workflow\"\n | \"secret_store\"\n | \"dns_record\"\n | \"dispatch_namespace\"\n | \"worker_route\";\n logical: string;\n cfId?: string;\n shardDate?: string;\n createdDate?: string;\n routeId?: string;\n zoneName?: string;\n} {\n const parsed = ImportArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n configPath: d.config,\n kind: d.kind,\n logical: d.logical,\n cfId: d.cf_id,\n shardDate: d.shard_date,\n createdDate: d.created_date,\n routeId: d.route_id,\n zoneName: d.zone_name,\n };\n}\n\nexport function parseBootstrapArgs(argv: string[]): {\n configPath?: string;\n} {\n const parsed = BootstrapArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n configPath: parsed.data.config,\n };\n}\n\nexport {\n parseSecretsArgs,\n type ParsedSecretsCommand,\n} from \"./commands/secrets/index.js\";\n","#!/usr/bin/env node\n\nimport {\n parseSyncArgs,\n parseApplyArgs,\n parseDevArgs,\n parseDeployArgs,\n parseMigrateArgs,\n parseTypesArgs,\n parseStatusArgs,\n parseEventsArgs,\n parseDestroyArgs,\n parseBootstrapArgs,\n parseDriftArgs,\n parsePlanArgs,\n parseImportArgs,\n parseDoctorArgs,\n parseProvisionTenantArgs,\n parseDestroyTenantArgs,\n} from \"./args.js\";\nimport { StateConflictError } from \"../core/state/StateConflictError.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\nconst rest = args.slice(1);\n\nasync function main() {\n let exitStatus = 0;\n try {\n switch (command) {\n case \"bootstrap\":\n await import(\"./commands/bootstrap.js\").then((m) =>\n m.runBootstrap(parseBootstrapArgs(rest)),\n );\n break;\n case \"sync\":\n await import(\"./commands/sync.js\").then((m) =>\n m.runSync(parseSyncArgs(rest))\n );\n break;\n case \"apply\": {\n const a = parseApplyArgs(rest);\n await import(\"./commands/apply.js\").then((m) =>\n m.runApply({\n env: a.env,\n addShard: a.addShard,\n configPath: a.configPath,\n planFile: a.planFile,\n allowStale: a.allowStale,\n rollbackOnFailure: a.rollbackOnFailure,\n target: a.target,\n }),\n );\n break;\n }\n case \"dev\":\n await import(\"./commands/dev.js\").then((m) =>\n m.runDev(parseDevArgs(rest))\n );\n break;\n case \"deploy\": {\n const d = parseDeployArgs(rest);\n await import(\"./commands/deploy.js\").then((m) =>\n m.runDeploy({\n worker: d.worker,\n env: d.env,\n configPath: d.configPath,\n dispatchNamespace: d.dispatchNamespace,\n }),\n );\n break;\n }\n case \"migrate\":\n await import(\"./commands/migrate.js\").then((m) =>\n m.runMigrate(parseMigrateArgs(rest))\n );\n break;\n case \"types\":\n await import(\"./commands/types.js\").then((m) =>\n m.runTypes(parseTypesArgs(rest))\n );\n break;\n case \"status\":\n await import(\"./commands/status.js\").then((m) =>\n m.runStatus(parseStatusArgs(rest))\n );\n break;\n case \"events\":\n await import(\"./commands/events.js\").then((m) =>\n m.runEvents(parseEventsArgs(rest)),\n );\n break;\n case \"drift\":\n exitStatus = await import(\"./commands/drift.js\").then((m) =>\n m.runDrift(parseDriftArgs(rest)),\n );\n break;\n case \"plan\": {\n const p = parsePlanArgs(rest);\n exitStatus = await import(\"./commands/plan.js\").then((m) =>\n m.runPlan({\n env: p.env,\n configPath: p.configPath,\n json: p.json,\n detailedExitcode: p.detailedExitcode,\n out: p.out,\n destroy: p.destroy,\n target: p.target,\n }),\n );\n break;\n }\n case \"import\":\n await import(\"./commands/import.js\").then((m) =>\n m.runImport(parseImportArgs(rest)),\n );\n break;\n case \"doctor\":\n exitStatus = await import(\"./commands/doctor.js\").then((m) =>\n m.runDoctor(parseDoctorArgs(rest)),\n );\n break;\n case \"provision-tenant\": {\n const p = parseProvisionTenantArgs(rest);\n await import(\"./commands/provision-tenant.js\").then((m) =>\n m.runProvisionTenant({\n env: p.env,\n product: p.product,\n workspace: p.workspace,\n main: p.main,\n artifactKey: p.artifactKey,\n moduleName: p.moduleName,\n configPath: p.configPath,\n compatibilityDate: p.compatibilityDate,\n compatibilityFlags: p.compatibilityFlags,\n shardsRaw: p.shardsRaw,\n json: p.json,\n }),\n );\n break;\n }\n case \"destroy-tenant\": {\n const t = parseDestroyTenantArgs(rest);\n await import(\"./commands/destroy-tenant.js\").then((m) =>\n m.runDestroyTenant({\n env: t.env,\n product: t.product,\n workspace: t.workspace,\n force: t.force,\n confirmTenant: t.confirmTenant,\n configPath: t.configPath,\n json: t.json,\n }),\n );\n break;\n }\n case \"destroy\": {\n const d = parseDestroyArgs(rest);\n await import(\"./commands/destroy.js\").then((m) =>\n m.runDestroy({\n env: d.env,\n force: d.force,\n skipWorkers: d.skipWorkers,\n confirmEnv: d.confirmEnv,\n configPath: d.configPath,\n wipeMetadata: d.wipeMetadata,\n planFile: d.planFile,\n allowStale: d.allowStale,\n }),\n );\n break;\n }\n case \"wfp\": {\n const [sub, ...wfpRest] = rest;\n if (sub === \"put\") {\n const { parseWfpPutArgs, runWfpPut } = await import(\n \"./commands/wfp-put.js\"\n );\n await runWfpPut(parseWfpPutArgs(wfpRest));\n break;\n }\n if (sub === \"delete\") {\n const { parseWfpDeleteArgs, runWfpDelete } = await import(\n \"./commands/wfp-delete.js\"\n );\n await runWfpDelete(parseWfpDeleteArgs(wfpRest));\n break;\n }\n console.error(\n \"usage:\\n tamer wfp put --namespace <n> --script-name <s> --main <file> [--compatibility-date <d>] [--compat-flags a,b] [--config <path>]\\n tamer wfp delete --namespace <n> --script-name <s> [--force] [--config <path>]\",\n );\n process.exit(1);\n }\n case \"secrets\":\n exitStatus = await import(\"./commands/secrets/index.js\").then((m) =>\n m.runSecrets(rest),\n );\n break;\n case \"help\":\n case \"-h\":\n case \"--help\":\n case undefined:\n console.log(`\ntamer — Cloudflare Workers infrastructure manager\n\nUsage: tamer <command> [options]\n\nCommands:\n bootstrap Create account-scoped Tamer metadata: tamer-state (D1), tamer-artifacts (R2), tamer-secrets (D1). Run once per account.\n sync Sync state from Cloudflare API\n apply Provision missing resources\n dev Start wrangler dev (use --all for every worker)\n deploy Deploy workers\n migrate Run D1 migrations\n types Generate worker-configuration.d.ts\n status Show resource status (optional --tenant product:workspace)\n events Show recent stack operations from state (read-only; --limit, --json)\n drift Compare state vs Cloudflare and report differences (read-only)\n plan CloudFormation-style preview of apply+deploy (read-only)\n import Register an existing Cloudflare resource into Tamer state by logical name\n doctor Verify CLOUDFLARE_* credentials can read the account API\n provision-tenant Runtime: create per-tenant D1 shards declared in tenant.d1Shards + upload dispatch script (--main or --artifact-key); --shards a,b trims to a subset of the configured layout (omit for all); --json emits machine-readable result for Cloudflare Container callers\n destroy-tenant Runtime: remove tenant script + D1 + state (shared envs need --confirm-tenant); --json emits machine-readable result\n destroy Delete all resources for an env (use with caution)\n secrets Encrypted secrets vault (init, set, load, get, list, rm, verify, push)\n wfp put Upload a single-module user Worker to a dispatch namespace (multipart API)\n wfp delete Delete a user Worker from a dispatch namespace\n\nOptions:\n --env <name> Environment (default: local for most commands; deploy requires explicit --env)\n --worker <name> Target specific worker (monorepo)\n --config <path> Path to tamer/project.config.ts (or another .ts file; tamer.config.ts is not supported)\n --all dev: run all workers on ports BASE, BASE+1, ... (see TAMER_DEV_BASE_PORT)\n --add-shard <name> Add a new shard (apply only)\n --target <kind>:<logical> apply / plan: only that declared resource (not with apply --plan or plan --out)\n --dispatch-namespace <name> Workers for Platforms: pass to wrangler deploy (deploy only)\n --force Bypass shared-env destroy confirmation (destroy only)\n --confirm-env <name> destroy: required for envs dev, staging, prod, production; must match --env\n --skip-workers destroy: do not run wrangler delete / dispatch script delete (storage + namespaces only)\n --wipe-metadata destroy: after resources, delete shared tamer-state-{env} D1 + tamer-artifacts-{env} R2 (use on last stack only)\n --json drift / plan: emit JSON instead of human-readable output\n --detailed-exitcode plan: exit 2 instead of 0 when there are pending changes (Terraform-style)\n --destroy plan: preview deletions instead of creates/updates (read-only \"tamer destroy\" dry-run)\n --kind <k> import: d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | dispatch_namespace | worker_route\n --logical <n> import: logical resource name from the Tamer project config (or worker key)\n --cf-id <id> import: Cloudflare id (D1 uuid, KV id, R2 bucket name, dispatch namespace name)\n --shard-date <date> import d1: required for sharded D1 databases (YYYY-MM-DD)\n --created-date <date> import r2: bucket creation date (defaults to extracting from name)\n --route-id <id> import worker_route: route id from /zones/{id}/workers/routes\n --zone-name <z> import worker_route: optional zone hint when a worker has multiple routes\n\nSecrets (requires TAMER_SECRETS_KEY_{env} master key env var):\n tamer secrets init --env <env> Generate master key (print once) + provision vault\n tamer secrets set <NAME> --env <env> Encrypt value from stdin into vault (pipe only)\n tamer secrets load --env <env> [--worker <name>] [--file .dev.vars.<env>] Bulk import; all workers when --worker omitted\n tamer secrets get <NAME> --env <env> Decrypt + print (confirmation + audit log)\n tamer secrets list --env <env> Names + fingerprints + last-set (never values)\n tamer secrets rm <NAME> --env <env> Remove from vault\n tamer secrets verify --env <env> Reconcile declared vs vault vs pushed vs worker\n tamer secrets push --env <env> Push stale/new secrets to workers via CF API\n\nEnvironment variables (same as Wrangler):\n CLOUDFLARE_ACCOUNT_ID Cloudflare account ID\n CLOUDFLARE_API_TOKEN Cloudflare API token\n R2_ACCESS_KEY_ID (optional) R2 S3 API access key for \"tamer destroy\" — empty bucket (objects + abort incomplete multipart) before delete\n R2_SECRET_ACCESS_KEY (optional) R2 S3 API secret; create under R2 → Manage R2 API Tokens; not the same as CLOUDFLARE_API_TOKEN\n TAMER_DEV_BASE_PORT First port for \"tamer dev --all\" (default 8787)\n`);\n break;\n default:\n console.error(`Unknown command: ${command}`);\n console.error(\"Run 'tamer help' for usage.\");\n process.exit(1);\n }\n if (exitStatus !== 0) {\n process.exit(exitStatus);\n }\n } catch (err) {\n if (err instanceof StateConflictError) {\n console.error(err.message);\n process.exit(3);\n return;\n }\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tamer.mjs","names":["_a","object","isPlainObject","_a","config","args","initializer","util.jsonStringifyReplacer","issue","error","core.$ZodAsyncError","util.finalizeIssue","core.config","parse","errors.$ZodRealError","parseAsync","errors.$ZodError","safeParse","safeParseAsync","encode","decode","encodeAsync","decodeAsync","safeEncode","safeDecode","safeEncodeAsync","safeDecodeAsync","duration","version","_emoji","date","args","time","datetime","string","number","boolean","_a","inst","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","args","_a","util.aborted","checks","core.$ZodAsyncError","checkResult","canary","result","safeParse","safeParseAsync","regexes.string","_","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","util.prefixIssues","util.optionalKeys","r","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","results","left","right","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","meta","util.normalizeParams","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","describe","meta","process","_a","meta","id","schema","process","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","issue","util.jsonStringifyReplacer","issues","core.$constructor","util.mergeDefs","core.clone","def","meta","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","checks.overwrite","args","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","number","core._number","core._int","processors.booleanProcessor","core._boolean","processors.anyProcessor","core._any","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","output","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","processors.pipeProcessor","processors.readonlyProcessor","processors.customProcessor","core._custom","core._refine","core._superRefine","core.describe","core.meta","core._coercedNumber","schemas.ZodNumber","out: Record<string, unknown>","overlay: string | null","z.object","z.string","z\n .array","z\n .string","z.array","z\n .string","z\n .custom","z\n .object","z.enum","z.boolean","z.union","z.number","z\n .object","z.literal","z\n .enum","z.record","z\n .union","z.any","z\n .object","z\n .string","z\n .record","raw: unknown","config","entries: [string, WorkerConfig][]","parts: string[]","parsed: unknown","all: Array<{ uuid: string; name: string; created_at: string }>","all: Array<{ name: string; creation_date: string }>","cursor: string | undefined","all: Array<{ id: string; title: string }>","all: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }>","all: Row[]","all: Array<{ id: string; name: string; endpoint?: string }>","all: Array<{ id: string; name: string; type: string }>","all: Item[]","all: Array<{ id: string; name: string; scopes?: string[] }>","uuid","base64","config","out: Route[]","fieldPath: string","out: Record<string, string>","target: WorkerConfig | undefined","config","next: WorkerConfig","rest","mergedRoutes: Route[]","wranglerRoutes: Route[] | undefined","z.object","z.literal","z.string","z.boolean","z.number","z.enum","z\n .object","z.discriminatedUnion","z.array","z.record","config","uuid","unknown","tenantId: string","env: string","stackName: string","uuid","meta","config","refs: DiscoveredImportRef[]","m: RegExpExecArray | null","out: Record<string, Record<string, string>>","flat: Record<string, string>","tenant: TenantMeta","conventions?: NamingConventions","config","api: CFApiClient","env: string","uuid","record","config","out: SecretWorkerInput[]","required","workerSecretNames: string[]","uuid","chunks: Buffer[]","result: Record<string, string>","required","extras: string[]","entries: Record<string, string>","out: WorkerSecretsLoadTarget[]","record","entries: SecretReconcileEntry[]","required","args","drift: ResourceDrift","items: PlanItem[]","meta","STATUS_LABEL: Record<SecretReconcileStatus, string>","parts: string[]","required","positional: string[]","opts: Record<string, string | boolean>","z.object","z.string","z.boolean","z.enum","z.coerce.number","z\n .object","opts: Record<string, string | boolean>","opts: Record<string, unknown>"],"sources":["../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/core/to-json-schema.js","../node_modules/zod/v4/core/json-schema-processors.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.js","../node_modules/zod/v4/classic/coerce.js","../src/core/config/merge-project-overlay.ts","../src/core/config/resolve-config-sources.ts","../src/core/config/loader.ts","../src/core/cloudflareEnv.ts","../src/core/api/pipelinesV1PathId.ts","../src/core/api/CFApiClient.ts","../src/core/secrets/secretsDb.ts","../src/core/secrets/masterKey.ts","../src/features/dispatch-namespace/dispatch-namespace.resolve.ts","../src/core/routes/routes.resolve.ts","../src/core/wrangler/wranglerOutFile.ts","../src/core/references/references.ts","../src/core/config/resolver.ts","../src/core/state/stateSchema.ts","../src/core/state/stackName.ts","../src/core/state/tamerStateDb.ts","../src/core/tenant/tenantKeys.ts","../src/core/state/StateConflictError.ts","../src/core/state/StateManager.ts","../src/core/imports/fetchStackImports.ts","../src/core/secrets/declared.ts","../src/core/naming/NamingEngine.ts","../src/core/config/namingFromConfig.ts","../src/core/secrets/SecretsVault.ts","../src/cli/commands/secrets/context.ts","../src/cli/commands/secrets/init.ts","../src/core/secrets/crypto.ts","../src/core/secrets/fingerprint.ts","../src/cli/commands/secrets/stdin.ts","../src/cli/commands/secrets/set.ts","../src/cli/commands/secrets/dotenv.ts","../src/cli/commands/secrets/load.ts","../src/cli/commands/secrets/get.ts","../src/cli/commands/secrets/list.ts","../src/cli/commands/secrets/rm.ts","../src/core/secrets/reconcile.ts","../src/cli/commands/secrets/verify.ts","../src/cli/commands/secrets/push.ts","../src/cli/commands/secrets/index.ts","../src/cli/args.ts","../src/cli/index.ts"],"sourcesContent":["/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 3,\n patch: 6,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalOut) {\n if (result.issues.length) {\n // For optional-out schemas, ignore errors on absent keys\n if (isOptionalOut && !(key in input)) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalOut) {\n // For optional-out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n ...(tooBig\n ? { code: \"too_big\", maximum: items.length, inclusive: true }\n : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n if (typeof exclusiveMinimum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\") {\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\" && ctx.target !== \"draft-04\") {\n if (exclusiveMaximum <= maximum)\n delete json.maximum;\n else\n delete json.exclusiveMaximum;\n }\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, { ...params, path: [...params.path, \"items\"] });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const innerType = ctx.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), {\n parent: true,\n });\n };\n inst.with = inst.check;\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.exactOptional = () => exactOptional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n inst.apply = (fn) => fn(inst);\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n inst.slugify = () => inst.check(checks.slugify());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.safeExtend = (incoming) => {\n return util.safeExtend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","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 * Deep-merge `tamer/env/<env>.config.ts` onto `tamer/project.config.ts`.\n * See docs/design-tamer-project-config.md.\n */\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return (\n v !== null &&\n typeof v === \"object\" &&\n !Array.isArray(v) &&\n !(v instanceof Date)\n );\n}\n\nfunction validateOverlayWorkers(\n projectWorkers: Record<string, unknown>,\n overlayWorkers: Record<string, unknown>,\n): void {\n for (const k of Object.keys(overlayWorkers)) {\n if (!(k in projectWorkers)) {\n throw new Error(\n `Tamer env overlay: unknown worker key \"${k}\". ` +\n `Declare \"${k}\" in tamer/project.config.ts first — overlays may only patch existing workers.`,\n );\n }\n }\n}\n\nfunction mergeWorkerResources(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const pk = patch[k];\n if (pk !== undefined) {\n out[k] = pk;\n }\n }\n return out;\n}\n\nfunction mergeEnvMap(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\nfunction mergeWorkerConfig(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...base };\n for (const key of Object.keys(patch)) {\n const pv = patch[key];\n if (pv === undefined) continue;\n\n if (key === \"vars\") {\n const bv = isPlainObject(base.vars) ? base.vars : {};\n const ov = isPlainObject(patch.vars) ? patch.vars : {};\n out.vars = { ...bv, ...ov };\n continue;\n }\n if (key === \"tamerRoutes\") {\n out.tamerRoutes = pv;\n continue;\n }\n if (key === \"tamerStaleRouteSweepZones\") {\n out.tamerStaleRouteSweepZones = pv;\n continue;\n }\n if (key === \"resources\") {\n if (isPlainObject(base.resources) && isPlainObject(pv)) {\n out.resources = mergeWorkerResources(base.resources, pv);\n } else {\n out.resources = pv;\n }\n continue;\n }\n if (key === \"env\") {\n if (isPlainObject(base.env) && isPlainObject(pv)) {\n out.env = mergeEnvMap(base.env, pv);\n } else {\n out.env = pv;\n }\n continue;\n }\n if (key === \"local\") {\n if (isPlainObject(base.local) && isPlainObject(pv)) {\n out.local = mergeWorkerConfig(\n base.local as Record<string, unknown>,\n pv as Record<string, unknown>,\n );\n } else {\n out.local = pv;\n }\n continue;\n }\n out[key] = pv;\n }\n return out;\n}\n\nfunction mergeWorkersRecord(\n base: Record<string, unknown>,\n patch: Record<string, unknown>,\n): Record<string, unknown> {\n const out = { ...base };\n for (const k of Object.keys(patch)) {\n const b = base[k];\n const p = patch[k];\n if (isPlainObject(b) && isPlainObject(p)) {\n out[k] = mergeWorkerConfig(b, p);\n } else {\n out[k] = p;\n }\n }\n return out;\n}\n\n/**\n * Merge env overlay onto project config (both plain objects from `default` exports).\n * Does not run {@link materializeCloudflareBindings} — caller does that on the result.\n */\nexport function mergeProjectOverlay(\n project: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> {\n const out: Record<string, unknown> = { ...project };\n for (const key of Object.keys(overlay)) {\n const ov = overlay[key];\n if (ov === undefined) continue;\n const pv = project[key];\n\n switch (key) {\n case \"tenant\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"naming\":\n out[key] = ov;\n break;\n case \"workers\":\n if (!isPlainObject(pv) || !isPlainObject(ov)) {\n out[key] = ov;\n break;\n }\n validateOverlayWorkers(pv, ov);\n out[key] = mergeWorkersRecord(pv, ov);\n break;\n case \"worker\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = mergeWorkerConfig(pv, ov);\n } else {\n out[key] = ov;\n }\n break;\n case \"outputs\":\n if (isPlainObject(pv) && isPlainObject(ov)) {\n out[key] = { ...pv, ...ov };\n } else {\n out[key] = ov;\n }\n break;\n case \"logpushJobs\":\n case \"dispatchNamespaces\":\n case \"dnsRecords\":\n out[key] = ov;\n break;\n default:\n out[key] = ov;\n }\n }\n return out;\n}\n","import { existsSync } from \"fs\";\nimport { basename, dirname, join, resolve } from \"path\";\n\nexport type ResolvedConfigSources =\n | { mode: \"single\"; path: string }\n | { mode: \"merged\"; projectPath: string; overlayPath: string | null };\n\nfunction isProjectFileName(file: string): boolean {\n return file === \"project.config.ts\" || file === \"tamer.project.config.ts\";\n}\n\nfunction projectDirForMergedEntry(absProject: string): string {\n const dir = dirname(absProject);\n const file = basename(absProject);\n if (file === \"project.config.ts\") {\n return dir;\n }\n return dir;\n}\n\nfunction overlayPathForNestedLayout(projectDir: string, env: string): string {\n return resolve(projectDir, \"env\", `${env}.config.ts`);\n}\n\nfunction overlayPathForFlatLayout(projectRoot: string, env: string): string {\n return resolve(projectRoot, `tamer.env.${env}.ts`);\n}\n\nfunction rejectLegacyTamerConfigFile(context: string): never {\n throw new Error(\n `${context}: tamer.config.ts is not supported. ` +\n `Move the default export to tamer/project.config.ts and optional per-env overlays to tamer/env/<env>.config.ts ` +\n `(or use tamer.project.config.ts at the repo root with optional tamer.env.<env>.ts).`,\n );\n}\n\n/**\n * Resolve which config file(s) to load. See docs/design-tamer-project-config.md.\n *\n * - **Merged:** `tamer/project.config.ts` or `tamer.project.config.ts`, plus optional env overlay.\n * - **Single:** explicit `--config` path to any `.ts` file **except** `tamer.config.ts` (e.g. alternate snapshots in tests).\n */\nexport function resolveConfigSources(\n cwd: string,\n explicitConfigPath: string | undefined,\n env: string | undefined,\n): ResolvedConfigSources {\n if (explicitConfigPath) {\n const abs = resolve(cwd, explicitConfigPath);\n const file = basename(abs);\n if (file === \"tamer.config.ts\") {\n rejectLegacyTamerConfigFile(\"--config\");\n }\n if (isProjectFileName(file)) {\n const projectDir = projectDirForMergedEntry(abs);\n let overlay: string | null = null;\n if (env) {\n if (file === \"project.config.ts\") {\n const candidate = overlayPathForNestedLayout(projectDir, env);\n if (existsSync(candidate)) overlay = candidate;\n } else {\n const candidate = overlayPathForFlatLayout(dirname(abs), env);\n if (existsSync(candidate)) overlay = candidate;\n }\n }\n return { mode: \"merged\", projectPath: abs, overlayPath: overlay };\n }\n return { mode: \"single\", path: abs };\n }\n\n const nestedProject = resolve(cwd, \"tamer\", \"project.config.ts\");\n if (existsSync(nestedProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForNestedLayout(\n dirname(nestedProject),\n env,\n );\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: nestedProject,\n overlayPath: overlay,\n };\n }\n\n const flatProject = resolve(cwd, \"tamer.project.config.ts\");\n if (existsSync(flatProject)) {\n let overlay: string | null = null;\n if (env) {\n const candidate = overlayPathForFlatLayout(cwd, env);\n if (existsSync(candidate)) overlay = candidate;\n }\n return {\n mode: \"merged\",\n projectPath: flatProject,\n overlayPath: overlay,\n };\n }\n\n if (existsSync(resolve(cwd, \"tamer.config.ts\"))) {\n rejectLegacyTamerConfigFile(\"Config discovery\");\n }\n\n throw new Error(\n `No Tamer project config under ${cwd}. ` +\n `Create tamer/project.config.ts (or tamer.project.config.ts at the repo root).`,\n );\n}\n","import { resolve } from \"path\";\nimport { z } from \"zod\";\nimport { materializeCloudflareBindings } from \"../../dx/normalize.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../types.js\";\nimport { TAMER_OVERLAY_ENV_KEY } from \"../../types.js\";\nimport { mergeProjectOverlay } from \"./merge-project-overlay.js\";\nimport { resolveConfigSources } from \"./resolve-config-sources.js\";\n\nconst TENANT_SHARD_ROLE_RE = /^[a-z][a-z0-9_-]*$/;\n\nconst TenantMetaSchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n slug: z.string().min(1),\n d1Shards: z\n .array(\n z\n .string()\n .min(1)\n .refine((s) => TENANT_SHARD_ROLE_RE.test(s), {\n // Roles flow into D1 database names (`db_{role}_…`); D1 names\n // accept `[A-Za-z0-9_-]` and Cloudflare lowercases on read,\n // so we lock roles to the same lowercase subset to avoid the\n // \"config says `System` but Cloudflare returns `system`\"\n // adoption drift.\n error:\n \"tenant.d1Shards entries must be lowercase ASCII (letters, digits, `_`, `-`) and start with a letter\",\n }),\n )\n .optional()\n .refine(\n (arr) => !arr || new Set(arr).size === arr.length,\n \"tenant.d1Shards must not contain duplicate roles\",\n ),\n protectedEnvs: z.array(z.string().min(1)).optional(),\n ephemeralEnvPattern: z\n .string()\n .min(1)\n .optional()\n .refine(\n (s) => {\n if (s == null) return true;\n try {\n new RegExp(s);\n return true;\n } catch {\n return false;\n }\n },\n // Compile-fail at config-load time so a typo in\n // `ephemeralEnvPattern` surfaces here instead of later when\n // `apply` / `provision-tenant` tries to resolve a namespace.\n \"tenant.ephemeralEnvPattern must be a valid JavaScript RegExp source string\",\n ),\n});\n\nconst CloudflareNameFnSchema = z\n .custom<(tenantId: string, env: string, ctx?: { shardDate?: string }) => string>(\n (v) => v === undefined || typeof v === \"function\",\n )\n .optional();\n\nconst D1ResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n type: z.enum([\"single\", \"sharded\"]),\n cloudflareName: CloudflareNameFnSchema,\n ownership: z.enum([\"managed\", \"external\"]).optional(),\n databaseName: z.string().optional(),\n binding: z.string().optional(),\n shardDate: z.string().optional(),\n registryRole: z.string().optional(),\n legacyIds: z.array(z.string().min(1)).optional(),\n legacyBindings: z.array(z.string().min(1)).optional(),\n current: z.boolean().optional(),\n migrationsDir: z.string().optional(),\n migrationsTable: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n })\n .refine(\n (d) =>\n d.ownership !== \"external\" ||\n (typeof d.databaseName === \"string\" && d.databaseName.length > 0),\n { error: \"resources.d1: ownership 'external' requires non-empty databaseName\" },\n )\n .refine(\n (d) => d.ownership !== \"external\" || d.type === \"single\",\n { error: \"resources.d1: ownership 'external' only supports type 'single'\" },\n )\n .refine(\n (d) => !d.shardDate || d.type === \"sharded\",\n { error: \"resources.d1: shardDate only applies to type 'sharded'\" },\n )\n .refine(\n (d) => {\n if (!d.shardDate) return true;\n const t = d.shardDate.trim();\n return /^\\d{4}-\\d{2}-\\d{2}$/.test(t) || /^\\d{8}$/.test(t);\n },\n { error: \"resources.d1: shardDate must be YYYY-MM-DD or YYYYMMDD\" },\n );\n\nconst R2ResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n});\n\nconst KVResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n});\n\nconst QueueResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n consumerOnly: z.boolean().optional(),\n});\n\nconst HyperdriveSecretSchema = z.union([\n z.string(),\n z.object({ fromEnv: z.string().min(1) }),\n]);\n\nconst HyperdriveOriginSchema = z.object({\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n host: z.string().min(1),\n port: z.number().optional(),\n database: z.string().min(1),\n user: z.string().min(1),\n password: HyperdriveSecretSchema,\n access_client_id: z.string().optional(),\n access_client_secret: HyperdriveSecretSchema.optional(),\n});\n\nconst HyperdriveResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n origin: HyperdriveOriginSchema,\n caching: z\n .object({\n disabled: z.boolean().optional(),\n max_age: z.number().optional(),\n stale_while_revalidate: z.number().optional(),\n })\n .optional(),\n mtls: z\n .object({\n ca_certificate_id: z.string().optional(),\n mtls_certificate_id: z.string().optional(),\n })\n .optional(),\n localConnectionString: z.string().optional(),\n});\n\nconst VectorizeResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n binding: z.string().optional(),\n dimensions: z.number().int().positive(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n description: z.string().optional(),\n});\n\nconst AIGatewayResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n cacheTtl: z.number().int().nonnegative().optional(),\n cacheInvalidateOnUpdate: z.boolean().optional(),\n collectLogs: z.boolean().optional(),\n authentication: z.boolean().optional(),\n rateLimitingInterval: z.number().int().nonnegative().optional(),\n rateLimitingLimit: z.number().int().nonnegative().optional(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]).optional(),\n});\n\nconst DispatchNamespaceResourceSchema = z.object({\n logicalName: z.string().min(1),\n namespace: z.string().min(1),\n envSuffix: z.boolean().optional(),\n});\n\nconst LogpushJobR2DestinationSchema = z.object({\n bucketLogicalName: z.string().min(1),\n pathPrefix: z.string().optional(),\n accessKeyIdEnv: z.string().min(1),\n secretAccessKeyEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesIngestSchema = z.object({\n streamId: z.string().min(1),\n pipelineId: z.string().min(1),\n bearerTokenEnv: z.string().min(1),\n});\n\nconst LogpushJobPipelinesAutoSchema = z.object({\n catalogBucketLogicalName: z.string().min(1),\n tableName: z.string().min(1),\n namespace: z.string().min(1).optional(),\n /** When not `false`, new sinks get `${tableName}_${Date.now()}` (default). */\n tableNameAppendTimestamp: z.boolean().optional(),\n sinkRowGroupBytes: z.number().int().positive().optional(),\n sinkRollingFileSizeBytes: z.number().int().positive().optional(),\n sinkRollingIntervalSeconds: z.number().int().positive().optional(),\n});\n\nconst LogpushJobResourceConfigSchema = z\n .object({\n logicalName: z.string().min(1),\n dataset: z.literal(\"workers_trace_events\"),\n jobName: z.string().optional(),\n r2: LogpushJobR2DestinationSchema.optional(),\n pipelinesIngest: LogpushJobPipelinesIngestSchema.optional(),\n pipelinesAuto: LogpushJobPipelinesAutoSchema.optional(),\n destinationConfEnv: z.string().min(1).optional(),\n destinationConfFromJobId: z.number().int().positive().optional(),\n destinationConfFromJobIdEnv: z.string().min(1).optional(),\n filter: z.string().min(1).optional(),\n fieldNames: z.array(z.string()).optional(),\n enabled: z.boolean().optional(),\n })\n .refine(\n (d) => {\n const hasR2 = Boolean(d.r2);\n const n =\n (d.destinationConfEnv ? 1 : 0) +\n (d.destinationConfFromJobId != null ? 1 : 0) +\n (d.destinationConfFromJobIdEnv ? 1 : 0) +\n (d.pipelinesIngest ? 1 : 0) +\n (d.pipelinesAuto ? 1 : 0);\n if (hasR2) return n === 0;\n return n === 1;\n },\n {\n error:\n \"logpushJobs: set exactly one of r2 | pipelinesIngest | pipelinesAuto | destinationConfEnv | destinationConfFromJobId | destinationConfFromJobIdEnv\",\n },\n )\n .refine(\n (d) =>\n !(\n d.destinationConfFromJobId != null && d.destinationConfFromJobIdEnv\n ),\n {\n error:\n \"logpushJobs: use only one of destinationConfFromJobId or destinationConfFromJobIdEnv\",\n },\n )\n .refine((d) => !(d.pipelinesIngest && d.pipelinesAuto), {\n error: \"logpushJobs: use only one of pipelinesIngest or pipelinesAuto\",\n });\n\nconst DnsRecordResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n zoneId: z.string().min(1),\n type: z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n ]),\n name: z.string().min(1),\n content: z.string().min(1),\n ttl: z.number().int().positive().optional(),\n proxied: z.boolean().optional(),\n priority: z.number().int().nonnegative().optional(),\n comment: z.string().optional(),\n skipEnvs: z.array(z.string()).optional(),\n preserveOnDestroy: z.boolean().optional(),\n});\n\nconst PipelineResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n sql: z.string().min(1),\n binding: z.string().min(1).optional(),\n});\n\nconst WorkflowResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n className: z.string().min(1),\n scriptName: z.string().min(1).optional(),\n binding: z.string().min(1).optional(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n});\n\nconst SecretsStoreResourceConfigSchema = z.object({\n logicalName: z.string().min(1),\n cloudflareName: CloudflareNameFnSchema,\n});\n\nconst SecretsStoreSecretBindingSchema = z.object({\n binding: z.string().min(1),\n store: z.string().min(1),\n secretName: z.string().min(1),\n});\n\nconst WorkerSecretsConfigSchema = z.object({\n required: z.array(z.string().min(1)),\n});\n\nconst WorkerResourcesSchema = z.object({\n d1: z.array(D1ResourceConfigSchema).optional(),\n r2: z.array(R2ResourceConfigSchema).optional(),\n kv: z.array(KVResourceConfigSchema).optional(),\n queues: z.array(QueueResourceConfigSchema).optional(),\n hyperdrive: z.array(HyperdriveResourceConfigSchema).optional(),\n vectorize: z.array(VectorizeResourceConfigSchema).optional(),\n aiGateway: z.array(AIGatewayResourceConfigSchema).optional(),\n pipelines: z.array(PipelineResourceConfigSchema).optional(),\n workflows: z.array(WorkflowResourceConfigSchema).optional(),\n secretsStores: z.array(SecretsStoreResourceConfigSchema).optional(),\n secretsStoreSecrets: z.array(SecretsStoreSecretBindingSchema).optional(),\n});\n\nconst WranglerRouteSchema = z.object({\n pattern: z.string(),\n custom_domain: z.boolean().optional(),\n zone_name: z.string().optional(),\n zone_id: z.string().optional(),\n});\n\nconst WranglerAssetsSchema = z.object({\n directory: z.string(),\n binding: z.string().optional(),\n not_found_handling: z\n .enum([\"single-page-application\", \"return-404\"])\n .optional(),\n});\n\nconst EnvOverrideSchema = z\n .object({\n vars: z.record(z.string(), z.string()).optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst WorkerConfigSchema = z\n .object({\n path: z.string().optional(),\n config: z.string().optional(),\n scriptName: z.string().optional(),\n wranglerOutFile: z.string().optional(),\n dispatchNamespace: z.string().optional(),\n main: z.string().optional(),\n compatibility_date: z.string().optional(),\n compatibility_flags: z.array(z.string()).optional(),\n limits: z.record(z.string(), z.union([z.number(), z.string()])).optional(),\n workers_dev: z.boolean().optional(),\n preview_urls: z.boolean().optional(),\n resources: WorkerResourcesSchema.optional(),\n secrets: WorkerSecretsConfigSchema.optional(),\n alias: z.record(z.string(), z.string()).optional(),\n vars: z.record(z.string(), z.string()).optional(),\n local: EnvOverrideSchema.optional(),\n env: z.record(z.string(), EnvOverrideSchema).optional(),\n assets: WranglerAssetsSchema.optional(),\n route: z\n .union([WranglerRouteSchema, z.array(WranglerRouteSchema)])\n .optional(),\n routes: z.array(WranglerRouteSchema).optional(),\n })\n .passthrough();\n\nconst ShardRegistryCodegenConfigSchema = z.object({\n worker: z.string().min(1).optional(),\n outFile: z.string().min(1).optional(),\n exportName: z\n .string()\n .min(1)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$]*$/, {\n error: \"codegen.shardRegistry.exportName must be a valid JS identifier\",\n })\n .optional(),\n});\n\nconst CodegenConfigSchema = z.object({\n shardRegistry: ShardRegistryCodegenConfigSchema.optional(),\n});\n\nconst CfiConfigSchema = z\n .object({\n tenant: TenantMetaSchema,\n account_id: z.string().optional(),\n compatibility_date: z.string().optional(),\n naming: z.any().optional(),\n codegen: CodegenConfigSchema.optional(),\n dispatchNamespaces: z.array(DispatchNamespaceResourceSchema).optional(),\n dnsRecords: z.array(DnsRecordResourceConfigSchema).optional(),\n logpushJobs: z.array(LogpushJobResourceConfigSchema).optional(),\n stack: z\n .object({\n // Stack name flows into the D1 row key (`cfi_state:{name}`) and the\n // `${tamer:import:<name>.<output>}` parser, so the same identifier\n // shape as output names keeps both surfaces consistent.\n name: z\n .string()\n .regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"stack.name must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n })\n .optional(),\n description: z.string().min(1).optional(),\n })\n .optional(),\n outputs: z\n .record(\n // CloudFormation-ish output names: must start with a letter, then\n // letters/digits/`_`/`-`. Keeps them safe for filenames, env-var\n // exports, and `${tamer:import:stack.<name>}` parsing.\n z.string().regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/, {\n error:\n \"outputs key must match /^[a-zA-Z][a-zA-Z0-9_-]*$/ (CloudFormation-style identifier)\",\n }),\n z.string().min(1),\n )\n .optional(),\n worker: WorkerConfigSchema.optional(),\n workers: z.record(z.string(), WorkerConfigSchema).optional(),\n })\n .refine(\n (data: { worker?: unknown; workers?: unknown }) =>\n (data.worker ?? data.workers) && !(data.worker && data.workers),\n { error: \"Must have either worker or workers, not both\" },\n );\n\nexport interface LoadConfigOptions {\n /** Selects `tamer/env/<env>.config.ts` when present (merged project layout). */\n env?: string;\n cwd?: string;\n}\n\nexport async function loadConfig(\n configPath?: string,\n options: LoadConfigOptions = {},\n): Promise<CfiConfig> {\n const cwd = options.cwd ?? process.cwd();\n const sources = resolveConfigSources(cwd, configPath, options.env);\n\n let raw: unknown;\n\n if (sources.mode === \"single\") {\n const mod = await import(sources.path);\n raw = mod.default;\n if (!raw) {\n throw new Error(`No default export in ${sources.path}`);\n }\n } else {\n const pMod = await import(sources.projectPath);\n const projectRaw = pMod.default;\n if (!projectRaw || typeof projectRaw !== \"object\") {\n throw new Error(`No default export in ${sources.projectPath}`);\n }\n let merged = projectRaw as Record<string, unknown>;\n if (sources.overlayPath) {\n const oMod = await import(sources.overlayPath);\n const overlayRaw = oMod.default;\n if (!overlayRaw || typeof overlayRaw !== \"object\") {\n throw new Error(\n `Env overlay must default-export an object: ${sources.overlayPath}`,\n );\n }\n const overlayObj = overlayRaw as Record<string, unknown>;\n const declaredEnv = overlayObj[TAMER_OVERLAY_ENV_KEY];\n if (declaredEnv !== undefined) {\n if (typeof declaredEnv !== \"string\") {\n throw new Error(\n `Env overlay ${sources.overlayPath}: ${TAMER_OVERLAY_ENV_KEY} must be a string`,\n );\n }\n if (options.env !== declaredEnv) {\n throw new Error(\n `Env overlay ${sources.overlayPath} sets ${TAMER_OVERLAY_ENV_KEY} \"${declaredEnv}\" but this load uses --env \"${options.env ?? \"(none)\"}\".`,\n );\n }\n }\n const { [TAMER_OVERLAY_ENV_KEY]: _strip, ...overlayRest } = overlayObj;\n merged = mergeProjectOverlay(merged, overlayRest);\n }\n raw = merged;\n }\n\n const parsed = CfiConfigSchema.safeParse(materializeCloudflareBindings(raw));\n if (!parsed.success) {\n throw new Error(`Invalid Tamer project config: ${parsed.error.message}`);\n }\n return parsed.data as CfiConfig;\n}\n\nexport async function getWorkers(\n config: CfiConfig,\n baseDir?: string,\n): Promise<[string, WorkerConfig][]> {\n const cwd = baseDir ?? process.cwd();\n\n if (\"worker\" in config && config.worker) {\n const w = await resolveWorkerConfigRef(config.worker, cwd);\n return [[\"default\", w]];\n }\n if (\"workers\" in config && config.workers) {\n const entries: [string, WorkerConfig][] = [];\n for (const [key, wc] of Object.entries(config.workers)) {\n entries.push([key, await resolveWorkerConfigRef(wc, cwd)]);\n }\n return entries;\n }\n return [];\n}\n\nasync function resolveWorkerConfigRef(\n wc: WorkerConfig,\n baseDir: string,\n): Promise<WorkerConfig> {\n if (!wc.config) return wc;\n const configPath = resolve(baseDir, wc.config);\n const mod = await import(configPath);\n const loaded = mod.default;\n if (!loaded) {\n throw new Error(`No default export in ${configPath}`);\n }\n return {\n ...loaded,\n path: wc.path,\n config: wc.config,\n } as WorkerConfig;\n}\n","/**\n * Wrangler-aligned Cloudflare credentials (same names as `wrangler` CLI).\n * @see https://developers.cloudflare.com/workers/wrangler/system-environment-variables/\n */\nexport function cloudflareAccountIdFromEnv(): string | undefined {\n return process.env.CLOUDFLARE_ACCOUNT_ID;\n}\n\nexport function cloudflareApiTokenFromEnv(): string {\n return process.env.CLOUDFLARE_API_TOKEN ?? \"\";\n}\n","/**\n * Pipelines v1 path segments (streams, sinks, SQL pipelines) expect **stream_id**\n * / **sink_id** as **exactly 32 lower-case hex characters** (no hyphens). The API\n * returns 400 if the URL contains a hyphenated UUID (36 chars) — see\n * `stream_id: String must contain exactly 32 character(s)`.\n *\n * State and list APIs may return ids with or without hyphens; we normalize to 32-hex\n * for GET/DELETE paths.\n */\nexport function pipelinesV1IdForPath(id: string): string {\n const c = id.trim().toLowerCase().replace(/-/g, \"\");\n if (!/^[0-9a-f]{32}$/.test(c)) {\n return id.trim();\n }\n return c;\n}\n","import type {\n CFD1ListResponse,\n CFR2ListResponse,\n CFKVListResponse,\n} from \"./CFApiClient.types.js\";\nimport { cloudflareApiTokenFromEnv } from \"../cloudflareEnv.js\";\nimport { pipelinesV1IdForPath } from \"./pipelinesV1PathId.js\";\n\nconst CF_API_BASE = \"https://api.cloudflare.com/client/v4\";\n\n/**\n * Renders the Cloudflare API `errors` / `messages` array into a single string\n * (message, error code, documentation URL, JSON pointer) for operator-friendly logs.\n */\nfunction describeCloudflareErrorItem(e: unknown): string {\n if (e == null) return \"null\";\n if (typeof e === \"string\") return e;\n if (typeof e !== \"object\") return String(e);\n const o = e as Record<string, unknown>;\n const parts: string[] = [];\n if (typeof o.message === \"string\" && o.message) parts.push(o.message);\n if (typeof o.code === \"number\") parts.push(`[code: ${o.code}]`);\n if (typeof o.code === \"string\" && o.code) parts.push(`[code: ${o.code}]`);\n if (typeof o.documentation_url === \"string\" && o.documentation_url) {\n parts.push(o.documentation_url);\n }\n const src = o.source;\n if (src && typeof src === \"object\" && \"pointer\" in src) {\n const p = (src as { pointer?: string }).pointer;\n if (typeof p === \"string\" && p) parts.push(`(field: ${p})`);\n }\n if (Array.isArray(o.error_chain) && o.error_chain.length > 0) {\n parts.push(\n `[chain: ${o.error_chain.map(describeCloudflareErrorItem).join(\" → \")}]`,\n );\n }\n if (parts.length) return parts.join(\" \");\n try {\n return JSON.stringify(e);\n } catch {\n return String(e);\n }\n}\n\nfunction formatCloudflareErrorBody(\n errors: unknown,\n messages: unknown,\n fallback: string,\n): string {\n const errList = formatCloudflareList(errors) || fallback;\n const msgList = formatCloudflareList(messages);\n if (msgList) return `${errList} — messages: ${msgList}`;\n return errList;\n}\n\nfunction formatCloudflareList(v: unknown): string {\n if (!Array.isArray(v) || v.length === 0) return \"\";\n return v.map(describeCloudflareErrorItem).join(\" | \");\n}\n\nexport class CFApiClient {\n private accountId: string;\n private apiToken: string;\n\n constructor(accountId: string, apiToken?: string) {\n this.accountId = accountId;\n this.apiToken = apiToken ?? cloudflareApiTokenFromEnv();\n if (!this.apiToken) {\n throw new Error(\"CLOUDFLARE_API_TOKEN is required\");\n }\n }\n\n getAccountId(): string {\n return this.accountId;\n }\n\n /** Lightweight account read — validates token + account scope. */\n async accountRead(): Promise<{ id: string; name: string }> {\n const data = await this.request<{ result: { id: string; name: string } }>(\n `/accounts/${this.accountId}`,\n );\n return data.result;\n }\n\n /**\n * Get a single Worker script by name (account-scoped, **not** dispatch).\n * Returns `undefined` when Cloudflare responds 404 so callers can treat it\n * as \"not deployed\" without try/catch on the message.\n *\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/get/\n */\n async workersScriptGet(\n scriptName: string,\n ): Promise<{ id: string; created_on?: string; modified_on?: string } | undefined> {\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}`;\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n \"Content-Type\": \"application/json\",\n },\n });\n if (res.status === 404) return undefined;\n const data = (await res.json()) as {\n success?: boolean;\n errors?: Array<{ message: string }>;\n result?: { id: string; created_on?: string; modified_on?: string };\n };\n if (!res.ok) {\n const msg =\n data?.errors?.map((e) => e.message).join(\"; \") ?? res.statusText;\n throw new Error(`CF API error (workers script get): ${msg}`);\n }\n return data.result;\n }\n\n /**\n * Upsert a plain-text secret binding on a Worker script.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/update/\n */\n async workersSecretPut(\n scriptName: string,\n secret: { name: string; text: string },\n ): Promise<{ name: string; type: \"secret_text\" }> {\n const data = await this.request<{\n result: { name: string; type: \"secret_text\" };\n }>(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets`,\n {\n method: \"PUT\",\n body: JSON.stringify({\n name: secret.name,\n text: secret.text,\n type: \"secret_text\",\n }),\n },\n );\n return data.result;\n }\n\n /**\n * List secret binding names on a Worker script. Values are write-only and\n * are not returned by the Cloudflare API.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/list/\n */\n async workersSecretsList(scriptName: string): Promise<string[]> {\n const data = await this.request<{\n result?: Array<{ name: string; type?: string }>;\n }>(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets`,\n );\n return (data.result ?? []).map((s) => s.name);\n }\n\n /**\n * Remove a secret binding from a Worker script.\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/methods/delete/\n */\n async workersSecretDelete(scriptName: string, name: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/scripts/${encodeURIComponent(scriptName)}/secrets/${encodeURIComponent(name)}`,\n { method: \"DELETE\" },\n );\n }\n\n private async request<T>(\n path: string,\n options: RequestInit = {}\n ): Promise<T> {\n const method = (options.method ?? \"GET\").toUpperCase();\n const url = `${CF_API_BASE}${path}`;\n const res = await fetch(url, {\n ...options,\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n });\n\n let parsed: unknown;\n try {\n parsed = await res.json();\n } catch {\n throw new Error(\n `CF API error: ${method} \\`${path}\\` → HTTP ${res.status} (response was not valid JSON)`,\n );\n }\n\n /** Some endpoints (e.g. R2 catalog disable) respond `200` with literal JSON `null`. */\n const data = (\n parsed !== null && typeof parsed === \"object\"\n ? parsed\n : {}\n ) as T & {\n success?: boolean;\n errors?: unknown[];\n messages?: unknown[];\n };\n\n const httpError = !res.ok;\n const bodySuccessFalse = data.success === false;\n if (httpError || bodySuccessFalse) {\n const detail = formatCloudflareErrorBody(\n data.errors,\n data.messages,\n res.statusText || \"no error array in body\",\n );\n throw new Error(\n `CF API error: ${method} \\`${path}\\` → HTTP ${res.status}. ${detail}`,\n );\n }\n return data;\n }\n\n async d1ListAll(): Promise<Array<{ uuid: string; name: string; created_at: string }>> {\n const all: Array<{ uuid: string; name: string; created_at: string }> = [];\n let page = 1;\n const perPage = 100;\n\n while (true) {\n const data = await this.request<CFD1ListResponse>(\n `/accounts/${this.accountId}/d1/database?per_page=${perPage}&page=${page}`\n );\n all.push(...data.result);\n const info = data.result_info;\n if (!info || info.count < perPage) break;\n page++;\n }\n return all;\n }\n\n async r2ListAll(): Promise<Array<{ name: string; creation_date: string }>> {\n const all: Array<{ name: string; creation_date: string }> = [];\n const perPage = 100;\n let cursor: string | undefined;\n\n while (true) {\n const qs = new URLSearchParams({ per_page: String(perPage) });\n if (cursor) qs.set(\"cursor\", cursor);\n const data = await this.request<CFR2ListResponse>(\n `/accounts/${this.accountId}/r2/buckets?${qs.toString()}`\n );\n const buckets = data.result?.buckets ?? [];\n all.push(\n ...buckets.map((b) => ({\n name: b.name ?? \"\",\n creation_date: b.creation_date ?? \"\",\n })),\n );\n const next = data.result_info?.cursor;\n if (!next) break;\n cursor = next;\n }\n return all;\n }\n\n async kvListAll(): Promise<Array<{ id: string; title: string }>> {\n const all: Array<{ id: string; title: string }> = [];\n let page = 1;\n const perPage = 100;\n\n while (true) {\n const data = await this.request<CFKVListResponse>(\n `/accounts/${this.accountId}/storage/kv/namespaces?per_page=${perPage}&page=${page}`\n );\n all.push(...data.result);\n const info = data.result_info;\n if (!info || info.count < perPage) break;\n page++;\n }\n return all;\n }\n\n async d1Create(name: string): Promise<{ uuid: string }> {\n const data = await this.request<{ result: { uuid: string } }>(\n `/accounts/${this.accountId}/d1/database`,\n {\n method: \"POST\",\n body: JSON.stringify({ name }),\n }\n );\n return data.result;\n }\n\n async r2Create(name: string, location: string = \"auto\"): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2/buckets`,\n {\n method: \"POST\",\n body: JSON.stringify({ name, location }),\n }\n );\n }\n\n async kvCreate(title: string): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/accounts/${this.accountId}/storage/kv/namespaces`,\n {\n method: \"POST\",\n body: JSON.stringify({ title }),\n }\n );\n return data.result;\n }\n\n async d1Delete(databaseId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/d1/database/${databaseId}`,\n { method: \"DELETE\" }\n );\n }\n\n /**\n * Run SQL against a D1 database (HTTP API).\n * @see https://developers.cloudflare.com/d1/build-with-d1/rest-api/\n */\n async d1Query(\n databaseId: string,\n sql: string,\n params: unknown[] = [],\n ): Promise<{ rows: Array<Record<string, unknown>> }> {\n const data = await this.request<{\n result?: Array<{\n results?: Array<Record<string, unknown>>;\n success?: boolean;\n }>;\n }>(`/accounts/${this.accountId}/d1/database/${databaseId}/query`, {\n method: \"POST\",\n body: JSON.stringify({ sql, params }),\n });\n const rows = data.result?.[0]?.results ?? [];\n return { rows };\n }\n\n async r2Delete(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2/buckets/${bucketName}`,\n { method: \"DELETE\" }\n );\n }\n\n /**\n * Download an object from R2 (HTTP API).\n * @see https://developers.cloudflare.com/api/resources/r2/subresources/buckets/subresources/objects/methods/get/\n */\n async r2GetObject(bucketName: string, objectKey: string): Promise<ArrayBuffer> {\n const pathEncoded = objectKey\n .split(\"/\")\n .map((seg) => encodeURIComponent(seg))\n .join(\"/\");\n const url = `${CF_API_BASE}/accounts/${this.accountId}/r2/buckets/${encodeURIComponent(bucketName)}/objects/${pathEncoded}`;\n const res = await fetch(url, {\n headers: { Authorization: `Bearer ${this.apiToken}` },\n });\n if (!res.ok) {\n let errMsg = res.statusText;\n try {\n const data = (await res.json()) as {\n errors?: Array<{ message: string }>;\n };\n errMsg = data?.errors?.map((e) => e.message).join(\"; \") ?? errMsg;\n } catch {\n /* binary or empty */\n }\n throw new Error(`CF API error (R2 get): ${errMsg}`);\n }\n return res.arrayBuffer();\n }\n\n async kvDelete(namespaceId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/storage/kv/namespaces/${namespaceId}`,\n { method: \"DELETE\" }\n );\n }\n\n // ── Queues ───────────────────────────────────────────────────────────────\n\n /**\n * List every Cloudflare Queue in the account.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/list/\n */\n async queuesListAll(): Promise<\n Array<{ queue_id: string; queue_name: string; created_on?: string; modified_on?: string }>\n > {\n const all: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{\n queue_id: string;\n queue_name: string;\n created_on?: string;\n modified_on?: string;\n }>;\n result_info?: { count?: number; total_count?: number };\n }>(\n `/accounts/${this.accountId}/queues?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page++;\n }\n return all;\n }\n\n /**\n * Create a new Cloudflare Queue.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/create/\n */\n async queueCreate(\n queueName: string,\n ): Promise<{ queue_id: string; queue_name: string }> {\n const data = await this.request<{\n result: { queue_id: string; queue_name: string };\n }>(`/accounts/${this.accountId}/queues`, {\n method: \"POST\",\n body: JSON.stringify({ queue_name: queueName }),\n });\n return data.result;\n }\n\n /**\n * Delete a Cloudflare Queue by id.\n * @see https://developers.cloudflare.com/api/resources/queues/methods/delete/\n */\n async queueDelete(queueId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/queues/${encodeURIComponent(queueId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Hyperdrive ───────────────────────────────────────────────────────────\n\n /**\n * List every Hyperdrive config in the account.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/list/\n */\n async hyperdriveListAll(): Promise<\n Array<{\n id: string;\n name: string;\n origin?: { scheme?: string; host?: string; database?: string; port?: number; user?: string };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: string;\n name: string;\n origin?: {\n scheme?: string;\n host?: string;\n database?: string;\n port?: number;\n user?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n }>;\n }>(`/accounts/${this.accountId}/hyperdrive/configs`);\n return data.result ?? [];\n }\n\n /**\n * Create a Hyperdrive config.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/create/\n */\n async hyperdriveCreate(body: {\n name: string;\n origin: {\n scheme: string;\n host: string;\n port?: number;\n database: string;\n user: string;\n password: string;\n access_client_id?: string;\n access_client_secret?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n mtls?: { ca_certificate_id?: string; mtls_certificate_id?: string };\n }): Promise<{ id: string; name: string }> {\n const data = await this.request<{ result: { id: string; name: string } }>(\n `/accounts/${this.accountId}/hyperdrive/configs`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Patch an existing Hyperdrive configuration in place. Cloudflare accepts\n * partial updates here (true `PATCH`), so callers may send only the\n * fields that drifted. Origin patches must include the full origin\n * payload (the password is write-only and never returned, so Tamer\n * reads it back from the resource config every apply).\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/edit/\n */\n async hyperdrivePatch(\n configId: string,\n body: {\n name?: string;\n origin?: {\n scheme?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n access_client_id?: string;\n access_client_secret?: string;\n };\n caching?: { disabled?: boolean; max_age?: number; stale_while_revalidate?: number };\n mtls?: { ca_certificate_id?: string; mtls_certificate_id?: string };\n origin_connection_limit?: number;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/hyperdrive/configs/${encodeURIComponent(configId)}`,\n { method: \"PATCH\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete a Hyperdrive config by id.\n * @see https://developers.cloudflare.com/api/resources/hyperdrive/subresources/configs/methods/delete/\n */\n async hyperdriveDelete(configId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/hyperdrive/configs/${encodeURIComponent(configId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Vectorize (v2) ───────────────────────────────────────────────────────\n\n /**\n * List every Vectorize index in the account (v2 storage subsystem).\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/list/\n */\n async vectorizeListAll(): Promise<\n Array<{\n id?: string;\n name: string;\n description?: string;\n config?: { dimensions: number; metric: string };\n created_on?: string;\n modified_on?: string;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id?: string;\n name: string;\n description?: string;\n config?: { dimensions: number; metric: string };\n created_on?: string;\n modified_on?: string;\n }>;\n }>(`/accounts/${this.accountId}/vectorize/v2/indexes`);\n return data.result ?? [];\n }\n\n /**\n * Create a Vectorize v2 index. `dimensions` and `metric` are immutable.\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/create/\n */\n async vectorizeCreate(body: {\n name: string;\n description?: string;\n config: { dimensions: number; metric: string };\n }): Promise<{ id?: string; name: string }> {\n const data = await this.request<{ result: { id?: string; name: string } }>(\n `/accounts/${this.accountId}/vectorize/v2/indexes`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete a Vectorize index by name.\n * @see https://developers.cloudflare.com/api/resources/vectorize/subresources/indexes/methods/delete/\n */\n async vectorizeDelete(indexName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/vectorize/v2/indexes/${encodeURIComponent(indexName)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── AI Gateway ───────────────────────────────────────────────────────────\n\n /**\n * List every AI Gateway in the account.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/list/\n */\n async aiGatewayListAll(): Promise<\n Array<{\n id: string;\n cache_ttl?: number;\n cache_invalidate_on_update?: boolean;\n collect_logs?: boolean;\n rate_limiting_interval?: number;\n rate_limiting_limit?: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n created_at?: string;\n modified_at?: string;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: string;\n cache_ttl?: number;\n cache_invalidate_on_update?: boolean;\n collect_logs?: boolean;\n rate_limiting_interval?: number;\n rate_limiting_limit?: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n created_at?: string;\n modified_at?: string;\n }>;\n }>(`/accounts/${this.accountId}/ai-gateway/gateways?per_page=100`);\n return data.result ?? [];\n }\n\n /**\n * Create an AI Gateway. The gateway `id` is user-supplied and acts as both\n * primary key and routing slug under `https://gateway.ai.cloudflare.com/`.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/create/\n */\n async aiGatewayCreate(body: {\n id: string;\n cache_ttl: number;\n cache_invalidate_on_update: boolean;\n collect_logs: boolean;\n rate_limiting_interval: number;\n rate_limiting_limit: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n }): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/accounts/${this.accountId}/ai-gateway/gateways`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Update an existing AI Gateway in place. The Cloudflare API uses `PUT`\n * (not PATCH) and is full-replace on the listed fields, so callers must\n * supply the complete desired state — Tamer's `apply` reads the recorded\n * state row and merges declared overrides before calling this.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/update/\n */\n async aiGatewayUpdate(\n gatewayId: string,\n body: {\n cache_ttl: number;\n cache_invalidate_on_update: boolean;\n collect_logs: boolean;\n rate_limiting_interval: number;\n rate_limiting_limit: number;\n rate_limiting_technique?: \"fixed\" | \"sliding\";\n authentication?: boolean;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/ai-gateway/gateways/${encodeURIComponent(gatewayId)}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete an AI Gateway by id.\n * @see https://developers.cloudflare.com/api/resources/ai_gateway/methods/delete/\n */\n async aiGatewayDelete(gatewayId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/ai-gateway/gateways/${encodeURIComponent(gatewayId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Pipelines (V1, SQL-based) ────────────────────────────────────────────\n\n /**\n * List every Pipeline in the account (paginated, 100/page). Uses the V1\n * SQL pipelines endpoint; the deprecated `/accounts/{id}/pipelines`\n * (HTTP/binding sources) is not used.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/list_v1/\n */\n async pipelineListAll(): Promise<\n Array<{\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n }>\n > {\n type Row = {\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n };\n const all: Row[] = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Row[];\n result_info?: { count?: number; total_count?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/pipelines?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a Pipeline. Server assigns the `id`; `name` is user-supplied\n * and uniquely identifies the pipeline within the account.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/create_v1/\n */\n async pipelineCreate(body: {\n name: string;\n sql: string;\n }): Promise<{\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n }> {\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n sql: string;\n status?: string;\n created_at?: string;\n modified_at?: string;\n };\n }>(`/accounts/${this.accountId}/pipelines/v1/pipelines`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Delete a Pipeline by server-assigned id.\n * @see https://developers.cloudflare.com/api/resources/pipelines/methods/delete_v1/\n */\n async pipelineDelete(pipelineId: string): Promise<void> {\n const pathId = pipelinesV1IdForPath(pipelineId);\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/pipelines/${encodeURIComponent(pathId)}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── Pipelines v1 streams / sinks (Iceberg, Logpush) ─────────────────────\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/list/\n */\n async pipelinesV1StreamListAll(): Promise<\n Array<{ id: string; name: string; endpoint?: string }>\n > {\n const all: Array<{ id: string; name: string; endpoint?: string }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{ id: string; name: string; endpoint?: string }>;\n result_info?: { count?: number; total_count?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/streams?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/create/\n */\n async pipelinesV1StreamCreate(\n body: Record<string, unknown>,\n ): Promise<{\n id: string;\n name: string;\n endpoint?: string;\n }> {\n const data = await this.request<{\n result: { id: string; name: string; endpoint?: string };\n }>(`/accounts/${this.accountId}/pipelines/v1/streams`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Path id: 32 lower-case hex chars (no hyphens). The dashboard issues a\n * plain `DELETE` with no query string; pass `{ force: true }` only if the API\n * docs require it for your case.\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/streams/methods/delete/\n */\n async pipelinesV1StreamDelete(\n streamId: string,\n query?: { force?: boolean },\n ): Promise<void> {\n const pathId = pipelinesV1IdForPath(streamId);\n const qs = new URLSearchParams();\n if (query?.force) qs.set(\"force\", \"true\");\n const tail = qs.toString() ? `?${qs.toString()}` : \"\";\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/streams/${encodeURIComponent(pathId)}${tail}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/list/\n */\n async pipelinesV1SinkListAll(): Promise<\n Array<{ id: string; name: string; type: string }>\n > {\n const all: Array<{ id: string; name: string; type: string }> = [];\n let page = 1;\n const perPage = 100;\n while (true) {\n const data = await this.request<{\n result?: Array<{ id: string; name: string; type: string }>;\n result_info?: { count?: number };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/sinks?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * R2 Data Catalog sink `config` includes `table_name` and `namespace` as\n * Cloudflare has registered them (may differ from the name sent at create).\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/get/\n */\n async pipelinesV1SinkGet(sinkId: string): Promise<{\n id: string;\n name: string;\n type: string;\n config?: Record<string, unknown>;\n }> {\n const pathId = pipelinesV1IdForPath(sinkId);\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n type: string;\n config?: Record<string, unknown>;\n };\n }>(\n `/accounts/${this.accountId}/pipelines/v1/sinks/${encodeURIComponent(pathId)}`,\n );\n return data.result;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/create/\n */\n async pipelinesV1SinkCreate(\n body: Record<string, unknown>,\n ): Promise<{ id: string; name: string; type: string }> {\n const data = await this.request<{\n result: { id: string; name: string; type: string };\n }>(`/accounts/${this.accountId}/pipelines/v1/sinks`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Path id: 32 lower-case hex chars (no hyphens). Optional `{ force: true }`\n * matches `?force=true` when the product requires it (e.g. some sink types).\n *\n * @see https://developers.cloudflare.com/api/resources/pipelines/subresources/sinks/methods/delete/\n */\n async pipelinesV1SinkDelete(\n sinkId: string,\n query?: { force?: boolean },\n ): Promise<void> {\n const pathId = pipelinesV1IdForPath(sinkId);\n const qs = new URLSearchParams();\n if (query?.force) qs.set(\"force\", \"true\");\n const tail = qs.toString() ? `?${qs.toString()}` : \"\";\n await this.request(\n `/accounts/${this.accountId}/pipelines/v1/sinks/${encodeURIComponent(pathId)}${tail}`,\n { method: \"DELETE\" },\n );\n }\n\n // ── R2 Data Catalog (Iceberg) ────────────────────────────────────────────\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/list/\n */\n async r2DataCatalogList(): Promise<{\n warehouses: Array<{\n id: string;\n bucket: string;\n name: string;\n status?: string;\n }>;\n }> {\n const data = await this.request<{\n result?: {\n warehouses: Array<{\n id: string;\n bucket: string;\n name: string;\n status?: string;\n }>;\n };\n }>(`/accounts/${this.accountId}/r2-catalog`);\n return { warehouses: data.result?.warehouses ?? [] };\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/enable/\n */\n async r2DataCatalogEnable(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/enable`,\n { method: \"POST\" },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/update/\n * (Store catalog credentials)\n */\n async r2DataCatalogStoreCredential(\n bucketName: string,\n token: string,\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/credential`,\n {\n method: \"POST\",\n body: JSON.stringify({ token }),\n },\n );\n }\n\n /**\n * Deactivates the R2 Data Catalog for a bucket (metadata files remain in R2\n * until the bucket is emptied or objects are removed). Next `apply` will\n * re-enable the catalog as part of `pipelinesAuto` when needed.\n *\n * @see https://developers.cloudflare.com/api/resources/r2_data_catalog/methods/disable/\n */\n async r2DataCatalogDisable(bucketName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/r2-catalog/${encodeURIComponent(bucketName)}/disable`,\n { method: \"POST\" },\n );\n }\n\n /**\n * List every Workflow registered on the account (paginated, 100/page).\n * Cloudflare returns the configured class + script binding plus\n * aggregate instance counts; we only consume the registration metadata.\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/list/\n */\n async workflowListAll(): Promise<\n Array<{\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n created_on?: string;\n modified_on?: string;\n triggered_on?: string;\n }>\n > {\n type Item = {\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n created_on?: string;\n modified_on?: string;\n triggered_on?: string;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/workflows?page=${page}&per_page=100`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create or update a Workflow registration. Cloudflare's `PUT` is upsert:\n * if `workflow_name` exists it patches `class_name` / `script_name` /\n * `limits`, otherwise it creates a new one. The bound class must already\n * be deployed in `script_name`'s code (PUT against an unknown class\n * succeeds at registration time but fails at first instance create).\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/update/\n */\n async workflowUpsert(\n name: string,\n body: {\n class_name: string;\n script_name: string;\n limits?: { steps?: number };\n },\n ): Promise<{\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n version_id?: string;\n created_on?: string;\n modified_on?: string;\n }> {\n const data = await this.request<{\n result: {\n id: string;\n name: string;\n class_name: string;\n script_name: string;\n version_id?: string;\n created_on?: string;\n modified_on?: string;\n };\n }>(\n `/accounts/${this.accountId}/workflows/${encodeURIComponent(name)}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete a Workflow registration by name. Per Cloudflare's docs this only\n * removes the workflow itself — the worker that hosts the class is\n * untouched and existing in-flight instances continue to run.\n * @see https://developers.cloudflare.com/api/resources/workflows/methods/delete/\n */\n async workflowDelete(name: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workflows/${encodeURIComponent(name)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List every Secrets Store store on the account (paginated, 100/page).\n * Stores are account-scoped containers; their internal secret entries\n * are listed via {@link secretsStoreSecretListAll}.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/list/\n */\n async secretsStoreListAll(): Promise<\n Array<{\n id: string;\n name: string;\n account_id?: string;\n created?: string;\n modified?: string;\n }>\n > {\n type Item = {\n id: string;\n name: string;\n account_id?: string;\n created?: string;\n modified?: string;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(\n `/accounts/${this.accountId}/secrets_store/stores?page=${page}&per_page=100`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a new Secrets Store. Per the API a store name uniquely identifies\n * the container within an account but is **not** itself a primary key —\n * the assigned `id` is. Tamer enforces uniqueness via the derived\n * `sec-{logical}-t-{tenantId}-{env}` name and short-circuits to the\n * existing id when it finds a match in `secretsStoreListAll`.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/create/\n */\n async secretsStoreCreate(\n name: string,\n ): Promise<{ id: string; name: string }> {\n const data = await this.request<{\n result: { id: string; name: string };\n }>(`/accounts/${this.accountId}/secrets_store/stores`, {\n method: \"POST\",\n body: JSON.stringify({ name }),\n });\n return data.result;\n }\n\n /**\n * Delete a Secrets Store by id. Cloudflare cascades the deletion to all\n * secrets inside the store, so callers should ensure no live worker is\n * still binding into this store before invoking.\n * @see https://developers.cloudflare.com/api/resources/secrets_store/subresources/stores/methods/delete/\n */\n async secretsStoreDelete(storeId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/secrets_store/stores/${encodeURIComponent(storeId)}`,\n { method: \"DELETE\" },\n );\n }\n\n async dispatchNamespaceListAll(): Promise<\n Array<{ namespace_name: string; script_count?: number }>\n > {\n const data = await this.request<{\n result: Array<{ namespace_name: string; script_count?: number }>;\n }>(`/accounts/${this.accountId}/workers/dispatch/namespaces`);\n return data.result ?? [];\n }\n\n async dispatchNamespaceCreate(namespaceName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/dispatch/namespaces`,\n {\n method: \"POST\",\n body: JSON.stringify({ name: namespaceName }),\n },\n );\n }\n\n async dispatchNamespaceDelete(namespaceName: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(namespaceName)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * Upload a user Worker module to a Workers for Platforms dispatch namespace (multipart).\n * @see https://developers.cloudflare.com/api/operations/namespace-worker-script-upload-worker-module\n */\n async dispatchNamespaceScriptPut(\n dispatchNamespace: string,\n scriptName: string,\n formData: FormData,\n ): Promise<void> {\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts/${encodeURIComponent(scriptName)}`;\n const res = await fetch(url, {\n method: \"PUT\",\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n },\n body: formData,\n });\n const data = (await res.json()) as { success?: boolean; errors?: Array<{ message: string }> };\n if (!res.ok) {\n const errMsg =\n data?.errors?.map((e) => e.message).join(\"; \") ?? res.statusText;\n throw new Error(`CF API error: ${errMsg}`);\n }\n }\n\n /**\n * List every script inside a dispatch namespace.\n * @see https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/list/\n */\n async dispatchNamespaceScriptList(\n dispatchNamespace: string,\n ): Promise<Array<{ id: string }>> {\n const data = await this.request<{\n result?: Array<{ id: string }>;\n }>(\n `/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts`,\n );\n return data.result ?? [];\n }\n\n /**\n * Remove a script from a Workers for Platforms dispatch namespace.\n * @see https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/delete/\n */\n async dispatchNamespaceScriptDelete(\n dispatchNamespace: string,\n scriptName: string,\n options?: { force?: boolean },\n ): Promise<void> {\n const q = options?.force ? \"?force=true\" : \"\";\n const url = `${CF_API_BASE}/accounts/${this.accountId}/workers/dispatch/namespaces/${encodeURIComponent(dispatchNamespace)}/scripts/${encodeURIComponent(scriptName)}${q}`;\n const res = await fetch(url, {\n method: \"DELETE\",\n headers: {\n Authorization: `Bearer ${this.apiToken}`,\n },\n });\n if (!res.ok) {\n let errMsg = res.statusText;\n try {\n const data = (await res.json()) as {\n errors?: Array<{ message: string }>;\n };\n errMsg = data?.errors?.map((e) => e.message).join(\"; \") ?? errMsg;\n } catch {\n /* empty body */\n }\n throw new Error(`CF API error: ${errMsg}`);\n }\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/list/\n */\n async zoneWorkerRoutesList(\n zoneId: string,\n ): Promise<Array<{ id: string; pattern: string; script: string }>> {\n const data = await this.request<{\n result?: Array<{ id: string; pattern: string; script: string }>;\n }>(`/zones/${zoneId}/workers/routes`);\n return data.result ?? [];\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/create/\n */\n async zoneWorkerRouteCreate(\n zoneId: string,\n body: { pattern: string; script: string },\n ): Promise<{ id: string }> {\n const data = await this.request<{ result: { id: string } }>(\n `/zones/${zoneId}/workers/routes`,\n {\n method: \"POST\",\n body: JSON.stringify(body),\n },\n );\n return data.result;\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/delete/\n */\n async zoneWorkerRouteDelete(zoneId: string, routeId: string): Promise<void> {\n await this.request(\n `/zones/${zoneId}/workers/routes/${encodeURIComponent(routeId)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List every DNS record on a zone (paginated, 100/page). Returns the\n * subset of fields Tamer cares about — the full Cloudflare object also\n * carries `meta`, `proxiable`, `created_on`, `modified_on`, etc., none of\n * which we persist in state.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/list/\n */\n async zoneDnsRecordListAll(\n zoneId: string,\n ): Promise<\n Array<{\n id: string;\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string | null;\n }>\n > {\n type Item = {\n id: string;\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string | null;\n };\n const all: Item[] = [];\n let page = 1;\n while (true) {\n const data = await this.request<{\n result?: Item[];\n result_info?: { total_pages?: number; page?: number };\n }>(`/zones/${zoneId}/dns_records?page=${page}&per_page=100`);\n const batch = data.result ?? [];\n all.push(...batch);\n const totalPages = data.result_info?.total_pages ?? 1;\n if (page >= totalPages || batch.length === 0) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create a DNS record on a zone. The Cloudflare API rejects duplicate\n * `(type, name, content)` triples for record types where that combination\n * is meaningful (CNAME, A, AAAA), so callers should pre-check via\n * {@link zoneDnsRecordListAll}.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/create/\n */\n async zoneDnsRecordCreate(\n zoneId: string,\n body: {\n type: string;\n name: string;\n content: string;\n ttl?: number;\n proxied?: boolean;\n priority?: number;\n comment?: string;\n },\n ): Promise<{ id: string; type: string; name: string; content: string }> {\n const data = await this.request<{\n result: { id: string; type: string; name: string; content: string };\n }>(`/zones/${zoneId}/dns_records`, {\n method: \"POST\",\n body: JSON.stringify(body),\n });\n return data.result;\n }\n\n /**\n * Patch a DNS record in place. Cloudflare's PATCH endpoint accepts any\n * subset of mutable fields (`content`, `ttl`, `proxied`, `priority`,\n * `comment`) but rejects `type` changes — Tamer falls back to\n * delete-and-recreate when the type drifts.\n *\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/edit/\n */\n async zoneDnsRecordPatch(\n zoneId: string,\n recordId: string,\n body: Partial<{\n type: string;\n name: string;\n content: string;\n ttl: number;\n proxied: boolean;\n priority: number;\n comment: string;\n }>,\n ): Promise<void> {\n await this.request(\n `/zones/${zoneId}/dns_records/${encodeURIComponent(recordId)}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(body),\n },\n );\n }\n\n /**\n * @see https://developers.cloudflare.com/api/resources/dns/subresources/records/methods/delete/\n */\n async zoneDnsRecordDelete(zoneId: string, recordId: string): Promise<void> {\n await this.request(\n `/zones/${zoneId}/dns_records/${encodeURIComponent(recordId)}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * Look up zones by exact name.\n *\n * Account-scoped tokens with `Zone Read` see every zone under the account.\n * Returns an array because Cloudflare allows the same name across accounts;\n * the caller normally takes `[0]`.\n *\n * @see https://developers.cloudflare.com/api/operations/zones-get\n */\n async zonesListByName(\n name: string,\n ): Promise<Array<{ id: string; name: string }>> {\n const qs = new URLSearchParams({\n name,\n \"account.id\": this.accountId,\n per_page: \"50\",\n });\n const data = await this.request<{\n result?: Array<{ id: string; name: string }>;\n }>(`/zones?${qs.toString()}`);\n return data.result ?? [];\n }\n\n /**\n * List account-scoped Logpush jobs (includes `workers_trace_events`).\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/list/\n */\n async logpushAccountJobsList(): Promise<\n Array<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n error_message?: string | null;\n }>\n > {\n const data = await this.request<{\n result?: Array<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n error_message?: string | null;\n }>;\n }>(`/accounts/${this.accountId}/logpush/jobs`);\n return data.result ?? [];\n }\n\n /**\n * Fetch one account-scoped Logpush job (includes `destination_conf`).\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/get/\n */\n async logpushAccountJobGet(jobId: number): Promise<{\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n output_options?: Record<string, unknown>;\n }> {\n const data = await this.request<{\n result?: {\n id: number;\n name?: string;\n dataset?: string;\n enabled?: boolean;\n destination_conf?: string;\n filter?: string;\n output_options?: Record<string, unknown>;\n };\n }>(`/accounts/${this.accountId}/logpush/jobs/${jobId}`);\n if (!data.result?.id) {\n throw new Error(\n `Logpush job GET ${jobId}: missing result (job may not exist on this account)`,\n );\n }\n return data.result;\n }\n\n /**\n * Create an account Logpush job. Caller supplies `destination_conf` and dataset.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/create/\n */\n async logpushAccountJobCreate(body: {\n name: string;\n dataset: string;\n destination_conf: string;\n enabled?: boolean;\n filter?: string;\n output_options?: Record<string, unknown>;\n }): Promise<{ id: number }> {\n const data = await this.request<{ result: { id: number } }>(\n `/accounts/${this.accountId}/logpush/jobs`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Update mutable Logpush job fields in place.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/update/\n */\n async logpushAccountJobUpdate(\n jobId: number,\n body: {\n destination_conf: string;\n enabled?: boolean;\n filter?: string;\n output_options?: Record<string, unknown>;\n },\n ): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/logpush/jobs/${jobId}`,\n { method: \"PUT\", body: JSON.stringify(body) },\n );\n }\n\n /**\n * Delete a Logpush job by numeric id.\n * @see https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/methods/delete/\n */\n async logpushAccountJobDelete(jobId: number): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/logpush/jobs/${jobId}`,\n { method: \"DELETE\" },\n );\n }\n\n /**\n * List all permission groups for account-owned API tokens (paginated).\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/subresources/permission_groups/methods/list/\n */\n async accountTokenPermissionGroupsListAll(): Promise<\n Array<{ id: string; name: string; scopes?: string[] }>\n > {\n const all: Array<{ id: string; name: string; scopes?: string[] }> = [];\n const seen = new Set<string>();\n let page = 1;\n const perPage = 100;\n /** Failsafe: pagination must always terminate even if the API omits `total_count` or repeats pages. */\n const maxPage = 500;\n while (true) {\n if (page > maxPage) {\n throw new Error(\n `Account token permission groups: exceeded ${maxPage} pages (partial count ${all.length}) — ` +\n `refusing to paginate further (check Cloudflare API or file a bug)`,\n );\n }\n const data = await this.request<{\n result?: Array<{ id: string; name: string; scopes?: string[] }>;\n result_info?: {\n per_page?: number;\n count?: number;\n total_count?: number;\n };\n }>(\n `/accounts/${this.accountId}/tokens/permission_groups?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n if (batch.length === 0) break;\n\n const newRows = batch.filter((g) => g.id && !seen.has(g.id));\n for (const g of newRows) {\n seen.add(g.id);\n }\n if (newRows.length === 0) {\n break;\n }\n all.push(...newRows);\n\n if (batch.length < perPage) break;\n const total = data.result_info?.total_count;\n if (typeof total === \"number\" && all.length >= total) break;\n page++;\n }\n return all;\n }\n\n /**\n * List all account-owned API tokens (paginated).\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/list/\n */\n async accountTokenListAll(): Promise<\n Array<{\n id: string;\n name?: string;\n status?: string;\n }>\n > {\n type Row = { id: string; name?: string; status?: string };\n const all: Row[] = [];\n let page = 1;\n const perPage = 50;\n const maxPage = 500;\n while (page <= maxPage) {\n const data = await this.request<{\n result?: Row[];\n result_info?: {\n page?: number;\n per_page?: number;\n total_count?: number;\n };\n }>(\n `/accounts/${this.accountId}/tokens?per_page=${perPage}&page=${page}`,\n );\n const batch = data.result ?? [];\n all.push(...batch);\n const total = data.result_info?.total_count;\n if (typeof total === \"number\" && all.length >= total) break;\n if (batch.length < perPage) break;\n page += 1;\n }\n return all;\n }\n\n /**\n * Create an account-owned API token. `result.value` is only returned on create.\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/create/\n */\n async accountTokenCreate(body: {\n name: string;\n policies: Array<{\n effect: \"allow\" | \"deny\";\n permission_groups: Array<{ id: string }>;\n resources: Record<string, string> | Record<string, Record<string, string>>;\n }>;\n }): Promise<{ id: string; value?: string }> {\n const data = await this.request<{ result: { id: string; value?: string } }>(\n `/accounts/${this.accountId}/tokens`,\n { method: \"POST\", body: JSON.stringify(body) },\n );\n return data.result;\n }\n\n /**\n * Delete (revoke) an account-owned API token.\n * @see https://developers.cloudflare.com/api/resources/accounts/subresources/tokens/methods/delete/\n */\n async accountTokenDelete(tokenId: string): Promise<void> {\n await this.request(\n `/accounts/${this.accountId}/tokens/${encodeURIComponent(tokenId)}`,\n { method: \"DELETE\" },\n );\n }\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\n\n/** Max audit rows retained per secret name (oldest dropped on insert). */\nexport const SECRET_HISTORY_CAP = 50;\n\n/**\n * Account-scoped D1 database for encrypted secrets (`tamer-secrets`).\n * Each env's secrets are isolated by row key: `{env}:{secretName}`.\n */\nexport function tamerSecretsDatabaseName(): string {\n return \"tamer-secrets\";\n}\n\n/** Row key for a secret in the shared D1: `{env}:{secretName}`. */\nexport function secretRowKey(env: string, secretName: string): string {\n return `${env}:${secretName}`;\n}\n\nexport async function findTamerSecretsDatabaseUuid(\n api: CFApiClient,\n): Promise<string | undefined> {\n const name = tamerSecretsDatabaseName();\n const all = await api.d1ListAll();\n return all.find((d) => d.name === name)?.uuid;\n}\n\nconst SECRETS_TABLE_DDL = `CREATE TABLE IF NOT EXISTS secrets (\n name TEXT PRIMARY KEY,\n ciphertext BLOB NOT NULL,\n iv BLOB NOT NULL,\n wrapped_dek BLOB NOT NULL,\n dek_iv BLOB NOT NULL,\n value_hash TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n updated_by TEXT\n)`;\n\nconst SECRET_HISTORY_TABLE_DDL = `CREATE TABLE IF NOT EXISTS secret_history (\n name TEXT NOT NULL,\n value_hash TEXT NOT NULL,\n updated_at TEXT NOT NULL,\n updated_by TEXT\n)`;\n\n/**\n * Create `tamer-secrets` (account-scoped) if missing and ensure `secrets` /\n * `secret_history` tables. Idempotent — safe to call on every bootstrap or\n * first vault touch.\n */\nexport async function ensureTamerSecretsDatabase(\n api: CFApiClient,\n): Promise<string> {\n let uuid = await findTamerSecretsDatabaseUuid(api);\n if (!uuid) {\n const created = await api.d1Create(tamerSecretsDatabaseName());\n uuid = created.uuid;\n }\n\n await api.d1Query(uuid, SECRETS_TABLE_DDL);\n await api.d1Query(uuid, SECRET_HISTORY_TABLE_DDL);\n\n return uuid;\n}\n\n/**\n * Delete all secret rows for a specific env from the shared account-scoped D1.\n * Used by `tamer destroy --wipe-metadata`.\n */\nexport async function deleteEnvSecretRows(\n api: CFApiClient,\n env: string,\n): Promise<boolean> {\n const uuid = await findTamerSecretsDatabaseUuid(api);\n if (!uuid) return false;\n await api.d1Query(\n uuid,\n `DELETE FROM secrets WHERE name LIKE ?`,\n [`${env}:%`],\n );\n await api.d1Query(\n uuid,\n `DELETE FROM secret_history WHERE name LIKE ?`,\n [`${env}:%`],\n );\n return true;\n}\n","import type { MasterKey } from \"./types.js\";\n\nexport const MASTER_KEY_BYTE_LENGTH = 32;\n\nconst MASTER_KEY_ENV_PREFIX = \"TAMER_SECRETS_KEY_\";\n\n/** Env var name for the per-env master key (e.g. `TAMER_SECRETS_KEY_dev`). */\nexport function masterKeyEnvVarName(env: string): string {\n return `${MASTER_KEY_ENV_PREFIX}${env}`;\n}\n\n/** Generate a fresh 256-bit master key as base64 (print once, store externally). */\nexport function generateMasterKey(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(MASTER_KEY_BYTE_LENGTH));\n return bytesToBase64(bytes);\n}\n\n/** Parse and validate a base64 master key string into raw key material. */\nexport function parseMasterKey(base64: string): MasterKey {\n const trimmed = base64.trim();\n if (!trimmed) {\n throw new Error(\"secrets: master key must be a non-empty base64 string\");\n }\n\n const bytes = base64ToBytes(trimmed);\n\n if (bytes.length !== MASTER_KEY_BYTE_LENGTH) {\n throw new Error(\n `secrets: master key must decode to ${MASTER_KEY_BYTE_LENGTH} bytes (got ${bytes.length})`,\n );\n }\n\n return bytes;\n}\n\n/**\n * Read the master key for `env` from `process.env`.\n * Never logs or returns the env var name together with the key value.\n */\nexport function readMasterKeyFromEnv(env: string): MasterKey {\n const varName = masterKeyEnvVarName(env);\n const raw = process.env[varName];\n if (!raw) {\n throw new Error(\n `secrets: master key requires env var ${varName} (set it before running secrets commands)`,\n );\n }\n return parseMasterKey(raw);\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n if (!/^[A-Za-z0-9+/]*={0,2}$/.test(base64)) {\n throw new Error(\"secrets: master key is not valid base64\");\n }\n return new Uint8Array(Buffer.from(base64, \"base64\"));\n}\n","import type {\n DispatchNamespaceResourceConfig,\n TenantMeta,\n} from \"../../types.js\";\n\n// Tiny per-TenantMeta cache so we don't recompile the regex on every\n// resolve call (which happens once per resource, per env, per command).\n// `null` = \"config opted out\" (no `ephemeralEnvPattern`); we cache the\n// negative answer too so the predicate stays branch-free at the call\n// site. Loader has already validated the source string compiles.\nconst ephemeralPredicateCache = new WeakMap<TenantMeta, RegExp | null>();\n\nfunction ephemeralPredicateFor(tenant: TenantMeta): RegExp | null {\n if (ephemeralPredicateCache.has(tenant)) {\n return ephemeralPredicateCache.get(tenant) ?? null;\n }\n const pat = tenant.ephemeralEnvPattern;\n const compiled = pat ? new RegExp(pat) : null;\n ephemeralPredicateCache.set(tenant, compiled);\n return compiled;\n}\n\n/**\n * `true` when `env` matches `tenant.ephemeralEnvPattern` (e.g.\n * `\"^pr-\"` for PR previews, `\"^(pr|feature)-\"` for branch previews).\n *\n * Ephemeral envs share **one** dispatch namespace\n * (`{ns}-ephemeral`) so we don't churn dispatch-namespace creates per\n * preview, and dispatch-script names carry the env suffix\n * (`{product}-{workspace}-{env}`) so multiple previews can coexist\n * inside that shared namespace. When the config doesn't pin a\n * pattern, no env is ephemeral — every env gets its own dispatch\n * namespace `{ns}-{env}`.\n */\nexport function isEphemeralEnv(env: string, tenant: TenantMeta): boolean {\n const re = ephemeralPredicateFor(tenant);\n if (!re) return false;\n return re.test(env);\n}\n\n/** Resolved Cloudflare dispatch namespace name for the given env. */\nexport function effectiveDispatchNamespaceName(\n config: DispatchNamespaceResourceConfig,\n env: string,\n tenant: TenantMeta,\n): string {\n if (config.envSuffix) {\n if (env === \"local\") return config.namespace;\n if (isEphemeralEnv(env, tenant)) return `${config.namespace}-ephemeral`;\n return `${config.namespace}-${env}`;\n }\n return config.namespace;\n}\n","import type { RouteResourceConfig } from \"../../types.js\";\nimport type {\n Route,\n ZoneNameRoute,\n CustomDomainRoute,\n} from \"../../generated/wrangler-types.js\";\n\nconst DEFAULT_PROD_ENVS = [\"prod\", \"production\"];\nconst DEFAULT_SKIP_ENVS = [\"local\"];\n\n/**\n * Per `docs/handoff.md` §6:\n * - prod / production → bare apex (`todo.com`)\n * - any other env (including ephemeral `pr-*`) → `{env}.{apex}`\n * - `local` (or anything in `skipEnvs`) → no route\n *\n * The resource-name `-{env}` suffix on workers/D1/R2/KV is decoupled from\n * URLs; this function only computes the URL.\n */\nexport function effectiveHostForEnv(\n route: RouteResourceConfig,\n env: string,\n): string | undefined {\n const skipEnvs = route.skipEnvs ?? DEFAULT_SKIP_ENVS;\n if (skipEnvs.includes(env)) return undefined;\n const prodEnvs = route.prodEnvs ?? DEFAULT_PROD_ENVS;\n if (prodEnvs.includes(env)) return route.host;\n return `${env}.${route.host}`;\n}\n\n/**\n * Expand one Tamer route into a wrangler `Route` (or `undefined` if the env\n * should not receive the route at all).\n */\nexport function expandRouteForEnv(\n route: RouteResourceConfig,\n env: string,\n): Route | undefined {\n const host = effectiveHostForEnv(route, env);\n if (!host) return undefined;\n const zone = route.zone ?? route.host;\n\n if (route.customDomain) {\n const cd: CustomDomainRoute = { pattern: host, custom_domain: true };\n return cd;\n }\n\n const path = route.path ?? \"/*\";\n const expanded: ZoneNameRoute = {\n pattern: `${host}${path}`,\n zone_name: zone,\n };\n return expanded;\n}\n\n/**\n * Expand `tamerRoutes` for the given env, dropping any that resolve to\n * `undefined` (`local`, `skipEnvs`).\n *\n * Note: ephemeral envs (matching `tenant.ephemeralEnvPattern`) follow the\n * same `{env}.{apex}` prefix rule as any non-prod env — e.g. an env named\n * `pr-1234` resolves to `pr-1234.todo.com`. Callers that want a different\n * URL scheme for ephemeral envs should special-case before calling.\n */\nexport function effectiveRoutesForEnv(\n tamerRoutes: RouteResourceConfig[] | undefined,\n env: string,\n): Route[] {\n if (!tamerRoutes || tamerRoutes.length === 0) return [];\n const out: Route[] = [];\n for (const r of tamerRoutes) {\n const expanded = expandRouteForEnv(r, env);\n if (expanded) out.push(expanded);\n }\n return out;\n}\n\n/**\n * Zone-name routes are attached via the Cloudflare Workers Routes HTTP API\n * (`/zones/{id}/workers/routes`), not via `wrangler.json`, so deploys stay\n * consistent with `tamer drift` / destroy.\n */\nexport function isApiManagedZoneRoute(r: Route): r is ZoneNameRoute {\n return (\n typeof r === \"object\" &&\n r !== null &&\n \"zone_name\" in r &&\n typeof (r as ZoneNameRoute).zone_name === \"string\" &&\n \"pattern\" in r &&\n typeof (r as ZoneNameRoute).pattern === \"string\" &&\n !(\n \"custom_domain\" in r &&\n (r as { custom_domain?: boolean }).custom_domain === true\n )\n );\n}\n\n/** Custom-domain `tamerRoutes` stay in wrangler until a dedicated API path exists. */\nexport function isWranglerOnlyTamerRoute(r: Route): r is CustomDomainRoute {\n return (\n typeof r === \"object\" &&\n r !== null &&\n \"custom_domain\" in r &&\n (r as CustomDomainRoute).custom_domain === true\n );\n}\n","/** Reject path segments in generated Wrangler config filename. */\nexport function assertSafeWranglerOutFile(name: string): string {\n const trimmed = name.trim();\n if (!trimmed) {\n throw new Error(\"wranglerOutFile cannot be empty\");\n }\n if (\n trimmed.includes(\"/\") ||\n trimmed.includes(\"\\\\\") ||\n trimmed.startsWith(\"..\")\n ) {\n throw new Error(\n `Invalid wranglerOutFile \"${name}\": use a basename only (e.g. wrangler.json)`,\n );\n }\n return trimmed;\n}\n\n/** Extra CLI args so Wrangler uses a non-default config file. */\nexport function wranglerConfigCliArgs(outFile: string): string[] {\n if (outFile === \"wrangler.json\") return [];\n return [\"--config\", outFile];\n}\n","/**\n * Cross-resource reference resolver — Tamer's `!Ref` / `!GetAtt` analogue.\n *\n * Syntax: `${tamer:<kind>:<logicalName>.<field>}` (whole-string OR\n * interpolated). Recognized in worker `vars`, `tamerRoutes[].host` and\n * `tamerRoutes[].zone`, `r2_buckets[].bucket_name`, `services[].service`,\n * `dispatch_namespaces[].namespace`, and external `resources.d1[].databaseName`.\n * Resolved at wrangler-config-generation time against the in-memory state snapshot,\n * so all referenced resources must already\n * have been created (typically by an earlier loop within `tamer apply`).\n *\n * Examples:\n * \"${tamer:r2:assets.name}\" → derived bucket name\n * \"${tamer:queue:events.id}\" → queue id (uuid)\n * \"${tamer:d1:settings.binding}\" → wrangler binding key\n * \"queue=${tamer:queue:events.name};dim=128\" → interpolated mid-string\n * \"${tamer:worker:api.name}\" → deployed worker name\n * \"${tamer:dispatch_namespace:workspace.name}\" → namespace name\n * \"${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name}\" → R2 SQL table name (normalized)\n * \"${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name_pipelines}\" → Pipelines-reported name before normalize\n * \"${tamer:config:stack.account_id}\" → `config.account_id` or CLI `accountId` (same as wrangler account)\n *\n * Throws `TamerReferenceError` with the originating field path on any\n * unresolved reference; `tamer apply` / `deploy` surface this as a clear\n * \"run apply first\" or \"typo in logicalName\" message.\n */\n\nimport type { NamingEngine } from \"../naming/NamingEngine.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport type {\n CfiConfig,\n LogpushPipelinesStateEntry,\n StateEntry,\n WorkerConfig,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport { resolveDeployedWorkerName } from \"../config/resolver.js\";\n\nexport class TamerReferenceError extends Error {\n constructor(message: string, public readonly fieldPath: string) {\n super(`${message} (at ${fieldPath})`);\n this.name = \"TamerReferenceError\";\n }\n}\n\n// Field token is broad enough to cover both built-in resource fields\n// (`name`, `id`, `binding` — all lower-case) and `${tamer:import:<stack>.<output>}`\n// where the output name is a CloudFormation-style identifier\n// (`^[a-zA-Z][a-zA-Z0-9_-]*$`). Each `lookupReference` branch enforces the\n// allowed field set for its kind, so widening here is purely a parsing concern.\nconst REF_RE = /\\$\\{tamer:([a-z0-9_]+):([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}/g;\nconst FULL_REF_RE = /^\\$\\{tamer:([a-z0-9_]+):([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}$/;\n\nexport interface ReferenceContext {\n config: CfiConfig;\n env: string;\n state: StateManager;\n naming: NamingEngine;\n /**\n * When `true`, unresolved references are left in place instead of throwing.\n * Used by read-only commands (`plan`, `drift`, `status`) so they don't fail\n * on a config that has not yet been `apply`ed.\n */\n tolerant?: boolean;\n /**\n * Stack outputs imported from sibling stacks living in the same\n * `tamer-state-{env}` D1, keyed by source stack name → output name →\n * resolved literal. Populated by `fetchStackImports` at command start so\n * cross-stack references resolve without re-reading D1 mid-resolution.\n * Empty/undefined when no `${tamer:import:…}` references appear in config.\n */\n imports?: Record<string, Record<string, string>>;\n /**\n * Effective account id for the current tamer command (`config.account_id` ??\n * `CLOUDFLARE_ACCOUNT_ID` from the caller). Fills\n * `${tamer:config:stack.account_id}` when the config file omits\n * top-level `account_id` but the CLI has already resolved the id.\n */\n accountId?: string;\n}\n\n/**\n * Scan a string for any `${tamer:...}` references. Returns true when at\n * least one reference is present (used for cheap pre-checks).\n */\nexport function stringHasReference(s: string): boolean {\n REF_RE.lastIndex = 0;\n return REF_RE.test(s);\n}\n\n/**\n * Resolve every `${tamer:...}` reference in `value`. Replacement preserves\n * surrounding text for partial-string interpolation. `fieldPath` is included\n * in any thrown {@link TamerReferenceError} for actionable diagnostics.\n */\nexport function resolveReferencesInString(\n value: string,\n ctx: ReferenceContext,\n fieldPath: string,\n): string {\n if (!stringHasReference(value)) return value;\n\n return value.replace(REF_RE, (match, kind, logicalName, field) => {\n try {\n return lookupReference(\n kind as string,\n logicalName as string,\n field as string,\n ctx,\n fieldPath,\n );\n } catch (err) {\n if (ctx.tolerant && err instanceof TamerReferenceError) {\n return match;\n }\n throw err;\n }\n });\n}\n\n/**\n * Walk a `vars` record (or any flat string→string map) replacing references\n * in every value. Returns a new object; the input is not mutated.\n */\nexport function resolveReferencesInVars(\n vars: Record<string, string> | undefined,\n ctx: ReferenceContext,\n fieldPathPrefix: string,\n): Record<string, string> | undefined {\n if (!vars) return vars;\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(vars)) {\n if (typeof value !== \"string\") {\n out[key] = value;\n continue;\n }\n out[key] = resolveReferencesInString(\n value,\n ctx,\n `${fieldPathPrefix}.${key}`,\n );\n }\n return out;\n}\n\nfunction lookupReference(\n kind: string,\n logicalName: string,\n field: string,\n ctx: ReferenceContext,\n fieldPath: string,\n): string {\n switch (kind) {\n case \"d1\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"d1_database\" && entry.logicalName === logicalName,\n );\n case \"r2\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"r2_bucket\" && entry.logicalName === logicalName,\n );\n case \"kv\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"kv_namespace\" && entry.logicalName === logicalName,\n );\n case \"queue\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"queue\" && entry.logicalName === logicalName,\n );\n case \"hyperdrive\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"hyperdrive\" && entry.logicalName === logicalName,\n );\n case \"vectorize\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"vectorize\" && entry.logicalName === logicalName,\n );\n case \"ai_gateway\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"ai_gateway\" && entry.logicalName === logicalName,\n );\n case \"pipeline\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"pipeline\" && entry.logicalName === logicalName,\n );\n case \"workflow\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) => entry.type === \"workflow\" && entry.logicalName === logicalName,\n );\n case \"secret_store\":\n return lookupResource(\n ctx,\n kind,\n logicalName,\n field,\n fieldPath,\n (entry) =>\n entry.type === \"secrets_store\" && entry.logicalName === logicalName,\n );\n case \"dispatch_namespace\":\n return lookupDispatchNamespace(ctx, logicalName, field, fieldPath);\n case \"worker\":\n return lookupWorker(ctx, logicalName, field, fieldPath);\n case \"import\":\n return lookupImport(ctx, logicalName, field, fieldPath);\n case \"logpush_pipelines\":\n return lookupLogpushPipelines(ctx, logicalName, field, fieldPath);\n case \"config\":\n return lookupConfigField(ctx, logicalName, field, fieldPath);\n default:\n throw new TamerReferenceError(\n `Unknown reference kind \"${kind}\" — expected one of d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | secret_store | dispatch_namespace | worker | import | logpush_pipelines | config`,\n fieldPath,\n );\n }\n}\n\nfunction lookupConfigField(\n ctx: ReferenceContext,\n _logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n if (field === \"account_id\") {\n const id = (ctx.accountId ?? ctx.config.account_id ?? \"\").trim();\n if (!id) {\n throw new TamerReferenceError(\n `Reference \\${tamer:config:stack.account_id} needs the stack Cloudflare account id — set top-level account_id in tamer/project.config.ts or pass CLOUDFLARE_ACCOUNT_ID when running tamer.`,\n fieldPath,\n );\n }\n return id;\n }\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on config reference — expected account_id`,\n fieldPath,\n );\n}\n\nfunction getLogpushPipelinesEntry(\n ctx: ReferenceContext,\n logicalName: string,\n fieldPath: string,\n): LogpushPipelinesStateEntry {\n const all = ctx.state.getAll();\n const entry = Object.values(all).find(\n (e): e is LogpushPipelinesStateEntry =>\n e.type === \"logpush_pipelines\" && e.logicalName === logicalName,\n );\n if (!entry) {\n throw new TamerReferenceError(\n `Reference \\${tamer:logpush_pipelines:${logicalName}.…} cannot be resolved — ` +\n `no pipelines graph in state for logpush job \"${logicalName}\". Run a full \\`tamer apply\\` (including the Logpush / pipelinesAuto step) for env \"${ctx.env}\" first.`,\n fieldPath,\n );\n }\n return entry;\n}\n\n/**\n * Exposes fields from the `logpush_pipelines:*` D1 state row (after\n * `ensurePipelinesLogpushProvision` has run) for `outputs` and `vars`, e.g.\n * `${tamer:logpush_pipelines:workers-trace.r2_data_catalog_table_name}`.\n */\nfunction lookupLogpushPipelines(\n ctx: ReferenceContext,\n logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n const entry = getLogpushPipelinesEntry(ctx, logicalName, fieldPath);\n switch (field) {\n case \"r2_data_catalog_table_name\":\n case \"iceberg_table\": {\n const v = entry.r2DataCatalogTableName?.trim();\n if (!v) {\n throw new TamerReferenceError(\n `logpush_pipelines state for \"${logicalName}\" has no r2DataCatalogTableName (sink not yet created, or pre-upgrade state). ` +\n `Re-run a full \\`tamer apply\\` for env \"${ctx.env}\" after pipelinesAuto provisions the sink, or set table manually in consuming stack.`,\n fieldPath,\n );\n }\n return v;\n }\n case \"r2_data_catalog_table_name_pipelines\":\n case \"iceberg_table_pipelines\": {\n const v = entry.r2DataCatalogTableNamePipelines?.trim();\n if (v) return v;\n const fallback = entry.r2DataCatalogTableName?.trim();\n if (!fallback) {\n throw new TamerReferenceError(\n `logpush_pipelines state for \"${logicalName}\" has no table name (sink not yet created). ` +\n `Re-run \\`tamer apply\\` for env \"${ctx.env}\".`,\n fieldPath,\n );\n }\n return fallback;\n }\n case \"r2_data_catalog_namespace\":\n case \"iceberg_namespace\": {\n const v = (entry.r2DataCatalogNamespace ?? \"default\").trim();\n return v || \"default\";\n }\n case \"name\":\n return entry.pipelineName;\n case \"id\":\n return entry.pipelineId;\n default:\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on logpush_pipelines reference — ` +\n `expected r2_data_catalog_table_name | r2_data_catalog_table_name_pipelines | r2_data_catalog_namespace | name | id | iceberg_table | iceberg_table_pipelines | iceberg_namespace`,\n fieldPath,\n );\n }\n}\n\n/**\n * Resolve a `${tamer:import:<stack>.<output>}` against pre-fetched sibling\n * stack outputs. The pre-fetch (`fetchStackImports`) loads every imported\n * stack's `cfi_state:{stack}` row before resolution begins; this lookup is\n * pure map access. Throws if the stack isn't in `ctx.imports` (config\n * never declared it / pre-fetch wasn't wired in for this command) or if\n * the named output hasn't been published yet (sibling stack hasn't run\n * `apply` since the output was declared, or has been destroyed).\n */\nfunction lookupImport(\n ctx: ReferenceContext,\n stackName: string,\n outputName: string,\n fieldPath: string,\n): string {\n const imports = ctx.imports;\n if (!imports || !(stackName in imports)) {\n throw new TamerReferenceError(\n `Reference \\${tamer:import:${stackName}.${outputName}} cannot be resolved — ` +\n `no imported stack \"${stackName}\" available. Ensure stack \"${stackName}\" ` +\n `exists in env \"${ctx.env}\" (run 'tamer apply' there first) and that the ` +\n `current command pre-fetches sibling stacks.`,\n fieldPath,\n );\n }\n const stackOutputs = imports[stackName]!;\n if (!(outputName in stackOutputs)) {\n const available = Object.keys(stackOutputs).sort();\n const hint = available.length > 0\n ? ` Available outputs on stack \"${stackName}\": ${available.join(\", \")}.`\n : ` Stack \"${stackName}\" has no published outputs — run 'tamer apply' there with an \\`outputs:\\` block.`;\n throw new TamerReferenceError(\n `Reference \\${tamer:import:${stackName}.${outputName}} cannot be resolved — ` +\n `output \"${outputName}\" not found on imported stack \"${stackName}\".${hint}`,\n fieldPath,\n );\n }\n return stackOutputs[outputName]!;\n}\n\nfunction lookupResource(\n ctx: ReferenceContext,\n kind: string,\n logicalName: string,\n field: string,\n fieldPath: string,\n predicate: (entry: StateEntry) => boolean,\n): string {\n const all = ctx.state.getAll();\n const entry = Object.values(all).find(predicate);\n if (!entry) {\n throw new TamerReferenceError(\n `Reference \\${tamer:${kind}:${logicalName}.${field}} cannot be resolved — no ${kind} resource named \"${logicalName}\" in state. Run 'tamer apply --env ${ctx.env}' first.`,\n fieldPath,\n );\n }\n\n switch (field) {\n case \"name\":\n return resourceName(entry);\n case \"id\":\n return resourceId(entry, kind, logicalName, fieldPath);\n case \"binding\":\n return resourceBinding(entry);\n default:\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on ${kind} reference — expected name | id | binding`,\n fieldPath,\n );\n }\n}\n\nfunction resourceName(entry: StateEntry): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n case \"dispatch_namespace\":\n case \"r2_bucket\":\n return entry.derivedName;\n case \"dns_record\":\n return entry.name;\n case \"logpush_job\":\n return entry.derivedName;\n case \"logpush_pipelines\":\n return entry.pipelineName;\n case \"worker_route\":\n return entry.pattern;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .name reference — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction resourceId(\n entry: StateEntry,\n kind: string,\n logicalName: string,\n fieldPath: string,\n): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n return entry.cfId;\n case \"r2_bucket\":\n throw new TamerReferenceError(\n `R2 bucket \"${logicalName}\" has no .id (R2 buckets are addressed by name); use \\${tamer:${kind}:${logicalName}.name}`,\n fieldPath,\n );\n case \"dispatch_namespace\":\n return entry.derivedName;\n case \"dns_record\":\n return entry.recordId;\n case \"logpush_job\":\n return String(entry.cfJobId);\n case \"logpush_pipelines\":\n return entry.pipelineId;\n case \"worker_route\":\n return entry.routeId;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .id — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction resourceBinding(entry: StateEntry): string {\n switch (entry.type) {\n case \"d1_database\":\n case \"r2_bucket\":\n case \"kv_namespace\":\n case \"queue\":\n case \"hyperdrive\":\n case \"vectorize\":\n case \"ai_gateway\":\n case \"pipeline\":\n case \"workflow\":\n case \"secrets_store\":\n return entry.bindingKey;\n case \"dispatch_namespace\":\n return entry.derivedName;\n case \"dns_record\":\n throw new Error(\n \"internal: dns_record has no .binding — use .name or .id in config references\",\n );\n case \"logpush_job\":\n throw new Error(\n \"internal: logpush_job has no .binding — use .name or .id in config references\",\n );\n case \"logpush_pipelines\":\n throw new Error(\n \"internal: logpush_pipelines has no .binding — use .name or .id in config references\",\n );\n case \"worker_route\":\n return entry.routeId;\n case \"secret\":\n throw new Error(\n \"internal: secret state entries have no .binding — secrets are not cross-referenced via ${tamer:…}\",\n );\n }\n}\n\nfunction lookupDispatchNamespace(\n ctx: ReferenceContext,\n logicalName: string,\n field: string,\n fieldPath: string,\n): string {\n const declared = getDispatchNamespaces(ctx.config).find(\n (d) => d.logicalName === logicalName,\n );\n if (!declared) {\n throw new TamerReferenceError(\n `Reference \\${tamer:dispatch_namespace:${logicalName}.${field}} cannot be resolved — no dispatchNamespaces entry named \"${logicalName}\" in the Tamer project config`,\n fieldPath,\n );\n }\n if (field !== \"name\" && field !== \"id\") {\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on dispatch_namespace reference — expected name | id`,\n fieldPath,\n );\n }\n const all = ctx.state.getAll();\n const stateEntry = Object.values(all).find(\n (e) => e.type === \"dispatch_namespace\" && e.logicalName === logicalName,\n );\n if (!stateEntry || stateEntry.type !== \"dispatch_namespace\") {\n throw new TamerReferenceError(\n `Reference \\${tamer:dispatch_namespace:${logicalName}.${field}} unresolved — no state entry. Run 'tamer apply --env ${ctx.env}' first.`,\n fieldPath,\n );\n }\n return stateEntry.derivedName;\n}\n\nfunction lookupWorker(\n ctx: ReferenceContext,\n workerKey: string,\n field: string,\n fieldPath: string,\n): string {\n let target: WorkerConfig | undefined;\n if (ctx.config.workers && ctx.config.workers[workerKey]) {\n target = ctx.config.workers[workerKey];\n } else if (ctx.config.worker && workerKey === \"default\") {\n target = ctx.config.worker;\n }\n if (!target) {\n throw new TamerReferenceError(\n `Reference \\${tamer:worker:${workerKey}.${field}} cannot be resolved — no worker key \"${workerKey}\" in the Tamer project config`,\n fieldPath,\n );\n }\n if (field !== \"name\") {\n throw new TamerReferenceError(\n `Unknown field \"${field}\" on worker reference — only \"name\" is supported (the env-suffixed deployed script name)`,\n fieldPath,\n );\n }\n return resolveDeployedWorkerName(\n ctx.config,\n workerKey,\n target,\n ctx.env,\n ctx.naming,\n );\n}\n\n/**\n * True iff `value` is a single full-string reference (e.g. `\"${tamer:r2:x.name}\"`).\n * Surface for callers that want to short-circuit type coercion.\n */\nexport function isFullReference(value: string): boolean {\n FULL_REF_RE.lastIndex = 0;\n return FULL_REF_RE.test(value);\n}\n","import { resolve } from \"path\";\nimport {\n materializeTamerResolvable,\n materializeVars,\n} from \"../../dx/normalize.js\";\nimport type {\n CfiConfig,\n TenantMeta,\n TamerResolvableString,\n WorkerConfig,\n WorkerResources,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport {\n effectiveDispatchNamespaceName,\n isEphemeralEnv,\n} from \"../../features/dispatch-namespace/dispatch-namespace.resolve.js\";\nimport type { Route, WranglerConfig } from \"../../generated/wrangler-types.js\";\nimport { NamingEngine } from \"../naming/NamingEngine.js\";\nimport {\n effectiveRoutesForEnv,\n isApiManagedZoneRoute,\n isWranglerOnlyTamerRoute,\n} from \"../routes/routes.resolve.js\";\nimport type { StateManager } from \"../state/StateManager.js\";\nimport { assertSafeWranglerOutFile } from \"../wrangler/wranglerOutFile.js\";\nimport {\n resolveReferencesInString,\n resolveReferencesInVars,\n} from \"../references/references.js\";\nimport type { RouteResourceConfig } from \"../../types.js\";\n\n/** Wrangler script name after env suffix rules (matches `tamer deploy`). */\nexport function resolveDeployedWorkerName(\n _config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n naming: NamingEngine,\n): string {\n const m = workerConfig as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n if (sn) {\n if (env === \"local\") return sn;\n return `${sn}-${env}`;\n }\n return naming.workerName(workerKey, env);\n}\n\n/**\n * Map from base service-binding target name (`scriptName` for envs other than\n * `local`, or the local-deployed name) → env-suffixed deployed name for every\n * worker in `config`. Used to auto-rewrite intra-stack `services[].service`\n * fields so fixtures don't have to repeat env overrides for every env.\n */\nexport function buildIntraStackScriptNameMap(\n config: CfiConfig,\n env: string,\n naming: NamingEngine,\n): Map<string, string> {\n const map = new Map<string, string>();\n if (config.workers) {\n for (const [key, wc] of Object.entries(config.workers)) {\n const m = wc as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n const baseName = sn ?? naming.workerName(key, \"local\");\n const deployed = resolveDeployedWorkerName(config, key, wc, env, naming);\n map.set(baseName, deployed);\n }\n }\n if (config.worker) {\n const w = config.worker;\n const m = w as WorkerConfig & { scriptName?: string };\n const sn = m.scriptName?.trim();\n const baseName = sn ?? naming.workerName(\"default\", \"local\");\n const deployed = resolveDeployedWorkerName(\n config,\n \"default\",\n w,\n env,\n naming,\n );\n map.set(baseName, deployed);\n }\n return map;\n}\n\n/** Returns a worker config copy whose `services[].service` is rewritten to env-suffixed deployed names. */\nexport function rewriteIntraStackServiceTargets(\n workerConfig: WorkerConfig,\n baseToDeployed: Map<string, string>,\n): WorkerConfig {\n const services = (\n workerConfig as WorkerConfig & {\n services?: Array<{ binding: string; service: string; environment?: string }>;\n }\n ).services;\n if (!services || services.length === 0) return workerConfig;\n let rewroteAny = false;\n const rewritten = services.map((s) => {\n const target = baseToDeployed.get(s.service);\n if (!target || target === s.service) return s;\n rewroteAny = true;\n return { ...s, service: target };\n });\n if (!rewroteAny) return workerConfig;\n return { ...workerConfig, services: rewritten };\n}\n\nexport interface ResolvedWorkerConfig {\n workerKey: string;\n workerName: string;\n workerDir: string;\n env: string;\n /** Basename of generated Wrangler JSON (default `wrangler.json`). */\n wranglerOutFile: string;\n /** Passed to `wrangler deploy --dispatch-namespace` when set. */\n dispatchNamespace?: string;\n wranglerConfig: WranglerConfig;\n resources: WorkerResources;\n /**\n * Zone routes from `tamerRoutes` managed via Workers Routes API after\n * `wrangler deploy` — not embedded in {@link wranglerConfig.routes}.\n */\n apiManagedRoutes: import(\"../../generated/wrangler-types.js\").ZoneNameRoute[];\n}\n\nfunction mergeVars(\n base: Record<string, TamerResolvableString> = {},\n override: Record<string, TamerResolvableString> = {},\n): Record<string, TamerResolvableString> {\n return { ...base, ...override };\n}\n\n/** Same env merge as `resolveWorkerConfig` (for deploy topo-sort service edges). */\nexport function mergedWorkerConfigForEnv(\n workerConfig: WorkerConfig,\n env: string,\n tenant: TenantMeta,\n): WorkerConfig {\n let merged = { ...workerConfig } as WorkerConfig & {\n vars?: Record<string, string>;\n };\n\n if (env === \"local\" && workerConfig.local) {\n merged = {\n ...merged,\n ...workerConfig.local,\n vars: mergeVars(workerConfig.vars, workerConfig.local.vars),\n } as WorkerConfig & { vars?: Record<string, string> };\n } else if (workerConfig.env?.[env]) {\n const envOverride = workerConfig.env[env];\n merged = {\n ...merged,\n ...envOverride,\n vars: mergeVars(workerConfig.vars, envOverride.vars),\n } as WorkerConfig & { vars?: Record<string, string> };\n }\n\n const mv = (merged as WorkerConfig & { vars?: Record<string, string> }).vars;\n if (mv && Object.prototype.hasOwnProperty.call(mv, \"BRANCH_SUFFIX\")) {\n merged = {\n ...merged,\n vars: {\n ...mv,\n BRANCH_SUFFIX: isEphemeralEnv(env, tenant) ? env : \"\",\n },\n } as WorkerConfig & { vars?: Record<string, string> };\n }\n\n return merged;\n}\n\n/**\n * Align `dispatch_namespaces[].namespace` and `vars.WFP_NAMESPACE` with\n * {@link effectiveDispatchNamespaceName} for envs that have no explicit\n * `worker.env[env]` block (e.g. `pr-*` shared namespace).\n */\nexport function applyDispatchNamespaceEnvOverrides(\n config: CfiConfig,\n merged: WorkerConfig,\n env: string,\n): WorkerConfig {\n const dns = getDispatchNamespaces(config);\n if (dns.length === 0) return merged;\n const resolved = effectiveDispatchNamespaceName(dns[0], env, config.tenant);\n const m = merged as WorkerConfig & {\n dispatch_namespaces?: Array<{ binding: string; namespace: string }>;\n vars?: Record<string, string>;\n };\n let next: WorkerConfig = merged;\n if (m.dispatch_namespaces?.length) {\n next = {\n ...next,\n dispatch_namespaces: m.dispatch_namespaces.map((d) => ({\n ...d,\n namespace: resolved,\n })),\n } as WorkerConfig;\n }\n if (\n m.vars &&\n typeof m.vars.WFP_NAMESPACE === \"string\" &&\n m.vars.WFP_NAMESPACE === dns[0].namespace\n ) {\n const v = (next as WorkerConfig & { vars?: Record<string, string> }).vars;\n next = {\n ...(next as object),\n vars: { ...v!, WFP_NAMESPACE: resolved },\n } as WorkerConfig;\n }\n return next;\n}\n\n/**\n * Walk the merged worker config and replace `${tamer:<kind>:<logical>.<field>}`\n * references in `vars` and `tamerRoutes[].host` / `.zone` against the current\n * state snapshot. Also resolves `r2_buckets[].bucket_name`,\n * **`services[].service`**, **`dispatch_namespaces[].namespace`**, and\n * `resources.d1[].databaseName` when `ownership` is `external`. Throws\n * `TamerReferenceError` (with field path) if any\n * reference is unresolved — bubbles up to the caller as a fatal.\n */\nexport function resolveCrossResourceReferences(\n merged: WorkerConfig,\n ctx: {\n config: CfiConfig;\n env: string;\n state: StateManager;\n naming: NamingEngine;\n workerKey: string;\n tolerant?: boolean;\n /**\n * Pre-fetched sibling stack outputs (`fetchStackImports` result) so\n * `${tamer:import:<stack>.<output>}` references in worker `vars` /\n * `tamerRoutes` resolve without mid-resolution D1 reads.\n */\n imports?: Record<string, Record<string, string>>;\n /** Same as wrangler `account_id` (drives `${tamer:config:stack.account_id}`). */\n accountId: string;\n },\n): WorkerConfig {\n const refCtx = {\n config: ctx.config,\n env: ctx.env,\n state: ctx.state,\n naming: ctx.naming,\n tolerant: ctx.tolerant,\n imports: ctx.imports,\n accountId: ctx.accountId,\n };\n const m = merged as WorkerConfig & { vars?: Record<string, string> };\n let next: WorkerConfig = merged;\n if (m.vars) {\n const resolvedVars = resolveReferencesInVars(\n materializeVars(m.vars)!,\n refCtx,\n `worker[${ctx.workerKey}].vars`,\n );\n if (resolvedVars && resolvedVars !== m.vars) {\n next = { ...next, vars: resolvedVars } as WorkerConfig;\n }\n }\n const tamerRoutes = (\n next as WorkerConfig & { tamerRoutes?: RouteResourceConfig[] }\n ).tamerRoutes;\n if (tamerRoutes && tamerRoutes.length > 0) {\n let mutated = false;\n const resolvedRoutes = tamerRoutes.map((r, idx) => {\n const fieldBase = `worker[${ctx.workerKey}].tamerRoutes[${idx}]`;\n const host = resolveReferencesInString(\n r.host,\n refCtx,\n `${fieldBase}.host`,\n );\n const zone = r.zone\n ? resolveReferencesInString(r.zone, refCtx, `${fieldBase}.zone`)\n : r.zone;\n if (host !== r.host || zone !== r.zone) mutated = true;\n return { ...r, host, ...(zone !== undefined ? { zone } : {}) };\n });\n if (mutated) {\n next = { ...next, tamerRoutes: resolvedRoutes } as WorkerConfig;\n }\n }\n\n const r2Buckets = (\n next as WorkerConfig & {\n r2_buckets?: Array<{ binding: string; bucket_name: string }>;\n }\n ).r2_buckets;\n if (r2Buckets && r2Buckets.length > 0) {\n let mutated = false;\n const resolvedBuckets = r2Buckets.map((b, idx) => {\n const raw = b.bucket_name;\n if (raw === undefined) return b;\n const fieldBase = `worker[${ctx.workerKey}].r2_buckets[${idx}].bucket_name`;\n const bucket_name = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (bucket_name !== raw) mutated = true;\n return { ...b, bucket_name };\n });\n if (mutated) {\n next = { ...next, r2_buckets: resolvedBuckets } as WorkerConfig;\n }\n }\n\n const svc = (\n next as WorkerConfig & {\n services?: Array<{ binding: string; service: string; environment?: string }>;\n }\n ).services;\n if (svc && svc.length > 0) {\n let mutated = false;\n const resolvedSvc = svc.map((s, idx) => {\n const raw = s.service;\n const fieldBase = `worker[${ctx.workerKey}].services[${idx}].service`;\n const service = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (service !== raw) mutated = true;\n return { ...s, service };\n });\n if (mutated) {\n next = { ...next, services: resolvedSvc } as WorkerConfig;\n }\n }\n\n const dispatchNsMerged = (\n next as WorkerConfig & {\n dispatch_namespaces?: Array<{ binding: string; namespace: string }>;\n }\n ).dispatch_namespaces;\n if (dispatchNsMerged && dispatchNsMerged.length > 0) {\n let mutated = false;\n const resolvedDn = dispatchNsMerged.map((d, idx) => {\n const raw = d.namespace;\n const fieldBase = `worker[${ctx.workerKey}].dispatch_namespaces[${idx}].namespace`;\n const namespace = resolveReferencesInString(\n materializeTamerResolvable(raw),\n refCtx,\n fieldBase,\n );\n if (namespace !== raw) mutated = true;\n return { ...d, namespace };\n });\n if (mutated) {\n next = { ...next, dispatch_namespaces: resolvedDn } as WorkerConfig;\n }\n }\n\n const resBlock = (\n next as WorkerConfig & { resources?: WorkerResources }\n ).resources;\n if (resBlock?.d1 && resBlock.d1.length > 0) {\n let mutated = false;\n const d1Resolved = resBlock.d1.map((d1c, idx) => {\n if (d1c.ownership !== \"external\" || !d1c.databaseName) return d1c;\n const fieldBase = `worker[${ctx.workerKey}].resources.d1[${idx}].databaseName`;\n const databaseName = resolveReferencesInString(\n materializeTamerResolvable(d1c.databaseName),\n refCtx,\n fieldBase,\n );\n if (databaseName !== d1c.databaseName) mutated = true;\n return { ...d1c, databaseName };\n });\n if (mutated) {\n next = {\n ...next,\n resources: { ...resBlock, d1: d1Resolved },\n } as WorkerConfig;\n }\n }\n\n return next;\n}\n\nfunction stripTamerFields(config: Record<string, unknown>): Record<string, unknown> {\n const {\n path,\n config: configPath,\n resources,\n local,\n env,\n scriptName: _scriptName,\n wranglerOutFile: _out,\n dispatchNamespace: _dispatchNs,\n tamerRoutes: _tamerRoutes,\n tamerStaleRouteSweepZones: _tamerStaleRouteSweepZones,\n build: _build,\n secrets: _secrets,\n alias: _alias,\n ...rest\n } = config;\n return rest;\n}\n\nexport interface ResolveWorkerConfigOptions {\n /**\n * `strict` (default): unresolved `${tamer:...}` references throw, surfacing\n * a clear \"run apply first\" message. `tolerant`: leaves unresolved\n * references in place — used by read-only callers (`plan`, `drift`,\n * `status`) so a not-yet-applied config doesn't crash them.\n */\n referencesMode?: \"strict\" | \"tolerant\";\n /**\n * Pre-fetched sibling stack outputs powering\n * `${tamer:import:<stack>.<output>}`. Caller is responsible for\n * scanning the config (`importedStackNames`) and loading them via\n * `fetchStackImports` before invoking this resolver.\n */\n imports?: Record<string, Record<string, string>>;\n}\n\n/**\n * Env merge + intra-stack `services` rewrite + sibling-stack resolution for\n * **`resources.d1[].databaseName` only** when `ownership: \"external\"`.\n *\n * Use before {@link ResourceModule.pickResources} during `apply` / `sync` /\n * `drift` so imported D1 names are known **without** resolving worker `vars`\n * (those references often need resources created earlier in the same `apply`).\n */\nexport function mergeWorkerConfigForResourcePick(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): WorkerConfig {\n let merged = mergedWorkerConfigForEnv(workerConfig, env, config.tenant);\n merged = applyDispatchNamespaceEnvOverrides(config, merged, env);\n const intraMap = buildIntraStackScriptNameMap(config, env, naming);\n merged = rewriteIntraStackServiceTargets(merged, intraMap);\n const refCtx = {\n config,\n env,\n state,\n naming,\n tolerant: opts.referencesMode === \"tolerant\",\n imports: opts.imports,\n accountId,\n };\n const resBlock = (merged as WorkerConfig & { resources?: WorkerResources })\n .resources;\n if (!resBlock?.d1?.length) return merged;\n\n const d1Resolved = resBlock.d1.map((d1c, idx) => {\n if (d1c.ownership !== \"external\" || !d1c.databaseName) return d1c;\n const fieldBase = `worker[${workerKey}].resources.d1[${idx}].databaseName`;\n const databaseName = resolveReferencesInString(\n materializeTamerResolvable(d1c.databaseName),\n refCtx,\n fieldBase,\n );\n return { ...d1c, databaseName };\n });\n return {\n ...merged,\n resources: { ...resBlock, d1: d1Resolved },\n } as WorkerConfig;\n}\n\n/**\n * Env-merged worker config with every `${tamer:…}` site resolved for wrangler\n * (`vars`, `tamerRoutes`, `r2_buckets[].bucket_name`, external D1 names).\n * Used by {@link resolveWorkerConfig} after resource state is up to date.\n */\nexport function mergeWorkerConfigWithResolvedRefs(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): WorkerConfig {\n let merged = mergedWorkerConfigForEnv(workerConfig, env, config.tenant);\n merged = applyDispatchNamespaceEnvOverrides(config, merged, env);\n const intraMap = buildIntraStackScriptNameMap(config, env, naming);\n merged = rewriteIntraStackServiceTargets(merged, intraMap);\n return resolveCrossResourceReferences(merged, {\n config,\n env,\n state,\n naming,\n workerKey,\n tolerant: opts.referencesMode === \"tolerant\",\n imports: opts.imports,\n accountId,\n });\n}\n\nexport async function resolveWorkerConfig(\n config: CfiConfig,\n workerKey: string,\n workerConfig: WorkerConfig,\n env: string,\n baseDir: string,\n accountId: string,\n naming: NamingEngine,\n state: StateManager,\n opts: ResolveWorkerConfigOptions = {},\n): Promise<ResolvedWorkerConfig> {\n const merged = mergeWorkerConfigWithResolvedRefs(\n config,\n workerKey,\n workerConfig,\n env,\n accountId,\n naming,\n state,\n opts,\n );\n\n const workerDir = workerConfig.path\n ? resolve(baseDir, workerConfig.path)\n : baseDir;\n\n const m = merged as WorkerConfig & {\n scriptName?: string;\n wranglerOutFile?: string;\n dispatchNamespace?: string;\n };\n const workerName = resolveDeployedWorkerName(\n config,\n workerKey,\n merged as WorkerConfig,\n env,\n naming,\n );\n\n const wranglerOutFile = assertSafeWranglerOutFile(\n m.wranglerOutFile?.trim() || \"wrangler.json\",\n );\n const dispatchNamespace = m.dispatchNamespace?.trim() || undefined;\n\n const stripped = stripTamerFields(merged as Record<string, unknown>);\n const tamerRoutes = (\n merged as WorkerConfig & { tamerRoutes?: import(\"../../types.js\").RouteResourceConfig[] }\n ).tamerRoutes;\n const expandedRoutes = effectiveRoutesForEnv(tamerRoutes, env);\n const apiManagedRoutes = expandedRoutes.filter(isApiManagedZoneRoute);\n const wranglerTamerRoutes = expandedRoutes.filter(isWranglerOnlyTamerRoute);\n const existingRoutes = (stripped.routes as Route[] | undefined) ?? [];\n const mergedRoutes: Route[] = [...existingRoutes, ...wranglerTamerRoutes];\n\n /** Non-local deploys emit `routes: []` when there are none — omitting `routes` can leave stale Wrangler-published custom domains attached from a prior config. */\n const wranglerRoutes: Route[] | undefined =\n mergedRoutes.length > 0 ? mergedRoutes : env === \"local\" ? undefined : [];\n\n const wranglerConfig: WranglerConfig = {\n ...stripped,\n ...(wranglerRoutes !== undefined ? { routes: wranglerRoutes } : {}),\n name: workerName,\n account_id: accountId,\n compatibility_date:\n (stripped.compatibility_date as string | undefined) ??\n config.compatibility_date,\n } as WranglerConfig;\n\n return {\n workerKey,\n workerName,\n workerDir,\n env,\n wranglerOutFile,\n dispatchNamespace,\n wranglerConfig,\n resources: (merged as WorkerConfig & { resources?: WorkerResources })\n .resources ??\n workerConfig.resources ??\n {},\n apiManagedRoutes,\n };\n}\n","import { z } from \"zod\";\n\nconst D1StateEntrySchema = z.object({\n type: z.literal(\"d1_database\"),\n logicalName: z.string(),\n shardDate: z.string().optional(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n migrationsDir: z.string().optional(),\n preserveOnDestroy: z.boolean().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst R2StateEntrySchema = z.object({\n type: z.literal(\"r2_bucket\"),\n logicalName: z.string(),\n createdDate: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst KVStateEntrySchema = z.object({\n type: z.literal(\"kv_namespace\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst QueueStateEntrySchema = z.object({\n type: z.literal(\"queue\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n producerBinding: z.boolean(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst VectorizeStateEntrySchema = z.object({\n type: z.literal(\"vectorize\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n dimensions: z.number(),\n metric: z.enum([\"cosine\", \"euclidean\", \"dot-product\"]),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst AIGatewayStateEntrySchema = z.object({\n type: z.literal(\"ai_gateway\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n cacheTtl: z.number(),\n cacheInvalidateOnUpdate: z.boolean(),\n collectLogs: z.boolean(),\n authentication: z.boolean(),\n rateLimitingInterval: z.number(),\n rateLimitingLimit: z.number(),\n rateLimitingTechnique: z.enum([\"fixed\", \"sliding\"]),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst PipelineStateEntrySchema = z.object({\n type: z.literal(\"pipeline\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n sql: z.string(),\n status: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst WorkflowStateEntrySchema = z.object({\n type: z.literal(\"workflow\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n className: z.string(),\n scriptName: z.string(),\n limits: z\n .object({ steps: z.number().int().positive().optional() })\n .optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst SecretsStoreStateEntrySchema = z.object({\n type: z.literal(\"secrets_store\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst HyperdriveStateEntrySchema = z.object({\n type: z.literal(\"hyperdrive\"),\n logicalName: z.string(),\n derivedName: z.string(),\n bindingKey: z.string(),\n cfId: z.string(),\n scheme: z.enum([\"postgres\", \"postgresql\", \"mysql\"]),\n originHost: z.string(),\n originDatabase: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst DnsRecordTypeSchema = z.enum([\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"TXT\",\n \"MX\",\n \"NS\",\n \"CAA\",\n \"SRV\",\n \"PTR\",\n \"HTTPS\",\n \"SVCB\",\n]);\n\nconst DnsRecordStateEntrySchema = z.object({\n type: z.literal(\"dns_record\"),\n logicalName: z.string(),\n zoneId: z.string(),\n recordType: DnsRecordTypeSchema,\n name: z.string(),\n content: z.string(),\n ttl: z.number(),\n proxied: z.boolean(),\n priority: z.number().optional(),\n comment: z.string(),\n recordId: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst DispatchNamespaceStateEntrySchema = z.object({\n type: z.literal(\"dispatch_namespace\"),\n logicalName: z.string(),\n derivedName: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst LogpushJobStateEntrySchema = z.object({\n type: z.literal(\"logpush_job\"),\n logicalName: z.string(),\n derivedName: z.string(),\n cfJobId: z.number(),\n dataset: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst LogpushPipelinesStateEntrySchema = z.object({\n type: z.literal(\"logpush_pipelines\"),\n logicalName: z.string(),\n streamId: z.string(),\n streamIngestBaseUrl: z.string().optional(),\n sinkId: z.string(),\n pipelineId: z.string(),\n streamName: z.string(),\n sinkName: z.string(),\n pipelineName: z.string(),\n r2DataCatalogTableName: z.string().optional(),\n r2DataCatalogTableNamePipelines: z.string().optional(),\n r2DataCatalogNamespace: z.string().optional(),\n catalogBucketDerivedName: z.string(),\n mintedR2CatalogTokenId: z.string().optional(),\n mintedR2CatalogTokenValue: z.string().optional(),\n mintedPipelinesSendTokenId: z.string().optional(),\n mintedPipelinesSendTokenValue: z.string().optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst WorkerRouteStateEntrySchema = z.object({\n type: z.literal(\"worker_route\"),\n workerKey: z.string(),\n workerName: z.string(),\n zoneId: z.string(),\n zoneName: z.string(),\n routeId: z.string(),\n pattern: z.string(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst SecretStateEntrySchema = z.object({\n type: z.literal(\"secret\"),\n worker: z.string(),\n name: z.string(),\n lastPushedHash: z.string(),\n lastPushedAt: z.string(),\n});\n\nconst StateEntrySchema = z.discriminatedUnion(\"type\", [\n D1StateEntrySchema,\n R2StateEntrySchema,\n KVStateEntrySchema,\n QueueStateEntrySchema,\n HyperdriveStateEntrySchema,\n VectorizeStateEntrySchema,\n AIGatewayStateEntrySchema,\n PipelineStateEntrySchema,\n WorkflowStateEntrySchema,\n SecretsStoreStateEntrySchema,\n DnsRecordStateEntrySchema,\n DispatchNamespaceStateEntrySchema,\n LogpushJobStateEntrySchema,\n LogpushPipelinesStateEntrySchema,\n WorkerRouteStateEntrySchema,\n SecretStateEntrySchema,\n]);\n\nconst ProvisioningStatusSchema = z.enum([\n \"pending\",\n \"d1_created\",\n \"migrations_applied\",\n \"script_uploaded\",\n \"ready\",\n \"tombstoned\",\n]);\n\nconst TenantD1ShardRefSchema = z.object({\n role: z.string(),\n derivedName: z.string(),\n cfId: z.string(),\n});\n\nconst TenantStateEntrySchema = z.object({\n product: z.string(),\n workspace: z.string(),\n provisioningStatus: ProvisioningStatusSchema,\n dispatchNamespaceName: z.string(),\n scriptName: z.string(),\n d1Shards: z.array(TenantD1ShardRefSchema).optional(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nconst CfiStackMetaSchema = z.object({\n name: z.string().optional(),\n owner: z.string().optional(),\n});\n\nconst CfiOperationNameSchema = z.enum([\n \"bootstrap\",\n \"apply\",\n \"deploy\",\n \"destroy\",\n \"provision-tenant\",\n \"destroy-tenant\",\n \"import\",\n \"sync\",\n]);\n\nconst CfiOperationStatusSchema = z.enum([\n \"in_progress\",\n \"succeeded\",\n \"failed\",\n]);\n\nconst CfiStackOutputValueSchema = z.object({\n value: z.string(),\n source: z.string(),\n resolvedAt: z.string(),\n});\n\nconst CfiOperationRecordSchema = z.object({\n command: CfiOperationNameSchema,\n status: CfiOperationStatusSchema,\n startedAt: z.string(),\n completedAt: z.string().optional(),\n errorMessage: z.string().optional(),\n detail: z.string().optional(),\n});\n\nexport const CfiStateSchema = z.object({\n tenantId: z.string(),\n env: z.string(),\n schemaVersion: z.number(),\n syncedAt: z.string(),\n resources: z.record(z.string(), StateEntrySchema),\n /** Optimistic concurrency: incremented on each successful D1 persist. */\n revision: z.number().optional(),\n /** Runtime-provisioned workspace tenants (not declared in `tamer.config.ts`). */\n tenants: z.record(z.string(), TenantStateEntrySchema).optional(),\n /** Stack metadata. */\n stack: CfiStackMetaSchema.optional(),\n /** Resolved + persisted `outputs:` from `tamer.config.ts`. */\n stackOutputs: z.record(z.string(), CfiStackOutputValueSchema).optional(),\n /** Last operation that mutated this state row. */\n lastOperation: CfiOperationRecordSchema.optional(),\n /** Completed ops (newest first), capped on append. */\n operationHistory: z.array(CfiOperationRecordSchema).optional(),\n});\n\nexport type CfiStateValidated = z.infer<typeof CfiStateSchema>;\nexport type TenantStateEntryValidated = z.infer<typeof TenantStateEntrySchema>;\n","/**\n * Single source of truth for \"what stack are we?\" The value flows into the\n * D1 row key (`cfi_state:{stackName}`) and into\n * `${tamer:import:<stackName>.<output>}` lookups, so commands MUST agree\n * on the same derivation. Order: explicit `config.stack.name` →\n * `tenant.slug` → literal `\"default\"` (defensive — the loader requires\n * `tenant.slug` to be set, but the StateManager constructor accepts the\n * fallback so unit tests that build state without a config keep working).\n */\nimport type { CfiConfig } from \"../../types.js\";\n\nexport const DEFAULT_STACK_NAME = \"default\";\n\nexport function stackNameForConfig(config: CfiConfig): string {\n return config.stack?.name ?? config.tenant.slug ?? DEFAULT_STACK_NAME;\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\nimport type { CfiState } from \"../../types.js\";\nimport { CfiStateSchema } from \"./stateSchema.js\";\nimport { DEFAULT_STACK_NAME } from \"./stackName.js\";\n\n/**\n * Schema versions:\n * 2: original (resources only).\n * 3: + `tenants` map, + `revision` for optimistic concurrency.\n * 4: + `stack` metadata, + `lastOperation` (CloudFormation-style stack info).\n * All v4 additions are optional; existing v3 documents are upgraded\n * in-place during parse with no data loss.\n * 5: + `secret` state entries (fingerprints only; additive resource rows).\n */\nconst STATE_SCHEMA_VERSION = 5;\n\n/**\n * Account-scoped D1 database that holds JSON state for **all** envs\n * (`tamer-state`). Each env's state is isolated by row key:\n * `cfi_state:{env}:{stackName}`.\n */\nexport function tamerStateDatabaseName(): string {\n return \"tamer-state\";\n}\n\n/**\n * D1 `tamer_kv.k` value for a given env + stack's state row.\n * Format: `cfi_state:{env}:{stackName}` — env namespacing ensures\n * cross-env isolation within the shared account-scoped D1.\n */\nexport function stateRowKey(env: string, stackName: string): string {\n return `cfi_state:${env}:${stackName}`;\n}\n\nexport function createEmptyCfiState(tenantId: string, env: string): CfiState {\n return {\n tenantId,\n env,\n schemaVersion: STATE_SCHEMA_VERSION,\n syncedAt: new Date().toISOString(),\n resources: {},\n revision: 0,\n tenants: {},\n };\n}\n\n/** In-place upgrade for parsed JSON before Zod validation. */\nexport function migrateRawCfiStateInPlace(raw: Record<string, unknown>): void {\n const v = raw.schemaVersion;\n if (typeof v !== \"number\") {\n throw new Error(\"tamer state: schemaVersion must be a number\");\n }\n if (v < 2) {\n throw new Error(`tamer state: unsupported schemaVersion ${v}`);\n }\n if (v > STATE_SCHEMA_VERSION) {\n throw new Error(\n `tamer state: unknown schemaVersion ${v} (engine supports up to ${STATE_SCHEMA_VERSION})`,\n );\n }\n if (v === 2) {\n raw.tenants = {};\n raw.revision = 0;\n raw.schemaVersion = 3;\n }\n if (!raw.tenants || typeof raw.tenants !== \"object\") {\n raw.tenants = {};\n }\n if (typeof raw.revision !== \"number\") {\n raw.revision = 0;\n }\n if (raw.schemaVersion === 3) {\n raw.schemaVersion = 4;\n }\n if (raw.schemaVersion === 4) {\n raw.schemaVersion = STATE_SCHEMA_VERSION;\n }\n}\n\nexport async function findTamerStateDatabaseUuid(\n api: CFApiClient,\n): Promise<string | undefined> {\n const name = tamerStateDatabaseName();\n const all = await api.d1ListAll();\n return all.find((d) => d.name === name)?.uuid;\n}\n\n/**\n * Create `tamer-state` (account-scoped) if missing, ensure `tamer_kv` table.\n * When `env` is provided, also seeds an initial empty\n * `cfi_state:{env}:{stackName}` row for that stack. When `env` is omitted\n * (e.g. from `tamer bootstrap`), only creates the D1 + table — the first\n * `tamer apply` will seed the row automatically via the StateManager.\n *\n * Idempotent — re-running is always safe.\n */\nexport async function ensureTamerStateDatabase(\n api: CFApiClient,\n tenantId: string,\n env?: string,\n stackName: string = DEFAULT_STACK_NAME,\n): Promise<string> {\n let uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) {\n const created = await api.d1Create(tamerStateDatabaseName());\n uuid = created.uuid;\n }\n\n await api.d1Query(\n uuid,\n `CREATE TABLE IF NOT EXISTS tamer_kv (\n k TEXT PRIMARY KEY,\n v TEXT NOT NULL\n )`,\n );\n\n if (!env) return uuid;\n\n const rowKey = stateRowKey(env, stackName);\n const { rows } = await api.d1Query(\n uuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n if (rows.length === 0) {\n const initial = createEmptyCfiState(tenantId, env);\n await api.d1Query(\n uuid,\n `INSERT INTO tamer_kv (k, v) VALUES (?, ?)`,\n [rowKey, JSON.stringify(initial)],\n );\n }\n\n return uuid;\n}\n\nexport function parseCfiStateJson(json: string): CfiState {\n const raw = JSON.parse(json) as Record<string, unknown>;\n migrateRawCfiStateInPlace(raw);\n const result = CfiStateSchema.safeParse(raw);\n if (!result.success) {\n throw new Error(`Invalid tamer state JSON: ${result.error.message}`);\n }\n return result.data as CfiState;\n}\n\n/**\n * Delete all state rows for a specific env from the shared account-scoped D1.\n * Used by `tamer destroy --wipe-metadata` to clean up an env's state without\n * affecting other envs that share the same `tamer-state` database.\n *\n * Note: this does NOT delete the D1 database itself — the shared `tamer-state`\n * database persists for other envs. To remove Tamer entirely from an account,\n * delete the D1/R2 resources manually via the Cloudflare dashboard.\n */\nexport async function deleteEnvStateRows(\n api: CFApiClient,\n env: string,\n): Promise<boolean> {\n const uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) return false;\n await api.d1Query(\n uuid,\n `DELETE FROM tamer_kv WHERE k LIKE ?`,\n [`cfi_state:${env}:%`],\n );\n return true;\n}\n","import type { TenantMeta } from \"../../types.js\";\nimport { isEphemeralEnv } from \"../../features/dispatch-namespace/dispatch-namespace.resolve.js\";\n\n/** Stable map key for `CfiState.tenants` (workspace-scoped product tenant). */\nexport function tenantStateKey(product: string, workspace: string): string {\n return `${product}:${workspace}`;\n}\n\n/**\n * Dispatch-namespace script name per `docs/handoff.md` §6: non-ephemeral\n * envs collapse to `{product}-{workspace}` (one script per workspace);\n * ephemeral envs (matching `tenant.ephemeralEnvPattern`) carry the env\n * in the script name (`{product}-{workspace}-{env}`) so multiple\n * previews can coexist in the shared `{ns}-ephemeral` namespace.\n */\nexport function tenantDispatchScriptName(\n product: string,\n workspace: string,\n env: string,\n tenant: TenantMeta,\n): string {\n if (isEphemeralEnv(env, tenant)) {\n return `${product}-${workspace}-${env}`;\n }\n return `${product}-${workspace}`;\n}\n\nconst SAFE = /[^a-z0-9_-]/gi;\n\n/**\n * Per-shard D1 database name for a tenant. Stable across `provision-tenant`\n * runs and across env so re-provisioning + drift detection can match by\n * name. Format: `db_{role}_{w}_{p}_t_{tid}_{env}`.\n *\n * db_system_acme_todo_t_platform_prod\n * db_app_acme_todo_t_platform_prod\n *\n * `role` is whatever the operator declared in `tenant.d1Shards` in\n * `tamer.config.ts`. Tamer is opinion-free about the shard layout — a\n * Dragoncore-style product picks `[\"system\", \"app\", \"history\"]`, a\n * single-DB tenant picks `[\"main\"]`, an audit-only tenant picks\n * `[\"audit\"]`, etc. The role itself is validated by the loader (lowercase\n * ASCII subset) so it slots cleanly into the D1 naming scheme.\n *\n * D1 names are length-bounded (Cloudflare currently allows up to 64\n * chars), and this scheme keeps every shard well under that limit even\n * for long workspace + product slugs.\n */\nexport function tenantShardDatabaseName(\n role: string,\n workspace: string,\n product: string,\n platformTenantId: string,\n env: string,\n): string {\n const w = workspace.replace(SAFE, \"_\").toLowerCase();\n const p = product.replace(SAFE, \"_\").toLowerCase();\n return `db_${role}_${w}_${p}_t_${platformTenantId}_${env}`;\n}\n\n/**\n * Parse + validate a `--shards a,b,c` CLI argument against the configured\n * shard set in `tamer.config.ts`. The CLI flag may only **trim** the\n * configured layout (e.g. `--shards system` on a stack whose config\n * declares `[\"system\",\"app\",\"history\"]` provisions just the system\n * shard for an ephemeral preview); it cannot extend it, because the\n * config is the source of truth that `apply` / `drift` / `destroy`\n * other operators read.\n *\n * Returns the requested roles in canonical order (matches `allowed`\n * order, regardless of input order) so plan/apply output is\n * deterministic and partial-failure resumes pick up at the next\n * canonical role.\n */\nexport function parseTenantShardRoles(\n raw: string,\n allowed: readonly string[],\n): string[] {\n const allowedSet = new Set(allowed);\n const requested = raw\n .split(\",\")\n .map((s) => s.trim().toLowerCase())\n .filter(Boolean);\n const unknown = requested.filter((r) => !allowedSet.has(r));\n if (unknown.length > 0) {\n const list = allowed.length > 0 ? allowed.join(\", \") : \"(none configured)\";\n throw new Error(\n `unknown tenant shard role(s) \"${unknown.join(\", \")}\"; ` +\n `must be a subset of tenant.d1Shards in the Tamer project config: ${list}`,\n );\n }\n const seen = new Set(requested);\n return allowed.filter((r) => seen.has(r));\n}\n","/** Thrown when D1 `cfi_state` was updated by another writer since {@link StateManager.hydrate}. */\nexport class StateConflictError extends Error {\n readonly code = \"STATE_CONFLICT\" as const;\n constructor(message: string) {\n super(message);\n this.name = \"StateConflictError\";\n }\n}\n","import type {\n CfiState,\n CfiOperationName,\n CfiOperationRecord,\n CfiStackMeta,\n CfiStackOutputValue,\n StateEntry,\n TenantStateEntry,\n} from \"../../types.js\";\nimport type { CFApiClient } from \"../api/CFApiClient.js\";\nimport {\n createEmptyCfiState,\n findTamerStateDatabaseUuid,\n parseCfiStateJson,\n stateRowKey,\n} from \"./tamerStateDb.js\";\nimport { tenantStateKey } from \"../tenant/tenantKeys.js\";\nimport { StateConflictError } from \"./StateConflictError.js\";\nimport { DEFAULT_STACK_NAME } from \"./stackName.js\";\n\nconst OPERATION_HISTORY_CAP = 50;\n\n/**\n * Authoritative deployment state for an env.\n *\n * - **Non-local:** stored as JSON in Cloudflare D1 (`tamer-state`,\n * account-scoped). Each env's state is isolated by row key:\n * `cfi_state:{env}:{stackName}`.\n * Call {@link hydrate} before {@link load}, then {@link persist} after mutations.\n * - **local:** in-memory only (no persistence).\n */\nexport class StateManager {\n private state: CfiState | null = null;\n private dirty = false;\n /** Set when {@link hydrate} loads remote state. */\n private tamerStateDbUuid: string | null = null;\n /**\n * Remote `revision` at last hydrate (or last successful persist). Used for\n * optimistic concurrency on D1 persist.\n */\n private baselineRevision = 0;\n\n /**\n * @param tenantId `config.tenant.id` — recorded on the state row for\n * diagnostics; not part of the row key.\n * @param env Cloudflare environment name; included in the D1 row key\n * (`cfi_state:{env}:{stackName}`) for isolation within the\n * shared account-scoped `tamer-state` database.\n * @param stackName Stack identity (`config.stack.name ?? tenant.slug`).\n * Combined with env to form the D1 row key, so multiple\n * stacks and multiple envs coexist in one D1 without\n * clobbering each other. Defaults to `\"default\"`.\n */\n constructor(\n private tenantId: string,\n private env: string,\n private stackName: string = DEFAULT_STACK_NAME,\n ) {}\n\n /**\n * Load state from D1 (remote) or allocate empty state (local).\n * Required before {@link load} for every command.\n */\n async hydrate(api: CFApiClient): Promise<void> {\n if (this.state) return;\n\n if (this.env === \"local\") {\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n return;\n }\n\n const uuid = await findTamerStateDatabaseUuid(api);\n if (!uuid) {\n throw new Error(\n `Tamer state database \"tamer-state\" not found. Run: tamer bootstrap --env ${this.env}`,\n );\n }\n this.tamerStateDbUuid = uuid;\n\n const rowKey = stateRowKey(this.env, this.stackName);\n const { rows } = await api.d1Query(\n uuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n if (rows.length === 0) {\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n this.dirty = true;\n return;\n }\n const v = rows[0]![\"v\"];\n if (typeof v !== \"string\") {\n throw new Error(`tamer_kv.${rowKey} must be a string column`);\n }\n this.state = parseCfiStateJson(v);\n this.baselineRevision = this.state.revision ?? 0;\n }\n\n /**\n * Stack identifier this manager is bound to (the `cfi_state:{name}` row\n * key suffix). Exposed so `fetchStackImports` and diagnostics can show\n * the operator which row this manager owns.\n */\n getStackName(): string {\n return this.stackName;\n }\n\n /**\n * Allocate empty in-memory state without touching D1. Use for read-only\n * \"what-would-state-look-like\" snapshots (e.g. drift-aware plan refresh)\n * where we want to drive the module `sync` hooks against a fresh slate\n * and then discard the result. {@link persist} is unsafe afterwards\n * because there is no D1 baseline to compare against.\n */\n hydrateInMemory(): void {\n if (this.state) return;\n this.state = createEmptyCfiState(this.tenantId, this.env);\n this.baselineRevision = this.state.revision ?? 0;\n }\n\n /** Clear cached state so the next {@link hydrate} reloads from D1. */\n reset(): void {\n this.state = null;\n this.tamerStateDbUuid = null;\n this.dirty = false;\n this.baselineRevision = 0;\n }\n\n load(): CfiState {\n if (!this.state) {\n throw new Error(\"StateManager: call await hydrate(api) before load()\");\n }\n return this.state;\n }\n\n get(derivedName: string): StateEntry | undefined {\n const s = this.load();\n return s.resources[derivedName];\n }\n\n set(derivedName: string, entry: StateEntry): void {\n const s = this.load();\n s.resources[derivedName] = entry;\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n delete(derivedName: string): void {\n const s = this.load();\n delete s.resources[derivedName];\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n getAll(): Record<string, StateEntry> {\n return this.load().resources;\n }\n\n getTenant(product: string, workspace: string): TenantStateEntry | undefined {\n const s = this.load();\n return s.tenants?.[tenantStateKey(product, workspace)];\n }\n\n setTenant(entry: TenantStateEntry): void {\n const s = this.load();\n if (!s.tenants) s.tenants = {};\n s.tenants[tenantStateKey(entry.product, entry.workspace)] = entry;\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n deleteTenant(product: string, workspace: string): void {\n const s = this.load();\n if (!s.tenants) return;\n delete s.tenants[tenantStateKey(product, workspace)];\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n listTenants(): TenantStateEntry[] {\n return Object.values(this.load().tenants ?? {});\n }\n\n /** CloudFormation-style stack metadata (name, owner). Returns a copy. */\n getStackMeta(): CfiStackMeta | undefined {\n const s = this.load().stack;\n return s ? { ...s } : undefined;\n }\n\n /**\n * Set or merge stack metadata. Pass `undefined` fields to clear them; only\n * provided keys are written, so callers can update one field at a time.\n */\n setStackMeta(meta: CfiStackMeta): void {\n const s = this.load();\n s.stack = { ...(s.stack ?? {}), ...meta };\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n /**\n * Resolved + persisted `outputs:` for this stack. Returns `{}` when none\n * have been recorded yet (e.g. before the first successful `apply`). The\n * returned object is a shallow copy — mutate via {@link replaceStackOutputs}.\n */\n getStackOutputs(): Record<string, CfiStackOutputValue> {\n return { ...(this.load().stackOutputs ?? {}) };\n }\n\n /**\n * Replace this stack's `stackOutputs` map wholesale. Pass `{}` to clear\n * (e.g. when `outputs` is removed from `tamer.config.ts`); pass a fresh\n * map keyed by output name to commit a successful apply's resolved values.\n * No-op when the new map is structurally identical to the existing one\n * (avoids gratuitous `revision` bumps on no-op applies).\n */\n replaceStackOutputs(next: Record<string, CfiStackOutputValue>): void {\n const s = this.load();\n const prev = s.stackOutputs ?? {};\n if (stackOutputsEqual(prev, next)) return;\n if (Object.keys(next).length === 0) {\n delete s.stackOutputs;\n } else {\n s.stackOutputs = { ...next };\n }\n s.syncedAt = new Date().toISOString();\n this.dirty = true;\n }\n\n getLastOperation(): CfiOperationRecord | undefined {\n return this.load().lastOperation;\n }\n\n /** Completed operations (`succeeded` / `failed` only), newest first. */\n getOperationHistory(): CfiOperationRecord[] {\n const h = this.load().operationHistory;\n return h ? h.map((e) => ({ ...e })) : [];\n }\n\n /**\n * Begin recording a CloudFormation-style operation marker. Sets `status:\n * \"in_progress\"` and `startedAt`; pair with {@link finishOperation} on\n * success or {@link failOperation} on error. Persist between calls if the\n * operation may take a long time and you want concurrent operators to see\n * the in-progress marker.\n */\n beginOperation(command: CfiOperationName, detail?: string): void {\n const s = this.load();\n s.lastOperation = {\n command,\n status: \"in_progress\",\n startedAt: new Date().toISOString(),\n detail,\n };\n s.syncedAt = s.lastOperation.startedAt;\n this.dirty = true;\n }\n\n finishOperation(detail?: string): void {\n const s = this.load();\n if (!s.lastOperation) return;\n s.lastOperation.status = \"succeeded\";\n s.lastOperation.completedAt = new Date().toISOString();\n if (detail !== undefined) s.lastOperation.detail = detail;\n s.syncedAt = s.lastOperation.completedAt;\n this.appendTerminalOperationToHistory(s.lastOperation);\n this.dirty = true;\n }\n\n failOperation(errorMessage: string): void {\n const s = this.load();\n if (!s.lastOperation) return;\n s.lastOperation.status = \"failed\";\n s.lastOperation.completedAt = new Date().toISOString();\n s.lastOperation.errorMessage = errorMessage;\n s.syncedAt = s.lastOperation.completedAt;\n this.appendTerminalOperationToHistory(s.lastOperation);\n this.dirty = true;\n }\n\n private appendTerminalOperationToHistory(op: CfiOperationRecord): void {\n if (op.status !== \"succeeded\" && op.status !== \"failed\") return;\n const s = this.load();\n const entry: CfiOperationRecord = {\n command: op.command,\n status: op.status,\n startedAt: op.startedAt,\n completedAt: op.completedAt,\n errorMessage: op.errorMessage,\n detail: op.detail,\n };\n const prev = s.operationHistory ?? [];\n s.operationHistory = [entry, ...prev].slice(0, OPERATION_HISTORY_CAP);\n }\n\n /**\n * Persist to D1 (no-op for local). Uses optimistic concurrency: re-reads\n * `revision` before write; throws {@link StateConflictError} if another\n * writer advanced the row since {@link hydrate}.\n */\n async persist(api: CFApiClient): Promise<void> {\n if (this.env === \"local\") {\n this.dirty = false;\n return;\n }\n if (!this.dirty || !this.state || !this.tamerStateDbUuid) return;\n\n const rowKey = stateRowKey(this.env, this.stackName);\n const { rows } = await api.d1Query(\n this.tamerStateDbUuid,\n `SELECT v FROM tamer_kv WHERE k = ?`,\n [rowKey],\n );\n let remoteRev = 0;\n if (rows.length > 0) {\n const v = rows[0]![\"v\"];\n if (typeof v === \"string\") {\n remoteRev = parseCfiStateJson(v).revision ?? 0;\n }\n }\n if (remoteRev !== this.baselineRevision) {\n throw new StateConflictError(\n `Tamer state conflict (stack=${this.stackName}): remote revision ${remoteRev} !== expected ${this.baselineRevision}. Re-run after refresh.`,\n );\n }\n\n this.state.revision = remoteRev + 1;\n this.state.syncedAt = new Date().toISOString();\n const json = JSON.stringify(this.state);\n await api.d1Query(\n this.tamerStateDbUuid,\n `INSERT INTO tamer_kv (k, v) VALUES (?, ?)\n ON CONFLICT(k) DO UPDATE SET v = excluded.v`,\n [rowKey, json],\n );\n this.baselineRevision = this.state.revision;\n this.dirty = false;\n }\n\n /** Mark clean without writing (e.g. before deleting the state database). */\n clearDirty(): void {\n this.dirty = false;\n }\n}\n\nfunction stackOutputsEqual(\n a: Record<string, CfiStackOutputValue>,\n b: Record<string, CfiStackOutputValue>,\n): boolean {\n const ak = Object.keys(a).sort();\n const bk = Object.keys(b).sort();\n if (ak.length !== bk.length) return false;\n for (let i = 0; i < ak.length; i++) {\n if (ak[i] !== bk[i]) return false;\n const k = ak[i]!;\n const av = a[k]!;\n const bv = b[k]!;\n // `resolvedAt` is intentionally excluded — same value+source = no churn.\n if (av.value !== bv.value || av.source !== bv.source) return false;\n }\n return true;\n}\n","/**\n * Cross-stack import pre-fetch.\n *\n * `${tamer:import:<stack>.<output>}` is Tamer's CloudFormation\n * `Fn::ImportValue` analogue — a stack reads outputs published by a sibling\n * stack that lives in the same `tamer-state-{env}` D1 (see\n * `cfi_state:{stack}` row keying). This module:\n *\n * 1. Statically scans the current project config for every\n * `${tamer:import:<stack>.<output>}` reference (vars, tamerRoutes, worker\n * `services[].service`, `dispatch_namespaces[].namespace`, `outputs`, …).\n * 2. Pre-fetches each referenced sibling stack's persisted outputs at\n * command start so {@link ReferenceContext.imports} is fully populated\n * before any `resolveReferencesInString` call fires. Resolution is\n * then a pure map lookup (no D1 round-trips mid-resolution → no\n * partial-failure modes).\n *\n * Pre-fetch failures are intentionally surfaced eagerly. If an imported\n * stack has no state row at all (never `apply`d) we record an empty\n * outputs map; the `lookupImport` step then throws with a clear \"run\n * apply on <stack>\" message rather than a generic \"no such reference\".\n */\nimport type { CFApiClient } from \"../api/CFApiClient.js\";\nimport { materializeTamerResolvable } from \"../../dx/normalize.js\";\nimport type {\n CfiConfig,\n TamerResolvableString,\n WranglerR2BucketResolvable,\n} from \"../../types.js\";\nimport { getDispatchNamespaces } from \"../../types.js\";\nimport { StateManager } from \"../state/StateManager.js\";\nimport { stackNameForConfig } from \"../state/stackName.js\";\n\nconst IMPORT_RE = /\\$\\{tamer:import:([a-zA-Z0-9_-]+)\\.([a-zA-Z0-9_-]+)\\}/g;\n\n/** A single `${tamer:import:<stack>.<output>}` site collected by scan. */\nexport interface DiscoveredImportRef {\n stack: string;\n output: string;\n /** Free-form pointer for diagnostics (e.g. `worker[api].vars.DB_ID`). */\n fieldPath: string;\n}\n\n/**\n * Walk the merged `CfiConfig` and collect every `${tamer:import:…}` ref\n * site along with where it was found. Used both to drive the pre-fetch\n * (which sibling stacks to load) and by `tamer status` to render an\n * \"inbound imports\" panel even before any `apply` has run.\n *\n * Self-imports (current stack importing from its own name) are filtered\n * out — they are almost always a config typo and would otherwise\n * silently resolve via the same row this command is about to write.\n */\nexport function scanConfigForImports(\n config: CfiConfig,\n): DiscoveredImportRef[] {\n const selfStack = stackNameForConfig(config);\n const refs: DiscoveredImportRef[] = [];\n const seen = new Set<string>();\n const push = (raw: string | undefined, fieldPath: string) => {\n if (!raw) return;\n IMPORT_RE.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = IMPORT_RE.exec(raw)) !== null) {\n const stack = m[1]!;\n const output = m[2]!;\n if (stack === selfStack) continue;\n const key = `${fieldPath}::${stack}.${output}`;\n if (seen.has(key)) continue;\n seen.add(key);\n refs.push({ stack, output, fieldPath });\n }\n };\n\n const walkVars = (\n vars: Record<string, TamerResolvableString> | undefined,\n pathPrefix: string,\n ) => {\n if (!vars) return;\n for (const [k, v] of Object.entries(vars)) {\n push(materializeTamerResolvable(v), `${pathPrefix}.${k}`);\n }\n };\n\n const walkR2BucketNames = (\n w: { r2_buckets?: WranglerR2BucketResolvable[] | undefined },\n pathPrefix: string,\n ) => {\n if (!w.r2_buckets) return;\n w.r2_buckets.forEach((b, i) => {\n if (b.bucket_name === undefined) return;\n push(\n materializeTamerResolvable(b.bucket_name),\n `${pathPrefix}.r2_buckets[${i}].bucket_name`,\n );\n });\n };\n\n const walkD1DatabaseNames = (\n w: { resources?: { d1?: Array<{ databaseName?: TamerResolvableString }> } },\n pathPrefix: string,\n ) => {\n const d1 = w.resources?.d1;\n if (!d1) return;\n d1.forEach((d, i) => {\n if (d.databaseName === undefined) return;\n push(\n materializeTamerResolvable(d.databaseName),\n `${pathPrefix}.resources.d1[${i}].databaseName`,\n );\n });\n };\n\n /** Service bindings / WfP namespace strings may carry `${tamer:import:…}`. */\n const walkBindingsWithRefs = (\n w: {\n services?: Array<{ service?: TamerResolvableString }>;\n dispatch_namespaces?: Array<{ namespace?: TamerResolvableString }>;\n },\n pathPrefix: string,\n ) => {\n w.services?.forEach((s, i) => {\n if (s.service === undefined) return;\n push(\n materializeTamerResolvable(s.service),\n `${pathPrefix}.services[${i}].service`,\n );\n });\n w.dispatch_namespaces?.forEach((d, i) => {\n if (d.namespace === undefined) return;\n push(\n materializeTamerResolvable(d.namespace),\n `${pathPrefix}.dispatch_namespaces[${i}].namespace`,\n );\n });\n };\n\n if (config.worker) {\n walkVars(config.worker.vars, \"worker.vars\");\n walkR2BucketNames(config.worker, \"worker\");\n walkD1DatabaseNames(config.worker, \"worker\");\n walkBindingsWithRefs(config.worker, \"worker\");\n if (config.worker.tamerRoutes) {\n config.worker.tamerRoutes.forEach((r, i) => {\n push(r.host, `worker.tamerRoutes[${i}].host`);\n push(r.zone, `worker.tamerRoutes[${i}].zone`);\n });\n }\n }\n if (config.workers) {\n for (const [key, w] of Object.entries(config.workers)) {\n walkVars(w.vars, `worker[${key}].vars`);\n walkR2BucketNames(w, `worker[${key}]`);\n walkD1DatabaseNames(w, `worker[${key}]`);\n walkBindingsWithRefs(w, `worker[${key}]`);\n if (w.tamerRoutes) {\n w.tamerRoutes.forEach((r, i) => {\n push(r.host, `worker[${key}].tamerRoutes[${i}].host`);\n push(r.zone, `worker[${key}].tamerRoutes[${i}].zone`);\n });\n }\n }\n }\n if (config.outputs) {\n for (const [name, source] of Object.entries(config.outputs)) {\n push(materializeTamerResolvable(source), `outputs.${name}`);\n }\n }\n // Dispatch namespace declarations are static identifiers today — no\n // string-interpolated fields that could carry imports — but if that\n // changes, extend here. Keeping the call site documented:\n void getDispatchNamespaces;\n\n return refs;\n}\n\n/** Distinct sibling stack names referenced anywhere in `config`. */\nexport function importedStackNames(config: CfiConfig): string[] {\n const refs = scanConfigForImports(config);\n return [...new Set(refs.map((r) => r.stack))].sort();\n}\n\n/**\n * Hydrate every imported sibling stack's persisted outputs and return\n * them shaped for {@link ReferenceContext.imports}.\n *\n * - `local` env: returns `{}` immediately. Local mode never persists\n * state, so cross-stack imports are inherently unresolvable. Callers\n * running in tolerant mode (`plan`, `status`) will see the placeholder\n * verbatim; strict callers (`apply`, `deploy`) will fail at resolution\n * with a clear \"no imported stack\" message.\n * - Missing sibling state row: recorded as an empty outputs map, so\n * `lookupImport` can produce a \"no published outputs\" diagnostic\n * (vs. the generic \"stack not pre-fetched\" error).\n *\n * The {@link CFApiClient} is shared with the caller for socket reuse.\n */\nexport async function fetchStackImports(\n api: CFApiClient,\n config: CfiConfig,\n env: string,\n): Promise<Record<string, Record<string, string>>> {\n const stacks = importedStackNames(config);\n if (stacks.length === 0 || env === \"local\") return {};\n\n const out: Record<string, Record<string, string>> = {};\n for (const stack of stacks) {\n // Each sibling gets its own StateManager so the returned outputs are\n // fully decoupled from the current stack's mutable state. We never\n // call `persist` on these — read-only.\n const sibling = new StateManager(config.tenant.id, env, stack);\n try {\n await sibling.hydrate(api);\n } catch (err) {\n // A missing tamer-state-{env} D1 surfaces here as \"Tamer state\n // database not found\"; that's a hard error common to every stack\n // in the env, so re-throw rather than silently degrade.\n throw new Error(\n `Failed to hydrate imported stack \"${stack}\" from env \"${env}\": ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n const persisted = sibling.getStackOutputs();\n const flat: Record<string, string> = {};\n for (const [name, v] of Object.entries(persisted)) {\n flat[name] = v.value;\n }\n out[stack] = flat;\n }\n return out;\n}\n","import type { WorkerConfig } from \"../../types.js\";\n\n/** Declared secret names for a worker; empty when `secrets` is absent. */\nexport function requiredSecretsForWorker(workerConfig: WorkerConfig): string[] {\n return workerConfig.secrets?.required ?? [];\n}\n","import type { NamingConventions, TenantMeta } from \"../../types.js\";\n\nfunction reLiteral(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nexport class NamingEngine {\n constructor(\n private tenant: TenantMeta,\n private conventions?: NamingConventions\n ) {}\n\n /** Tenant id for per-resource {@link CloudflareNameFn} overrides. */\n get tenantId(): string {\n return this.tenant.id;\n }\n\n d1SingleName(logicalName: string, env: string): string {\n if (this.conventions?.d1Single) {\n return this.conventions.d1Single(logicalName, this.tenant.id, env);\n }\n return `db_${logicalName}_t_${this.tenant.id}_${env}`;\n }\n\n d1ShardName(\n logicalName: string,\n shardDate: string,\n env: string\n ): string {\n if (this.conventions?.d1Shard) {\n return this.conventions.d1Shard(\n logicalName,\n shardDate,\n this.tenant.id,\n env\n );\n }\n const dateNoDashes = shardDate.replace(/-/g, \"\");\n if (logicalName === \"default\" || logicalName === \"\") {\n return `db_${dateNoDashes}_t_${this.tenant.id}_${env}`;\n }\n return `db_${logicalName}_${dateNoDashes}_t_${this.tenant.id}_${env}`;\n }\n\n d1SingleBindingKey(logicalName: string): string {\n return `DB_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n d1ShardBindingKey(logicalName: string, shardDate: string): string {\n const dateNoDashes = shardDate.replace(/-/g, \"\");\n return `DB_${logicalName.toUpperCase().replace(/-/g, \"_\")}_${dateNoDashes}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n r2BucketName(logicalName: string, env: string): string {\n if (this.conventions?.r2Bucket) {\n const dateNoDashes = new Date().toISOString().slice(0, 10).replace(/-/g, \"\");\n return this.conventions.r2Bucket(\n logicalName,\n dateNoDashes,\n this.tenant.id,\n env,\n );\n }\n return `r2-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n /**\n * Wrangler `r2_buckets[].binding`: logical + tenant only (same idea as {@link kvBindingKey}).\n * Stable across envs; default {@link r2BucketName} is `r2-{logical}-t-{tenant}-{env}`.\n */\n r2BindingKey(logicalName: string): string {\n return `R2_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n kvNamespaceName(logicalName: string, env: string): string {\n return `kv_${logicalName}_t_${this.tenant.id}_${env}`;\n }\n\n kvBindingKey(logicalName: string): string {\n return `KV_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n queueName(logicalName: string, env: string): string {\n return `q-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n queueBindingKey(logicalName: string): string {\n return `Q_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n hyperdriveName(logicalName: string, env: string): string {\n return `hd-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n hyperdriveBindingKey(logicalName: string): string {\n return `HD_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n vectorizeName(logicalName: string, env: string): string {\n return `vec-${logicalName}-t-${this.tenant.id}-${env}`;\n }\n\n vectorizeBindingKey(logicalName: string): string {\n return `VEC_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n /**\n * AI Gateway slug (== Cloudflare gateway id). Per the Cloudflare API,\n * gateway ids are case-sensitive lowercase ascii with `-`/`_`. Format:\n * `aigw-{logical}-t-{tenantId}-{env}`.\n */\n aiGatewayId(logicalName: string, env: string): string {\n return `aigw-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Stable cross-reference binding key for AI Gateway. AI Gateway has no\n * Wrangler binding kind today, so this is only consumed by\n * `${tamer:ai_gateway:<logical>.binding}` interpolations.\n */\n aiGatewayBindingKey(logicalName: string): string {\n return `AI_GW_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n /**\n * Cloudflare-side pipeline name. Pipelines V1 names must be lowercase\n * alphanumerics + hyphens (no underscores), so we mirror the R2 scheme.\n * Pattern: `pipe-{logical}-t-{tenantId}-{env}`.\n */\n pipelineName(logicalName: string, env: string): string {\n return `pipe-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Wrangler binding key emitted in `pipelines[]`. Uppercased logical with\n * the tenant id appended so two tenants can share a worker namespace\n * without colliding bindings.\n */\n pipelineBindingKey(logicalName: string): string {\n return `PIPE_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n pipelineMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.pipelineName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n /**\n * Cloudflare-side workflow name. Workflow names accept lowercase\n * alphanumerics + hyphens; we mirror the pipelines/AI-Gateway hyphen\n * scheme. Pattern: `wf-{logical}-t-{tenantId}-{env}`.\n */\n workflowName(logicalName: string, env: string): string {\n if (this.conventions?.workflow) {\n return this.conventions.workflow(logicalName, this.tenant.id, env);\n }\n return `wf-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Wrangler binding key emitted in `workflows[]`. Uppercased logical with\n * the tenant id appended so two tenants sharing a script can't collide.\n */\n workflowBindingKey(logicalName: string): string {\n return `WF_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n workflowMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.workflowName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n /**\n * Cloudflare Secrets Store name. Account-scoped — the API allows free-form\n * names (the dashboard examples use both `service_x_keys` and dashed\n * variants), so we mirror our hyphen convention for consistency with\n * pipelines / workflows / AI Gateway. Pattern:\n * `sec-{logical}-t-{tenantId}-{env}`.\n */\n secretsStoreName(logicalName: string, env: string): string {\n return `sec-${logicalName}-t-${this.tenant.id}-${env}`.toLowerCase();\n }\n\n /**\n * Stable cross-reference key for the store. Secrets Store has no Wrangler\n * binding kind directly — `secrets_store_secrets[]` references the\n * resolved `store_id`, not the store name — so this only powers\n * `${tamer:secret_store:<n>.binding}` interpolations.\n */\n secretsStoreBindingKey(logicalName: string): string {\n return `SEC_${logicalName.toUpperCase().replace(/-/g, \"_\")}_T_${this.tenant.id.toUpperCase()}`;\n }\n\n secretsStoreMatchPattern(\n logicalName: string,\n env: string,\n ): (name: string) => boolean {\n const exact = this.secretsStoreName(logicalName, env);\n return (name: string) => name === exact;\n }\n\n workerName(workerKey: string, env: string | \"local\"): string {\n if (this.conventions?.workerName) {\n return this.conventions.workerName(\n this.tenant.slug,\n workerKey,\n env,\n this.tenant.id\n );\n }\n if (env === \"local\") {\n return `${this.tenant.slug}-${workerKey}-${this.tenant.id}`;\n }\n return `${this.tenant.slug}-${workerKey}-${env}-${this.tenant.id}`;\n }\n\n /** Whether stack {@link NamingConventions.d1Shard} is configured. */\n hasD1ShardConvention(): boolean {\n return Boolean(this.conventions?.d1Shard);\n }\n\n d1MatchPattern(logicalName: string, env: string): (name: string) => boolean {\n if (this.conventions?.d1Shard) {\n return (name: string) => {\n const shardDate = this.extractD1ShardDate(name);\n if (!shardDate) return false;\n return this.d1ShardName(logicalName, shardDate, env) === name;\n };\n }\n const suffix = `_t_${this.tenant.id}_${env}`;\n if (logicalName === \"default\" || logicalName === \"\") {\n return (name: string) =>\n /^db_\\d{8}_t_/.test(name) && name.endsWith(suffix);\n }\n const prefix = `db_${logicalName}_`;\n return (name: string) =>\n name.startsWith(prefix) && name.endsWith(suffix);\n }\n\n /**\n * Default: exact {@link r2BucketName}, or legacy dated buckets\n * `r2-{logical}-{YYYYMMDD}-t-{tenant}-{env}` from older Tamer versions.\n * Custom {@link NamingConventions.r2Bucket}: exact name only (uses today's date\n * when calling the hook, same as apply).\n */\n r2MatchPattern(logicalName: string, env: string): (name: string) => boolean {\n if (this.conventions?.r2Bucket) {\n const expected = this.r2BucketName(logicalName, env);\n return (name: string) => name === expected;\n }\n const exactNew = `r2-${logicalName}-t-${this.tenant.id}-${env}`;\n const legacyDated = new RegExp(\n `^r2-${reLiteral(logicalName)}-\\\\d{8}-t-${reLiteral(this.tenant.id)}-${reLiteral(env)}$`,\n );\n return (name: string) => name === exactNew || legacyDated.test(name);\n }\n\n extractD1ShardDate(name: string): string | null {\n const compact = name.match(/_(\\d{8})_t_/);\n if (compact) {\n const d = compact[1];\n return `${d.slice(0, 4)}-${d.slice(4, 6)}-${d.slice(6, 8)}`;\n }\n const underscored = name.match(/_(\\d{4})_(\\d{2})_(\\d{2})_t_/);\n if (underscored) {\n return `${underscored[1]}-${underscored[2]}-${underscored[3]}`;\n }\n return null;\n }\n\n extractR2Date(name: string): string | null {\n const match = name.match(/r2-\\w+-(\\d{8})-t-/);\n if (match) {\n const d = match[1];\n return `${d.slice(0, 4)}-${d.slice(4, 6)}-${d.slice(6, 8)}`;\n }\n return null;\n }\n}\n","import type { CfiConfig } from \"../../types.js\";\nimport { NamingEngine } from \"../naming/NamingEngine.js\";\n\nexport function namingFromConfig(config: CfiConfig): NamingEngine {\n const conventions =\n \"naming\" in config && config.naming ? config.naming : undefined;\n return new NamingEngine(config.tenant, conventions);\n}\n","import type { CFApiClient } from \"../api/CFApiClient.js\";\nimport type { EncryptedSecret, SecretFingerprint } from \"./types.js\";\nimport {\n findTamerSecretsDatabaseUuid,\n SECRET_HISTORY_CAP,\n secretRowKey,\n} from \"./secretsDb.js\";\n\nexport interface VaultSecretRecord {\n name: string;\n ciphertext: Uint8Array;\n iv: Uint8Array;\n wrappedDek: Uint8Array;\n dekIv: Uint8Array;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface VaultSecretListItem {\n name: string;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\nexport interface SecretHistoryEntry {\n name: string;\n valueHash: SecretFingerprint;\n updatedAt: string;\n updatedBy?: string;\n}\n\n/**\n * Encrypted secrets vault backed by account-scoped `tamer-secrets` D1.\n * Each env's secrets are isolated by row key: `{env}:{secretName}`.\n * Stores ciphertext only — never plaintext.\n */\nexport class SecretsVault {\n private databaseId: string | undefined;\n\n constructor(\n private readonly api: CFApiClient,\n private readonly env: string,\n databaseId?: string,\n ) {\n this.databaseId = databaseId;\n }\n\n /** Convert a logical secret name to its D1 row key: `{env}:{name}`. */\n private key(name: string): string {\n return secretRowKey(this.env, name);\n }\n\n /** Reverse: strip the `{env}:` prefix from a D1 row key. */\n private unkey(rowKey: string): string {\n const prefix = `${this.env}:`;\n return rowKey.startsWith(prefix) ? rowKey.slice(prefix.length) : rowKey;\n }\n\n private async dbId(): Promise<string> {\n if (this.databaseId) return this.databaseId;\n const uuid = await findTamerSecretsDatabaseUuid(this.api);\n if (!uuid) {\n throw new Error(\n `secrets vault not provisioned (expected D1 \"tamer-secrets\"); run tamer bootstrap`,\n );\n }\n this.databaseId = uuid;\n return uuid;\n }\n\n async upsert(\n name: string,\n encrypted: EncryptedSecret,\n valueHash: SecretFingerprint,\n options?: { updatedBy?: string },\n ): Promise<void> {\n const updatedAt = new Date().toISOString();\n const updatedBy = options?.updatedBy;\n const db = await this.dbId();\n const key = this.key(name);\n\n await this.api.d1Query(\n db,\n `INSERT INTO secrets (\n name, ciphertext, iv, wrapped_dek, dek_iv, value_hash, updated_at, updated_by\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(name) DO UPDATE SET\n ciphertext = excluded.ciphertext,\n iv = excluded.iv,\n wrapped_dek = excluded.wrapped_dek,\n dek_iv = excluded.dek_iv,\n value_hash = excluded.value_hash,\n updated_at = excluded.updated_at,\n updated_by = excluded.updated_by`,\n [\n key,\n blobParam(encrypted.ciphertext),\n blobParam(encrypted.iv),\n blobParam(encrypted.wrappedDek),\n blobParam(encrypted.dekIv),\n valueHash,\n updatedAt,\n updatedBy ?? null,\n ],\n );\n\n await this.api.d1Query(\n db,\n `INSERT INTO secret_history (name, value_hash, updated_at, updated_by)\n VALUES (?, ?, ?, ?)`,\n [key, valueHash, updatedAt, updatedBy ?? null],\n );\n\n await this.api.d1Query(\n db,\n `DELETE FROM secret_history\n WHERE name = ?\n AND rowid IN (\n SELECT rowid FROM (\n SELECT rowid FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC\n LIMIT -1 OFFSET ?\n )\n )`,\n [key, key, SECRET_HISTORY_CAP],\n );\n }\n\n async get(name: string): Promise<VaultSecretRecord | undefined> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, ciphertext, iv, wrapped_dek, dek_iv, value_hash, updated_at, updated_by\n FROM secrets WHERE name = ?`,\n [this.key(name)],\n );\n if (rows.length === 0) return undefined;\n return rowToVaultSecret(rows[0]!, this.env);\n }\n\n async list(): Promise<VaultSecretListItem[]> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, value_hash, updated_at, updated_by\n FROM secrets WHERE name LIKE ? ORDER BY name`,\n [`${this.env}:%`],\n );\n return rows.map((row) => ({\n name: this.unkey(String(row.name)),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n }));\n }\n\n async delete(name: string): Promise<boolean> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `DELETE FROM secrets WHERE name = ? RETURNING name`,\n [this.key(name)],\n );\n return rows.length > 0;\n }\n\n /** Append an audit row (e.g. after `secrets get`) without changing the secret. */\n async appendAudit(\n name: string,\n options?: { updatedBy?: string },\n ): Promise<void> {\n const record = await this.get(name);\n if (!record) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n const updatedAt = new Date().toISOString();\n const updatedBy = options?.updatedBy;\n const db = await this.dbId();\n const key = this.key(name);\n\n await this.api.d1Query(\n db,\n `INSERT INTO secret_history (name, value_hash, updated_at, updated_by)\n VALUES (?, ?, ?, ?)`,\n [key, record.valueHash, updatedAt, updatedBy ?? null],\n );\n\n await this.api.d1Query(\n db,\n `DELETE FROM secret_history\n WHERE name = ?\n AND rowid IN (\n SELECT rowid FROM (\n SELECT rowid FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC\n LIMIT -1 OFFSET ?\n )\n )`,\n [key, key, SECRET_HISTORY_CAP],\n );\n }\n\n async history(name: string): Promise<SecretHistoryEntry[]> {\n const db = await this.dbId();\n const { rows } = await this.api.d1Query(\n db,\n `SELECT name, value_hash, updated_at, updated_by\n FROM secret_history\n WHERE name = ?\n ORDER BY updated_at DESC`,\n [this.key(name)],\n );\n return rows.map((row) => ({\n name: this.unkey(String(row.name)),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n }));\n }\n}\n\nfunction rowToVaultSecret(\n row: Record<string, unknown>,\n env: string,\n): VaultSecretRecord {\n const rawName = String(row.name);\n const prefix = `${env}:`;\n return {\n name: rawName.startsWith(prefix) ? rawName.slice(prefix.length) : rawName,\n ciphertext: blobFromRow(row.ciphertext),\n iv: blobFromRow(row.iv),\n wrappedDek: blobFromRow(row.wrapped_dek),\n dekIv: blobFromRow(row.dek_iv),\n valueHash: row.value_hash as SecretFingerprint,\n updatedAt: String(row.updated_at),\n updatedBy: row.updated_by != null ? String(row.updated_by) : undefined,\n };\n}\n\n/** D1 HTTP API accepts base64 for BLOB bind parameters. */\nfunction blobParam(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString(\"base64\");\n}\n\nfunction blobFromRow(value: unknown): Uint8Array {\n if (value instanceof Uint8Array) return value;\n if (typeof value === \"string\") {\n return new Uint8Array(Buffer.from(value, \"base64\"));\n }\n if (Array.isArray(value)) {\n return new Uint8Array(value as number[]);\n }\n throw new Error(\"secrets vault: invalid BLOB column value\");\n}\n","import { getWorkers, loadConfig } from \"../../../core/config/loader.js\";\nimport {\n mergeWorkerConfigForResourcePick,\n resolveDeployedWorkerName,\n} from \"../../../core/config/resolver.js\";\nimport { fetchStackImports } from \"../../../core/imports/fetchStackImports.js\";\nimport { requiredSecretsForWorker } from \"../../../core/secrets/declared.js\";\nimport { resolve, relative } from \"path\";\nimport { cloudflareAccountIdFromEnv } from \"../../../core/cloudflareEnv.js\";\nimport { namingFromConfig } from \"../../../core/config/namingFromConfig.js\";\nimport { CFApiClient } from \"../../../core/api/CFApiClient.js\";\nimport { readMasterKeyFromEnv } from \"../../../core/secrets/masterKey.js\";\nimport { SecretsVault } from \"../../../core/secrets/SecretsVault.js\";\nimport type { SecretsVaultReader } from \"../../../core/secrets/reconcile.js\";\nimport { ensureTamerSecretsDatabase } from \"../../../core/secrets/secretsDb.js\";\nimport { StateManager } from \"../../../core/state/StateManager.js\";\nimport { stackNameForConfig } from \"../../../core/state/stackName.js\";\nimport type { CfiConfig, WorkerConfig } from \"../../../types.js\";\nexport function resolveSecretsEnv(env?: string): string {\n const resolved = env ?? \"dev\";\n if (resolved === \"local\") {\n throw new Error(\n 'secrets commands require a remote env (e.g. --env dev); \"local\" has no vault',\n );\n }\n return resolved;\n}\n\n/** Operator identity for vault audit rows (`USER` / `USERNAME` / `cli`). */\nexport function cliUpdatedBy(): string {\n return process.env.USER ?? process.env.USERNAME ?? \"cli\";\n}\n\nexport function vaultReaderFromVault(vault: SecretsVault): SecretsVaultReader {\n return {\n async get(name: string) {\n const row = await vault.get(name);\n if (!row) return undefined;\n return { name: row.name, valueHash: row.valueHash };\n },\n };\n}\n\nexport interface SecretsCommandContext {\n env: string;\n config: CfiConfig;\n api: CFApiClient;\n vault: SecretsVault;\n state: StateManager;\n naming: ReturnType<typeof namingFromConfig>;\n accountId: string;\n masterKey: Uint8Array;\n}\n\nexport async function createSecretsContext(options: {\n env?: string;\n configPath?: string;\n}): Promise<SecretsCommandContext> {\n const env = resolveSecretsEnv(options.env);\n const config = await loadConfig(options.configPath, { env });\n const accountId = config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n\n const api = new CFApiClient(accountId);\n const secretsUuid = await ensureTamerSecretsDatabase(api);\n const vault = new SecretsVault(api, env, secretsUuid);\n const state = new StateManager(\n config.tenant.id,\n env,\n stackNameForConfig(config),\n );\n await state.hydrate(api);\n const masterKey = readMasterKeyFromEnv(env);\n\n return {\n env,\n config,\n api,\n vault,\n state,\n naming: namingFromConfig(config),\n accountId,\n masterKey,\n };\n}\n\nexport interface SecretWorkerInput {\n workerKey: string;\n required: string[];\n workerSecretNames: string[];\n deployedName: string;\n}\n\nexport async function collectSecretWorkers(\n ctx: SecretsCommandContext,\n workerFilter?: string,\n): Promise<SecretWorkerInput[]> {\n const workers = await getWorkers(ctx.config);\n const imports = await fetchStackImports(ctx.api, ctx.config, ctx.env).catch(\n () => ({}),\n );\n const out: SecretWorkerInput[] = [];\n\n for (const [workerKey, workerConfig] of workers) {\n if (workerFilter && workerKey !== workerFilter) continue;\n\n const merged = mergeWorkerConfigForResourcePick(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.accountId,\n ctx.naming,\n ctx.state,\n { referencesMode: \"tolerant\", imports },\n );\n const required = requiredSecretsForWorker(merged);\n if (required.length === 0) continue;\n\n const deployedName = resolveDeployedWorkerName(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.naming,\n );\n\n let workerSecretNames: string[] = [];\n try {\n workerSecretNames = await ctx.api.workersSecretsList(deployedName);\n } catch {\n workerSecretNames = [];\n }\n\n out.push({ workerKey, required, workerSecretNames, deployedName });\n }\n\n return out;\n}\n\nexport function assertSecretName(name: string | undefined): string {\n const trimmed = name?.trim();\n if (!trimmed) {\n throw new Error(\"secret name is required\");\n }\n return trimmed;\n}\n\nexport interface WorkerSecretsLoadTarget {\n workerKey: string;\n workerDir: string;\n required: string[];\n}\n\n/** Resolve worker dir + declared secret names for `secrets load`. */\nexport async function resolveWorkerSecretsLoadTarget(\n ctx: SecretsCommandContext,\n workerKey: string,\n options?: { skipUndeclared?: boolean },\n): Promise<WorkerSecretsLoadTarget | null> {\n const baseDir = process.cwd();\n const workers = await getWorkers(ctx.config, baseDir);\n const hit = workers.find(([key]) => key === workerKey);\n if (!hit) {\n const available = workers.map(([key]) => key).sort().join(\", \");\n throw new Error(\n `secrets load: worker \"${workerKey}\" not found in config` +\n (available ? ` (available: ${available})` : \"\"),\n );\n }\n\n const [, workerConfig] = hit;\n const imports = await fetchStackImports(ctx.api, ctx.config, ctx.env).catch(\n () => ({}),\n );\n const merged = mergeWorkerConfigForResourcePick(\n ctx.config,\n workerKey,\n workerConfig,\n ctx.env,\n ctx.accountId,\n ctx.naming,\n ctx.state,\n { referencesMode: \"tolerant\", imports },\n );\n const required = requiredSecretsForWorker(merged);\n if (required.length === 0) {\n if (options?.skipUndeclared) return null;\n throw new Error(\n `secrets load: worker \"${workerKey}\" has no secrets.required — declare names in config first`,\n );\n }\n\n const workerDir = workerConfig.path\n ? resolve(baseDir, workerConfig.path)\n : baseDir;\n\n return { workerKey, workerDir, required };\n}\n\n/** Path for logs — relative to cwd when possible. */\nexport function displayPathFromCwd(absOrRel: string): string {\n const rel = relative(process.cwd(), resolve(process.cwd(), absOrRel));\n return rel && !rel.startsWith(\"..\") ? rel.replace(/\\\\/g, \"/\") : absOrRel.replace(/\\\\/g, \"/\");\n}\n\n/** Vault + master key for deploy auto-push (remote envs only). */\nexport async function createDeploySecretsResources(\n api: CFApiClient,\n env: string,\n): Promise<{ vault: SecretsVault; masterKey: Uint8Array }> {\n const resolvedEnv = resolveSecretsEnv(env);\n const secretsUuid = await ensureTamerSecretsDatabase(api);\n const vault = new SecretsVault(api, resolvedEnv, secretsUuid);\n const masterKey = readMasterKeyFromEnv(resolvedEnv);\n return { vault, masterKey };\n}\n\nexport type WorkerConfigEntry = [string, WorkerConfig];\n","import { loadConfig } from \"../../../core/config/loader.js\";\nimport { cloudflareAccountIdFromEnv } from \"../../../core/cloudflareEnv.js\";\nimport { CFApiClient } from \"../../../core/api/CFApiClient.js\";\nimport {\n ensureTamerSecretsDatabase,\n tamerSecretsDatabaseName,\n} from \"../../../core/secrets/secretsDb.js\";\nimport {\n generateMasterKey,\n masterKeyEnvVarName,\n} from \"../../../core/secrets/masterKey.js\";\nimport { resolveSecretsEnv } from \"./context.js\";\n\nexport async function runSecretsInit(options: {\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const env = resolveSecretsEnv(options.env);\n const config = await loadConfig(options.configPath, { env });\n const accountId = config.account_id ?? cloudflareAccountIdFromEnv();\n if (!accountId) {\n throw new Error(\n \"account_id required in config or CLOUDFLARE_ACCOUNT_ID env var\",\n );\n }\n\n const masterKey = generateMasterKey();\n const varName = masterKeyEnvVarName(env);\n\n const api = new CFApiClient(accountId);\n const uuid = await ensureTamerSecretsDatabase(api);\n\n console.log(`Secrets vault ready: D1 uuid=${uuid} name=${tamerSecretsDatabaseName()}`);\n console.log(\"\");\n console.log(`Generated master key for env \"${env}\" (store in two durable places — CI + password manager):`);\n console.log(\"\");\n console.log(`${varName}=${masterKey}`);\n console.log(\"\");\n console.log(\"This key is shown once. Tamer never persists it.\");\n}\n","import type { EncryptedSecret, MasterKey } from \"./types.js\";\n\nconst AES_GCM = \"AES-GCM\";\nconst AES_KEY_LENGTH = 256;\nconst IV_BYTE_LENGTH = 12;\n\ntype AesKeyUsage = \"encrypt\" | \"decrypt\" | \"wrapKey\" | \"unwrapKey\";\n\nfunction toArrayBuffer(bytes: Uint8Array): ArrayBuffer {\n return bytes.buffer.slice(\n bytes.byteOffset,\n bytes.byteOffset + bytes.byteLength,\n ) as ArrayBuffer;\n}\n\n/** Thrown when decrypt or re-wrap fails (wrong key, tampered ciphertext, etc.). */\nexport class SecretsCryptoError extends Error {\n readonly code = \"SECRETS_CRYPTO_ERROR\" as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"SecretsCryptoError\";\n }\n}\n\n/** Envelope-encrypt a secret value under the master key. */\nexport async function encryptSecretValue(\n plaintext: string,\n masterKey: MasterKey,\n): Promise<EncryptedSecret> {\n const kek = await importAesKey(masterKey, [\"wrapKey\"]);\n const dek = await crypto.subtle.generateKey(\n { name: AES_GCM, length: AES_KEY_LENGTH },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n\n const iv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const dekIv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const plaintextBytes = new TextEncoder().encode(plaintext);\n\n const ciphertextBuffer = await crypto.subtle.encrypt(\n { name: AES_GCM, iv },\n dek,\n plaintextBytes,\n );\n const wrappedDekBuffer = await crypto.subtle.wrapKey(\n \"raw\",\n dek,\n kek,\n { name: AES_GCM, iv: dekIv },\n );\n\n return {\n ciphertext: new Uint8Array(ciphertextBuffer),\n iv,\n wrappedDek: new Uint8Array(wrappedDekBuffer),\n dekIv,\n };\n}\n\n/** Decrypt an envelope-encrypted secret value. */\nexport async function decryptSecretValue(\n encrypted: EncryptedSecret,\n masterKey: MasterKey,\n): Promise<string> {\n try {\n const kek = await importAesKey(masterKey, [\"unwrapKey\"]);\n const dek = await crypto.subtle.unwrapKey(\n \"raw\",\n toArrayBuffer(encrypted.wrappedDek),\n kek,\n { name: AES_GCM, iv: toArrayBuffer(encrypted.dekIv) },\n { name: AES_GCM, length: AES_KEY_LENGTH },\n false,\n [\"decrypt\"],\n );\n const plaintextBuffer = await crypto.subtle.decrypt(\n { name: AES_GCM, iv: toArrayBuffer(encrypted.iv) },\n dek,\n toArrayBuffer(encrypted.ciphertext),\n );\n return new TextDecoder().decode(plaintextBuffer);\n } catch {\n throw new SecretsCryptoError(\n \"Failed to decrypt secret (wrong master key or corrupted ciphertext)\",\n );\n }\n}\n\n/**\n * Re-wrap the per-secret DEK under a new master key.\n * `ciphertext` and `iv` are unchanged — only `wrappedDek` / `dekIv` rotate.\n */\nexport async function rewrapEncryptedSecretDek(\n encrypted: EncryptedSecret,\n oldMasterKey: MasterKey,\n newMasterKey: MasterKey,\n): Promise<EncryptedSecret> {\n try {\n const oldKek = await importAesKey(oldMasterKey, [\"unwrapKey\"]);\n const newKek = await importAesKey(newMasterKey, [\"wrapKey\"]);\n\n const dek = await crypto.subtle.unwrapKey(\n \"raw\",\n toArrayBuffer(encrypted.wrappedDek),\n oldKek,\n { name: AES_GCM, iv: toArrayBuffer(encrypted.dekIv) },\n { name: AES_GCM, length: AES_KEY_LENGTH },\n true,\n [\"encrypt\", \"decrypt\"],\n );\n\n const dekIv = crypto.getRandomValues(new Uint8Array(IV_BYTE_LENGTH));\n const wrappedDekBuffer = await crypto.subtle.wrapKey(\n \"raw\",\n dek,\n newKek,\n { name: AES_GCM, iv: dekIv },\n );\n\n return {\n ciphertext: encrypted.ciphertext,\n iv: encrypted.iv,\n wrappedDek: new Uint8Array(wrappedDekBuffer),\n dekIv,\n };\n } catch {\n throw new SecretsCryptoError(\n \"Failed to re-wrap secret DEK (wrong old master key or corrupted wrapped DEK)\",\n );\n }\n}\n\nasync function importAesKey(\n rawKey: MasterKey,\n usages: AesKeyUsage[],\n): Promise<CryptoKey> {\n return crypto.subtle.importKey(\n \"raw\",\n toArrayBuffer(rawKey),\n { name: AES_GCM, length: AES_KEY_LENGTH },\n false,\n usages,\n );\n}\n","import type { SecretFingerprint } from \"./types.js\";\n\n/** SHA-256 fingerprint of secret plaintext (non-reversible). */\nexport async function secretValueFingerprint(\n plaintext: string,\n): Promise<SecretFingerprint> {\n const bytes = new TextEncoder().encode(plaintext);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", bytes);\n const hex = bytesToHex(new Uint8Array(hashBuffer));\n return `sha256:${hex}`;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return [...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n","/**\n * Read a secret value from stdin (pipe only — avoids shell history / argv).\n * Interactive prompt is intentionally not supported in v1.\n */\nexport async function readSecretValueFromStdin(): Promise<string> {\n if (process.stdin.isTTY) {\n throw new Error(\n \"secrets set: pipe the value on stdin (e.g. echo -n 'value' | tamer secrets set NAME --env dev); interactive entry is not supported yet\",\n );\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(Buffer.from(chunk));\n }\n\n let value = Buffer.concat(chunks).toString(\"utf8\");\n if (value.endsWith(\"\\n\")) {\n value = value.slice(0, -1);\n }\n if (value.endsWith(\"\\r\")) {\n value = value.slice(0, -1);\n }\n if (!value) {\n throw new Error(\"secrets set: empty value on stdin\");\n }\n return value;\n}\n","import { encryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport { secretValueFingerprint } from \"../../../core/secrets/fingerprint.js\";\nimport {\n assertSecretName,\n cliUpdatedBy,\n createSecretsContext,\n} from \"./context.js\";\nimport { readSecretValueFromStdin } from \"./stdin.js\";\n\nexport async function runSecretsSet(options: {\n name?: string;\n env?: string;\n configPath?: string;\n /** Test hook — bypass stdin when provided. */\n readValue?: () => Promise<string>;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const plaintext = options.readValue\n ? await options.readValue()\n : await readSecretValueFromStdin();\n\n const encrypted = await encryptSecretValue(plaintext, ctx.masterKey);\n const valueHash = await secretValueFingerprint(plaintext);\n\n await ctx.vault.upsert(name, encrypted, valueHash, {\n updatedBy: cliUpdatedBy(),\n });\n\n console.log(`secrets: stored ${name} (${valueHash}) in ${ctx.env} vault`);\n}\n","import { readFileSync } from \"fs\";\nimport { resolve } from \"path\";\n\n/** Parse a dotenv-style file into key/value pairs (no variable expansion). */\nexport function parseDotenvContent(content: string): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const rawLine of content.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n const eq = line.indexOf(\"=\");\n if (eq <= 0) continue;\n\n const key = line.slice(0, eq).trim();\n let value = line.slice(eq + 1).trim();\n\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n if (key) {\n result[key] = value;\n }\n }\n\n return result;\n}\n\nexport function readDotenvFile(filePath: string): Record<string, string> {\n const abs = resolve(process.cwd(), filePath);\n const content = readFileSync(abs, \"utf8\");\n return parseDotenvContent(content);\n}\n\n/** Default bulk-load file under a worker directory. */\nexport function defaultWorkerSecretsLoadFile(\n workerDir: string,\n env: string,\n): string {\n return `${workerDir.replace(/\\\\/g, \"/\")}/.dev.vars.${env}`;\n}\n\n/**\n * When loading for a worker, only `secrets.required` names are imported.\n * Extra keys in the file that aren't declared are logged as a warning but\n * do not block loading.\n */\nexport function filterSecretsLoadEntriesForWorker(\n fileEntries: Record<string, string>,\n required: readonly string[],\n): { entries: Record<string, string>; missing: string[]; extras: string[] } {\n const requiredSet = new Set(required);\n const extras: string[] = [];\n const entries: Record<string, string> = {};\n\n for (const [name, value] of Object.entries(fileEntries)) {\n if (requiredSet.has(name)) {\n entries[name] = value;\n } else {\n extras.push(name);\n }\n }\n\n if (extras.length > 0) {\n console.warn(\n `secrets load: ignoring key(s) not in worker secrets.required: ${extras.sort().join(\", \")}`,\n );\n }\n\n const missing = required.filter((name) => !(name in fileEntries)).sort();\n return { entries, missing, extras };\n}\n\n/**\n * Reject plain `.dev.vars` — reserved for local `wrangler dev`, not vault seeding.\n */\nexport function assertRemoteSecretsLoadFile(filePath: string, env: string): void {\n const base = filePath.replace(/\\\\/g, \"/\").split(\"/\").pop() ?? filePath;\n if (base === \".dev.vars\") {\n throw new Error(\n \"`.dev.vars` is for local wrangler dev only. \" +\n `Seed the vault with \\`.dev.vars.${env}\\` or omit --file (default).`,\n );\n }\n}\n","import { encryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport { secretValueFingerprint } from \"../../../core/secrets/fingerprint.js\";\nimport { getWorkers } from \"../../../core/config/loader.js\";\nimport type { SecretsCommandContext } from \"./context.js\";\nimport {\n cliUpdatedBy,\n createSecretsContext,\n displayPathFromCwd,\n resolveSecretsEnv,\n resolveWorkerSecretsLoadTarget,\n type WorkerSecretsLoadTarget,\n} from \"./context.js\";\nimport {\n assertRemoteSecretsLoadFile,\n defaultWorkerSecretsLoadFile,\n filterSecretsLoadEntriesForWorker,\n readDotenvFile,\n} from \"./dotenv.js\";\n\nasync function loadSecretsForWorker(\n ctx: SecretsCommandContext,\n target: WorkerSecretsLoadTarget,\n fileOverride?: string,\n): Promise<number> {\n const file =\n fileOverride?.trim() ||\n defaultWorkerSecretsLoadFile(target.workerDir, ctx.env);\n assertRemoteSecretsLoadFile(file, ctx.env);\n\n const raw = readDotenvFile(file);\n const { entries: fileEntries, missing } = filterSecretsLoadEntriesForWorker(\n raw,\n target.required,\n );\n\n if (missing.length > 0) {\n console.log(\n `secrets load: worker \"${target.workerKey}\" — skipping ${missing.length} declared secret(s) not in file: ${missing.join(\", \")}`,\n );\n }\n\n const names = Object.keys(fileEntries).sort();\n if (names.length === 0) {\n console.log(\n `secrets load: worker \"${target.workerKey}\" — no entries to import from ${displayPathFromCwd(file)}`,\n );\n return 0;\n }\n\n let count = 0;\n for (const name of names) {\n const plaintext = fileEntries[name]!;\n const encrypted = await encryptSecretValue(plaintext, ctx.masterKey);\n const valueHash = await secretValueFingerprint(plaintext);\n await ctx.vault.upsert(name, encrypted, valueHash, {\n updatedBy: cliUpdatedBy(),\n });\n count += 1;\n }\n\n console.log(\n `secrets: loaded ${count} secret(s) into ${ctx.env} vault from ${displayPathFromCwd(file)} (worker ${target.workerKey})`,\n );\n return count;\n}\n\nasync function listWorkerSecretsLoadTargets(\n ctx: SecretsCommandContext,\n workerFilter?: string,\n): Promise<WorkerSecretsLoadTarget[]> {\n const workers = await getWorkers(ctx.config, process.cwd());\n const out: WorkerSecretsLoadTarget[] = [];\n\n for (const [workerKey] of workers) {\n if (workerFilter && workerKey !== workerFilter) continue;\n const target = await resolveWorkerSecretsLoadTarget(ctx, workerKey, {\n skipUndeclared: !workerFilter,\n });\n if (target) out.push(target);\n }\n\n return out;\n}\n\nexport async function runSecretsLoad(options: {\n /** Override path; requires `--worker`. */\n file?: string;\n env?: string;\n configPath?: string;\n /** When omitted, loads every worker that declares `secrets.required`. */\n worker?: string;\n}): Promise<void> {\n const env = resolveSecretsEnv(options.env);\n const workerKey = options.worker?.trim();\n const fileOverride = options.file?.trim();\n\n if (fileOverride && !workerKey) {\n throw new Error(\"secrets load: --file requires --worker <name>\");\n }\n\n const ctx = await createSecretsContext({\n env,\n configPath: options.configPath,\n });\n\n const targets = await listWorkerSecretsLoadTargets(ctx, workerKey);\n if (targets.length === 0) {\n const hint = workerKey\n ? `worker \"${workerKey}\" has no secrets.required`\n : \"no workers declare secrets.required\";\n console.log(`secrets load (${ctx.env}): ${hint}`);\n return;\n }\n\n let total = 0;\n for (const target of targets) {\n total += await loadSecretsForWorker(\n ctx,\n target,\n workerKey ? fileOverride : undefined,\n );\n }\n\n if (!workerKey && targets.length > 1) {\n console.log(\n `secrets load (${ctx.env}): ${total} secret(s) from ${targets.length} worker(s)`,\n );\n }\n}\n","import * as readline from \"readline/promises\";\nimport { decryptSecretValue } from \"../../../core/secrets/crypto.js\";\nimport {\n assertSecretName,\n cliUpdatedBy,\n createSecretsContext,\n} from \"./context.js\";\n\nexport type ConfirmFn = (prompt: string) => Promise<boolean>;\n\nasync function defaultConfirm(prompt: string): Promise<boolean> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new Error(\n \"secrets get: confirmation required; run in an interactive terminal or use a test hook\",\n );\n }\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n try {\n const answer = await rl.question(`${prompt} [y/N] `);\n const normalized = answer.trim().toLowerCase();\n return normalized === \"y\" || normalized === \"yes\";\n } finally {\n rl.close();\n }\n}\n\nexport async function runSecretsGet(options: {\n name?: string;\n env?: string;\n configPath?: string;\n confirm?: ConfirmFn;\n /** Skip confirmation (testing only). */\n yes?: boolean;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const record = await ctx.vault.get(name);\n if (!record) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n\n const confirm = options.confirm ?? defaultConfirm;\n if (!options.yes) {\n const ok = await confirm(\n `Reveal secret \"${name}\" from ${ctx.env} vault? This action is audit-logged.`,\n );\n if (!ok) {\n console.log(\"secrets get: cancelled\");\n return;\n }\n }\n\n await ctx.vault.appendAudit(name, { updatedBy: cliUpdatedBy() });\n\n const plaintext = await decryptSecretValue(\n {\n ciphertext: record.ciphertext,\n iv: record.iv,\n wrappedDek: record.wrappedDek,\n dekIv: record.dekIv,\n },\n ctx.masterKey,\n );\n\n process.stdout.write(plaintext);\n if (!plaintext.endsWith(\"\\n\")) {\n process.stdout.write(\"\\n\");\n }\n}\n","import { createSecretsContext } from \"./context.js\";\n\nexport async function runSecretsList(options: {\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const items = await ctx.vault.list();\n if (items.length === 0) {\n console.log(`secrets (${ctx.env}): (empty)`);\n return;\n }\n\n console.log(`secrets (${ctx.env}):`);\n for (const item of items) {\n const by = item.updatedBy ? ` by ${item.updatedBy}` : \"\";\n console.log(\n ` ${item.name} ${item.valueHash} last-set ${item.updatedAt}${by}`,\n );\n }\n}\n","import { assertSecretName, createSecretsContext } from \"./context.js\";\n\nexport async function runSecretsRm(options: {\n name?: string;\n env?: string;\n configPath?: string;\n}): Promise<void> {\n const name = assertSecretName(options.name);\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const removed = await ctx.vault.delete(name);\n if (!removed) {\n throw new Error(`secret \"${name}\" not found in vault`);\n }\n\n console.log(`secrets: removed ${name} from ${ctx.env} vault`);\n}\n","import type { StateManager } from \"../state/StateManager.js\";\nimport type { SecretStateEntry } from \"../../types.js\";\nimport type { ResourceDrift } from \"../drift/drift.types.js\";\nimport type { PlanItem } from \"../plan/plan.types.js\";\nimport { requiredSecretsForWorker } from \"./declared.js\";\n\n/** Vault metadata for reconciliation — ciphertext never leaves the vault layer. */\nexport interface VaultSecretMeta {\n name: string;\n valueHash: string;\n}\n\n/** Read-only vault view used by plan/drift (WS1 implements over D1). */\nexport interface SecretsVaultReader {\n get(name: string): Promise<VaultSecretMeta | undefined>;\n}\n\nexport type SecretReconcileStatus =\n | \"in_sync\"\n | \"declared_no_value\"\n | \"never_deployed\"\n | \"rotated_not_deployed\"\n | \"removed_from_vault\"\n | \"undeclared_on_worker\";\n\nexport interface SecretReconcileEntry {\n worker: string;\n name: string;\n status: SecretReconcileStatus;\n /** Vault `value_hash` when present. */\n vaultHash?: string;\n /** State `lastPushedHash` when present. */\n lastPushedHash?: string;\n /** Whether the secret binding exists on the worker script. */\n onWorker: boolean;\n}\n\n/** State row key: `secret:{worker}:{name}`. */\nexport function secretStateKey(worker: string, name: string): string {\n return `secret:${worker}:${name}`;\n}\n\n/** Plan/drift derived identifier: `{worker}:{name}`. */\nexport function secretDerivedName(worker: string, name: string): string {\n return `${worker}:${name}`;\n}\n\nexport interface ReconcileSecretsInput {\n workers: ReadonlyArray<{\n workerKey: string;\n required: readonly string[];\n workerSecretNames: readonly string[];\n }>;\n vault: SecretsVaultReader;\n state: StateManager;\n}\n\n/**\n * Compare declared secrets × vault fingerprints × state last-pushed hashes ×\n * worker presence. Returns one entry per relevant secret×worker pair.\n */\nexport async function reconcileSecrets(\n input: ReconcileSecretsInput,\n): Promise<SecretReconcileEntry[]> {\n const { workers, vault, state } = input;\n const allState = state.getAll();\n const secretStateByKey = new Map<string, SecretStateEntry>();\n for (const [key, entry] of Object.entries(allState)) {\n if (entry.type === \"secret\") {\n secretStateByKey.set(key, entry);\n }\n }\n\n const entries: SecretReconcileEntry[] = [];\n const seen = new Set<string>();\n\n function push(entry: SecretReconcileEntry): void {\n const key = secretStateKey(entry.worker, entry.name);\n if (seen.has(key)) return;\n seen.add(key);\n entries.push(entry);\n }\n\n for (const { workerKey, required, workerSecretNames } of workers) {\n const onWorkerSet = new Set(workerSecretNames);\n\n for (const name of required) {\n const vaultEntry = await vault.get(name);\n const stateEntry = secretStateByKey.get(secretStateKey(workerKey, name));\n push(\n classifyDeclaredSecret({\n worker: workerKey,\n name,\n vaultHash: vaultEntry?.valueHash,\n lastPushedHash: stateEntry?.lastPushedHash,\n onWorker: onWorkerSet.has(name),\n }),\n );\n }\n\n for (const name of workerSecretNames) {\n if (required.includes(name)) continue;\n const stateKey = secretStateKey(workerKey, name);\n if (seen.has(stateKey)) continue;\n const stateEntry = secretStateByKey.get(stateKey);\n const vaultEntry = await vault.get(name);\n if (stateEntry?.lastPushedHash && !vaultEntry) {\n push({\n worker: workerKey,\n name,\n status: \"removed_from_vault\",\n lastPushedHash: stateEntry.lastPushedHash,\n onWorker: true,\n });\n continue;\n }\n push({\n worker: workerKey,\n name,\n status: \"undeclared_on_worker\",\n onWorker: true,\n });\n }\n }\n\n for (const [key, stateEntry] of secretStateByKey) {\n if (seen.has(key)) continue;\n const vaultEntry = await vault.get(stateEntry.name);\n if (vaultEntry) continue;\n push({\n worker: stateEntry.worker,\n name: stateEntry.name,\n status: \"removed_from_vault\",\n lastPushedHash: stateEntry.lastPushedHash,\n onWorker: workers.some(\n (w) =>\n w.workerKey === stateEntry.worker &&\n w.workerSecretNames.includes(stateEntry.name),\n ),\n });\n }\n\n return entries;\n}\n\nfunction classifyDeclaredSecret(args: {\n worker: string;\n name: string;\n vaultHash?: string;\n lastPushedHash?: string;\n onWorker: boolean;\n}): SecretReconcileEntry {\n const { worker, name, vaultHash, lastPushedHash, onWorker } = args;\n\n if (!vaultHash) {\n return {\n worker,\n name,\n status: \"declared_no_value\",\n lastPushedHash,\n onWorker,\n };\n }\n\n if (!lastPushedHash) {\n return {\n worker,\n name,\n status: \"never_deployed\",\n vaultHash,\n onWorker,\n };\n }\n\n if (vaultHash !== lastPushedHash) {\n return {\n worker,\n name,\n status: \"rotated_not_deployed\",\n vaultHash,\n lastPushedHash,\n onWorker,\n };\n }\n\n if (!onWorker) {\n return {\n worker,\n name,\n status: \"never_deployed\",\n vaultHash,\n lastPushedHash,\n onWorker: false,\n };\n }\n\n return {\n worker,\n name,\n status: \"in_sync\",\n vaultHash,\n lastPushedHash,\n onWorker: true,\n };\n}\n\nexport function secretsDrift(entries: SecretReconcileEntry[]): ResourceDrift {\n const drift: ResourceDrift = {\n kind: \"secret\",\n missingFromCloudflare: [],\n unrecordedInState: [],\n undeployed: [],\n };\n\n for (const e of entries) {\n if (e.status === \"in_sync\") continue;\n\n const derivedName = secretDerivedName(e.worker, e.name);\n switch (e.status) {\n case \"declared_no_value\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"declared, no vault value\",\n });\n break;\n case \"never_deployed\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"never deployed\",\n });\n break;\n case \"rotated_not_deployed\":\n drift.undeployed.push({\n logicalName: e.name,\n derivedName,\n detail: \"rotated, not deployed\",\n });\n break;\n case \"removed_from_vault\":\n drift.missingFromCloudflare.push({\n logicalName: e.name,\n derivedName,\n detail: \"removed from vault\",\n });\n break;\n case \"undeclared_on_worker\":\n // Informational only — shown by `secrets verify`, not drift/plan failures.\n break;\n }\n }\n\n return drift;\n}\n\nexport function secretsPlanItems(entries: SecretReconcileEntry[]): PlanItem[] {\n const items: PlanItem[] = [];\n\n for (const e of entries) {\n const derivedName = secretDerivedName(e.worker, e.name);\n switch (e.status) {\n case \"never_deployed\":\n items.push({\n kind: \"secret\",\n action: \"create\",\n logicalName: e.name,\n derivedName,\n detail: \"never deployed\",\n });\n break;\n case \"rotated_not_deployed\":\n items.push({\n kind: \"secret\",\n action: \"update\",\n logicalName: e.name,\n derivedName,\n detail: \"rotated, not deployed\",\n changes: [\n {\n field: \"lastPushedHash\",\n from: e.lastPushedHash,\n to: e.vaultHash,\n kind: \"mutable\",\n },\n ],\n });\n break;\n default:\n break;\n }\n }\n\n return items;\n}\n\n/** Collect declared secret names per worker from resolved worker configs. */\nexport function requiredSecretsByWorker(\n workers: ReadonlyArray<{ workerKey: string; config: { secrets?: { required: string[] } } }>,\n): Array<{ workerKey: string; required: string[] }> {\n return workers.map(({ workerKey, config }) => ({\n workerKey,\n required: requiredSecretsForWorker(config),\n }));\n}\n\n/** In-memory vault stub for tests and pre-WS1 integration. */\nexport function vaultReaderFromMap(\n secrets: ReadonlyMap<string, VaultSecretMeta> | Record<string, VaultSecretMeta>,\n): SecretsVaultReader {\n const map =\n secrets instanceof Map\n ? secrets\n : new Map(Object.entries(secrets).map(([name, meta]) => [name, meta]));\n return {\n async get(name: string): Promise<VaultSecretMeta | undefined> {\n return map.get(name);\n },\n };\n}\n","import {\n reconcileSecrets,\n secretDerivedName,\n type SecretReconcileEntry,\n type SecretReconcileStatus,\n} from \"../../../core/secrets/reconcile.js\";\nimport {\n collectSecretWorkers,\n createSecretsContext,\n vaultReaderFromVault,\n} from \"./context.js\";\n\nconst STATUS_LABEL: Record<SecretReconcileStatus, string> = {\n in_sync: \"in sync\",\n declared_no_value: \"declared, no vault value\",\n never_deployed: \"never deployed\",\n rotated_not_deployed: \"rotated, not deployed\",\n removed_from_vault: \"removed from vault\",\n undeclared_on_worker: \"not in secrets.required\",\n};\n\n/**\n * Only `declared_no_value` (secret declared in config but missing from vault)\n * is a hard failure — that's the \"you forgot to set a secret\" case that\n * should block CI before deploy.\n *\n * `never_deployed` and `rotated_not_deployed` are normal pre-deploy states:\n * the secret IS in the vault, deploy will push it. They're reported\n * informationally but don't fail the command.\n */\nfunction isDeclaredFailure(status: SecretReconcileStatus): boolean {\n return status === \"declared_no_value\" || status === \"removed_from_vault\";\n}\n\nfunction sortEntries(\n entries: SecretReconcileEntry[],\n): SecretReconcileEntry[] {\n return [...entries].sort((a, b) =>\n secretDerivedName(a.worker, a.name).localeCompare(\n secretDerivedName(b.worker, b.name),\n ),\n );\n}\n\nfunction printEntry(entry: SecretReconcileEntry): void {\n const label = STATUS_LABEL[entry.status];\n const id = secretDerivedName(entry.worker, entry.name);\n const workerFlag = entry.onWorker ? \"on worker\" : \"not on worker\";\n console.log(` ${id} ${label} (${workerFlag})`);\n}\n\nexport async function runSecretsVerify(options: {\n env?: string;\n configPath?: string;\n}): Promise<number> {\n const ctx = await createSecretsContext({\n env: options.env,\n configPath: options.configPath,\n });\n\n const workers = await collectSecretWorkers(ctx);\n if (workers.length === 0) {\n console.log(\n `secrets verify (${ctx.env}): no workers declare secrets.required`,\n );\n return 0;\n }\n\n const entries = await reconcileSecrets({\n workers: workers.map((w) => ({\n workerKey: w.workerKey,\n required: w.required,\n workerSecretNames: w.workerSecretNames,\n })),\n vault: vaultReaderFromVault(ctx.vault),\n state: ctx.state,\n });\n\n const declared = sortEntries(\n entries.filter((e) => e.status !== \"undeclared_on_worker\"),\n );\n const onWorkerOnly = sortEntries(\n entries.filter((e) => e.status === \"undeclared_on_worker\"),\n );\n\n console.log(`\\nSecrets verify — env ${ctx.env}\\n`);\n\n if (declared.length === 0 && onWorkerOnly.length === 0) {\n console.log(\" (no declared secrets)\\n\");\n return 0;\n }\n\n if (declared.length > 0) {\n console.log(\" Declared in config (secrets.required):\\n\");\n for (const entry of declared) {\n printEntry(entry);\n }\n console.log(\"\");\n }\n\n if (onWorkerOnly.length > 0) {\n console.log(\n \" On worker, not in secrets.required (outside Tamer management — add to config or remove from worker):\\n\",\n );\n for (const entry of onWorkerOnly) {\n printEntry(entry);\n }\n console.log(\"\");\n }\n\n const failures = declared.filter((e) => isDeclaredFailure(e.status));\n const pending = declared.filter(\n (e) => !isDeclaredFailure(e.status) && e.status !== \"in_sync\",\n );\n\n if (failures.length === 0) {\n const parts: string[] = [\"All declared secrets are in the vault.\"];\n if (pending.length > 0) {\n parts.push(\n `${pending.length} will be pushed on next deploy.`,\n );\n }\n if (onWorkerOnly.length > 0) {\n parts.push(\n `${onWorkerOnly.length} on worker but not in config (informational only).`,\n );\n }\n console.log(`${parts.join(\" \")}\\n`);\n return 0;\n }\n\n console.log(`${failures.length} declared secret(s) missing from vault — run \\`tamer secrets set\\` or \\`tamer secrets load\\` before deploying.\\n`);\n return 1;\n}\n","import { decryptSecretValue } from \"../../../core/secrets/crypto.js\";\n\nimport { secretStateKey } from \"../../../core/secrets/reconcile.js\";\n\nimport type { CFApiClient } from \"../../../core/api/CFApiClient.js\";\n\nimport type { SecretsVault } from \"../../../core/secrets/SecretsVault.js\";\n\nimport type { StateManager } from \"../../../core/state/StateManager.js\";\n\nimport type { SecretStateEntry } from \"../../../types.js\";\n\nimport {\n\n collectSecretWorkers,\n\n createSecretsContext,\n\n} from \"./context.js\";\n\n\n\nexport interface PushSecretsForDeployOptions {\n\n workerKey: string;\n\n deployedName: string;\n\n required: readonly string[];\n\n vault: SecretsVault;\n\n state: StateManager;\n\n api: CFApiClient;\n\n masterKey: Uint8Array;\n\n /** Log each pushed secret (CLI push). Default false for deploy. */\n\n logPushes?: boolean;\n\n}\n\n\n\nexport interface PushSecretsResult {\n\n pushed: number;\n\n skipped: number;\n\n}\n\n\n\n/**\n\n * Push stale/new required secrets for one worker via the CF API.\n\n * Skips secrets whose vault hash matches `lastPushedHash` in state.\n\n */\n\nexport async function pushSecretsForDeploy(\n\n options: PushSecretsForDeployOptions,\n\n): Promise<PushSecretsResult> {\n\n const {\n\n workerKey,\n\n deployedName,\n\n required,\n\n vault,\n\n state,\n\n api,\n\n masterKey,\n\n logPushes = false,\n\n } = options;\n\n\n\n if (required.length === 0) {\n\n return { pushed: 0, skipped: 0 };\n\n }\n\n\n\n let pushed = 0;\n\n let skipped = 0;\n\n\n\n for (const secretName of required) {\n\n const vaultRow = await vault.get(secretName);\n\n if (!vaultRow) {\n\n throw new Error(\n `secret \"${secretName}\" required by worker \"${workerKey}\" is missing from vault; run tamer secrets set ${secretName}`,\n );\n\n }\n\n\n\n const stateKey = secretStateKey(workerKey, secretName);\n\n const stateEntry = state.get(stateKey) as SecretStateEntry | undefined;\n\n const lastPushedHash =\n\n stateEntry?.type === \"secret\" ? stateEntry.lastPushedHash : undefined;\n\n\n\n if (lastPushedHash === vaultRow.valueHash) {\n\n skipped += 1;\n\n continue;\n\n }\n\n\n\n const plaintext = await decryptSecretValue(\n\n {\n\n ciphertext: vaultRow.ciphertext,\n\n iv: vaultRow.iv,\n\n wrappedDek: vaultRow.wrappedDek,\n\n dekIv: vaultRow.dekIv,\n\n },\n\n masterKey,\n\n );\n\n\n\n await api.workersSecretPut(deployedName, {\n\n name: secretName,\n\n text: plaintext,\n\n });\n\n\n\n const now = new Date().toISOString();\n\n state.set(stateKey, {\n\n type: \"secret\",\n\n worker: workerKey,\n\n name: secretName,\n\n lastPushedHash: vaultRow.valueHash,\n\n lastPushedAt: now,\n\n });\n\n\n\n pushed += 1;\n\n if (logPushes) {\n\n console.log(\n\n `secrets push: ${workerKey}:${secretName} → ${deployedName}`,\n\n );\n\n }\n\n }\n\n\n\n return { pushed, skipped };\n\n}\n\n\n\nexport async function runSecretsPush(options: {\n\n env?: string;\n\n configPath?: string;\n\n worker?: string;\n\n}): Promise<void> {\n\n const ctx = await createSecretsContext({\n\n env: options.env,\n\n configPath: options.configPath,\n\n });\n\n\n\n const workers = await collectSecretWorkers(ctx, options.worker);\n\n if (workers.length === 0) {\n\n const hint = options.worker\n\n ? `worker \"${options.worker}\" has no secrets.required`\n\n : \"no workers declare secrets.required\";\n\n console.log(`secrets push (${ctx.env}): ${hint}`);\n\n return;\n\n }\n\n\n\n let pushed = 0;\n\n let skipped = 0;\n\n\n\n for (const worker of workers) {\n\n const result = await pushSecretsForDeploy({\n\n workerKey: worker.workerKey,\n\n deployedName: worker.deployedName,\n\n required: worker.required,\n\n vault: ctx.vault,\n\n state: ctx.state,\n\n api: ctx.api,\n\n masterKey: ctx.masterKey,\n\n logPushes: true,\n\n });\n\n pushed += result.pushed;\n\n skipped += result.skipped;\n\n }\n\n\n\n if (pushed > 0) {\n\n await ctx.state.persist(ctx.api);\n\n }\n\n\n\n console.log(\n\n `secrets push (${ctx.env}): ${pushed} pushed, ${skipped} already current`,\n\n );\n\n}\n\n\n","import { runSecretsInit } from \"./init.js\";\nimport { runSecretsSet } from \"./set.js\";\nimport { runSecretsLoad } from \"./load.js\";\nimport { runSecretsGet } from \"./get.js\";\nimport { runSecretsList } from \"./list.js\";\nimport { runSecretsRm } from \"./rm.js\";\nimport { runSecretsVerify } from \"./verify.js\";\nimport { runSecretsPush } from \"./push.js\";\n\nexport const SECRETS_USAGE = `usage:\n tamer secrets init --env <env> [--config <path>]\n tamer secrets set <NAME> --env <env> [--config <path>] # value on stdin (pipe only)\n tamer secrets load --env <env> [--worker <name>] [--file <path>] [--config <path>]\n # each worker: {workerDir}/.dev.vars.{env}; all declared workers when --worker omitted\n tamer secrets get <NAME> --env <env> [--config <path>] # confirmation + audit log\n tamer secrets list --env <env> [--config <path>]\n tamer secrets rm <NAME> --env <env> [--config <path>]\n tamer secrets verify --env <env> [--config <path>]\n tamer secrets push --env <env> [--worker <name>] [--config <path>]`;\n\nexport interface ParsedSecretsCommand {\n subcommand?: string;\n name?: string;\n env?: string;\n configPath?: string;\n file?: string;\n worker?: string;\n yes?: boolean;\n}\n\nexport function parseSecretsArgs(argv: string[]): ParsedSecretsCommand {\n const positional: string[] = [];\n const opts: Record<string, string | boolean> = {};\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!;\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2).replace(/-/g, \"_\");\n const next = argv[i + 1];\n if (next && !next.startsWith(\"--\")) {\n opts[key] = next;\n i++;\n } else {\n opts[key] = true;\n }\n } else {\n positional.push(arg);\n }\n }\n\n return {\n subcommand: positional[0],\n name: positional[1],\n env: opts.env as string | undefined,\n configPath: opts.config as string | undefined,\n file: opts.file as string | undefined,\n worker: opts.worker as string | undefined,\n yes: opts.yes === true,\n };\n}\n\nexport async function runSecrets(argv: string[]): Promise<number> {\n const parsed = parseSecretsArgs(argv);\n const { subcommand } = parsed;\n\n switch (subcommand) {\n case \"init\":\n await runSecretsInit({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"set\":\n await runSecretsSet({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"load\":\n await runSecretsLoad({\n file: parsed.file,\n env: parsed.env,\n configPath: parsed.configPath,\n worker: parsed.worker,\n });\n return 0;\n case \"get\":\n await runSecretsGet({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n yes: parsed.yes,\n });\n return 0;\n case \"list\":\n await runSecretsList({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"rm\":\n await runSecretsRm({\n name: parsed.name,\n env: parsed.env,\n configPath: parsed.configPath,\n });\n return 0;\n case \"verify\":\n return runSecretsVerify({\n env: parsed.env,\n configPath: parsed.configPath,\n });\n case \"push\":\n await runSecretsPush({\n env: parsed.env,\n configPath: parsed.configPath,\n worker: parsed.worker,\n });\n return 0;\n default:\n console.error(SECRETS_USAGE);\n return 1;\n }\n}\n","import { z } from \"zod\";\n\nconst BaseArgsSchema = z.object({\n env: z.string().optional(),\n config: z.string().optional(),\n worker: z.string().optional(),\n});\n\nconst ApplyArgsSchema = BaseArgsSchema.extend({\n add_shard: z.string().optional(),\n plan: z.string().optional(),\n allow_stale: z.boolean().optional(),\n rollback_on_failure: z.boolean().optional(),\n /** `kind:logicalName` — apply only that resource (e.g. `d1:settings`). */\n target: z.string().optional(),\n});\n\nconst DestroyArgsSchema = BaseArgsSchema.extend({\n env: z.string().min(1, { error: \"env is required for destroy\" }),\n force: z.boolean().optional(),\n skip_workers: z.boolean().optional(),\n confirm_env: z.string().optional(),\n wipe_metadata: z.boolean().optional(),\n plan: z.string().optional(),\n allow_stale: z.boolean().optional(),\n});\n\nconst BootstrapArgsSchema = z.object({\n config: z.string().optional(),\n});\n\nconst DriftArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n});\n\nconst PlanArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n detailed_exitcode: z.boolean().optional(),\n out: z.string().optional(),\n destroy: z.boolean().optional(),\n target: z.string().optional(),\n});\n\nconst ImportArgsSchema = z.object({\n env: z.string().min(1, { error: \"env is required for import\" }),\n config: z.string().optional(),\n kind: z.enum(\n [\n \"d1\",\n \"r2\",\n \"kv\",\n \"queue\",\n \"hyperdrive\",\n \"vectorize\",\n \"ai_gateway\",\n \"pipeline\",\n \"workflow\",\n \"secret_store\",\n \"dns_record\",\n \"dispatch_namespace\",\n \"worker_route\",\n ],\n {\n error:\n \"kind must be one of d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | secret_store | dns_record | dispatch_namespace | worker_route\",\n },\n ),\n logical: z.string().min(1, { error: \"logical is required\" }),\n cf_id: z.string().optional(),\n shard_date: z.string().optional(),\n created_date: z.string().optional(),\n route_id: z.string().optional(),\n zone_name: z.string().optional(),\n});\n\nconst StatusArgsSchema = BaseArgsSchema.extend({\n tenant: z.string().optional(),\n});\n\nconst EventsArgsSchema = BaseArgsSchema.extend({\n json: z.boolean().optional(),\n limit: z.coerce.number().int().min(1).max(100).optional(),\n});\n\nconst DoctorArgsSchema = z.object({\n json: z.boolean().optional(),\n});\n\nconst ProvisionTenantArgsSchema = z\n .object({\n env: z.string().min(1, { error: \"env is required\" }),\n product: z.string().min(1, { error: \"product is required\" }),\n workspace: z.string().min(1, { error: \"workspace is required\" }),\n main: z.string().optional(),\n artifact_key: z.string().optional(),\n module_name: z.string().optional(),\n config: z.string().optional(),\n compatibility_date: z.string().optional(),\n compat_flags: z.string().optional(),\n /**\n * Comma-separated subset of `tenant.d1Shards` declared in\n * `tamer.config.ts`. Defaults to the full configured set when\n * omitted; passing `--shards a,b` may only **trim** that set\n * (the config is the source of truth — extending the layout is\n * an edit to `tamer.config.ts`, not a CLI flag, so `apply` /\n * `drift` / other operators see the same shape). When the\n * config has no `tenant.d1Shards`, `provision-tenant` only\n * uploads the dispatch script — no per-tenant D1 fan-out.\n *\n * Validated against the configured set inside `provision-tenant`\n * (the CLI parser doesn't see the config yet); typos surface\n * with the configured roles in the error message.\n */\n shards: z.string().optional(),\n /**\n * Emit a single trailing JSON line on stdout describing the\n * provisioning result `{ status, tenant, shards, scriptName,\n * dispatchNamespaceName }` (or `{ status: \"failed\", error }` on\n * failure). Designed so `provision-workflow` (Cloudflare Container\n * caller per `docs/handoff.md` §7) can parse the result without\n * scraping human logs.\n */\n json: z.boolean().optional(),\n })\n .refine((d) => !!(d.main || d.artifact_key), {\n message: \"Provide --main <file> or --artifact-key <r2-key> (under tamer-artifacts-{env})\",\n });\n\n// The `--confirm-tenant` requirement for protected envs lives **inside**\n// `runDestroyTenant`, not here, because it depends on\n// `tenant.protectedEnvs` from `tamer.config.ts` (which the CLI parser\n// hasn't loaded yet). See `src/core/env/protectedEnvs.ts`.\nconst DestroyTenantArgsSchema = z.object({\n env: z.string().min(1, { error: \"env is required\" }),\n product: z.string().min(1, { error: \"product is required\" }),\n workspace: z.string().min(1, { error: \"workspace is required\" }),\n force: z.boolean().optional(),\n confirm_tenant: z.string().optional(),\n config: z.string().optional(),\n /** See ProvisionTenantArgsSchema.json. */\n json: z.boolean().optional(),\n});\n\nconst DeployArgsSchema = BaseArgsSchema.extend({\n dispatch_namespace: z.string().optional(),\n});\n\nconst DevArgsSchema = BaseArgsSchema.extend({\n all: z.boolean().optional(),\n});\n\nexport type CommandOptions = {\n sync: z.infer<typeof BaseArgsSchema>;\n apply: z.infer<typeof ApplyArgsSchema>;\n dev: z.infer<typeof DevArgsSchema>;\n deploy: z.infer<typeof DeployArgsSchema>;\n migrate: z.infer<typeof BaseArgsSchema>;\n types: z.infer<typeof BaseArgsSchema>;\n status: z.infer<typeof StatusArgsSchema>;\n events: z.infer<typeof EventsArgsSchema>;\n bootstrap: z.infer<typeof BootstrapArgsSchema>;\n destroy: z.infer<typeof DestroyArgsSchema>;\n drift: z.infer<typeof DriftArgsSchema>;\n plan: z.infer<typeof PlanArgsSchema>;\n import: z.infer<typeof ImportArgsSchema>;\n doctor: z.infer<typeof DoctorArgsSchema>;\n provision_tenant: z.infer<typeof ProvisionTenantArgsSchema>;\n destroy_tenant: z.infer<typeof DestroyTenantArgsSchema>;\n};\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const opts: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i];\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2).replace(/-/g, \"_\");\n const next = argv[i + 1];\n if (next && !next.startsWith(\"--\")) {\n opts[key] = next;\n i++;\n } else {\n opts[key] = true;\n }\n }\n }\n return opts;\n}\n\nfunction toOpts(raw: Record<string, string | boolean>): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(raw)) {\n opts[k] = v;\n }\n return opts;\n}\n\nfunction formatZodError(error: z.ZodError): string {\n return error.issues\n .map((e) => (e.path.length ? `${e.path.join(\".\")}: ${e.message}` : e.message))\n .join(\"; \");\n}\n\nexport function parseSyncArgs(argv: string[]): { env?: string; configPath?: string } {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseApplyArgs(argv: string[]): {\n env?: string;\n addShard?: string;\n configPath?: string;\n planFile?: string;\n allowStale?: boolean;\n rollbackOnFailure?: boolean;\n target?: string;\n} {\n const parsed = ApplyArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n addShard: parsed.data.add_shard,\n configPath: parsed.data.config,\n planFile: parsed.data.plan,\n allowStale: parsed.data.allow_stale,\n rollbackOnFailure: parsed.data.rollback_on_failure,\n target: parsed.data.target,\n };\n}\n\nexport function parseDevArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n all?: boolean;\n} {\n const parsed = DevArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n all: parsed.data.all,\n };\n}\n\nexport function parseDeployArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n dispatchNamespace?: string;\n} {\n const parsed = DeployArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n dispatchNamespace: parsed.data.dispatch_namespace,\n };\n}\n\nexport function parseMigrateArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n} {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseTypesArgs(argv: string[]): {\n worker?: string;\n env?: string;\n configPath?: string;\n} {\n const parsed = BaseArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n worker: parsed.data.worker,\n env: parsed.data.env,\n configPath: parsed.data.config,\n };\n}\n\nexport function parseStatusArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n tenant?: string;\n} {\n const parsed = StatusArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n tenant: parsed.data.tenant,\n };\n}\n\nexport function parseEventsArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n limit?: number;\n json?: boolean;\n} {\n const parsed = EventsArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n limit: parsed.data.limit,\n json: parsed.data.json,\n };\n}\n\nexport function parseDoctorArgs(argv: string[]): { json?: boolean } {\n const parsed = DoctorArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return { json: parsed.data.json };\n}\n\nexport function parseProvisionTenantArgs(argv: string[]): {\n env: string;\n product: string;\n workspace: string;\n main?: string;\n artifactKey?: string;\n moduleName?: string;\n configPath?: string;\n compatibilityDate?: string;\n compatibilityFlags?: string[];\n /**\n * Raw `--shards` value, validated against `tenant.d1Shards` from the\n * loaded config inside `provision-tenant` (the CLI parser doesn't\n * see the config yet, so we can't enforce the subset rule here).\n */\n shardsRaw?: string;\n json?: boolean;\n} {\n const parsed = ProvisionTenantArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n product: d.product,\n workspace: d.workspace,\n main: d.main,\n artifactKey: d.artifact_key,\n moduleName: d.module_name,\n configPath: d.config,\n compatibilityDate: d.compatibility_date,\n compatibilityFlags: d.compat_flags\n ?.split(\",\")\n .map((s) => s.trim())\n .filter(Boolean),\n shardsRaw: d.shards,\n json: d.json,\n };\n}\n\nexport function parseDestroyTenantArgs(argv: string[]): {\n env: string;\n product: string;\n workspace: string;\n force?: boolean;\n confirmTenant?: string;\n configPath?: string;\n json?: boolean;\n} {\n const parsed = DestroyTenantArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n product: d.product,\n workspace: d.workspace,\n force: d.force,\n confirmTenant: d.confirm_tenant,\n configPath: d.config,\n json: d.json,\n };\n}\n\nexport function parseDestroyArgs(argv: string[]): {\n env: string;\n force?: boolean;\n skipWorkers?: boolean;\n confirmEnv?: string;\n configPath?: string;\n wipeMetadata?: boolean;\n planFile?: string;\n allowStale?: boolean;\n} {\n const raw = parseArgs(argv);\n const opts = toOpts(raw);\n const parsed = DestroyArgsSchema.safeParse(opts);\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n force: parsed.data.force,\n skipWorkers: parsed.data.skip_workers,\n confirmEnv: parsed.data.confirm_env,\n configPath: parsed.data.config,\n wipeMetadata: parsed.data.wipe_metadata,\n planFile: parsed.data.plan,\n allowStale: parsed.data.allow_stale,\n };\n}\n\nexport function parseDriftArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n json?: boolean;\n} {\n const parsed = DriftArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n json: parsed.data.json,\n };\n}\n\nexport function parsePlanArgs(argv: string[]): {\n env?: string;\n configPath?: string;\n json?: boolean;\n detailedExitcode?: boolean;\n out?: string;\n destroy?: boolean;\n target?: string;\n} {\n const parsed = PlanArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n env: parsed.data.env,\n configPath: parsed.data.config,\n json: parsed.data.json,\n detailedExitcode: parsed.data.detailed_exitcode,\n out: parsed.data.out,\n destroy: parsed.data.destroy,\n target: parsed.data.target,\n };\n}\n\nexport function parseImportArgs(argv: string[]): {\n env: string;\n configPath?: string;\n kind:\n | \"d1\"\n | \"r2\"\n | \"kv\"\n | \"queue\"\n | \"hyperdrive\"\n | \"vectorize\"\n | \"ai_gateway\"\n | \"pipeline\"\n | \"workflow\"\n | \"secret_store\"\n | \"dns_record\"\n | \"dispatch_namespace\"\n | \"worker_route\";\n logical: string;\n cfId?: string;\n shardDate?: string;\n createdDate?: string;\n routeId?: string;\n zoneName?: string;\n} {\n const parsed = ImportArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n const d = parsed.data;\n return {\n env: d.env,\n configPath: d.config,\n kind: d.kind,\n logical: d.logical,\n cfId: d.cf_id,\n shardDate: d.shard_date,\n createdDate: d.created_date,\n routeId: d.route_id,\n zoneName: d.zone_name,\n };\n}\n\nexport function parseBootstrapArgs(argv: string[]): {\n configPath?: string;\n} {\n const parsed = BootstrapArgsSchema.safeParse(toOpts(parseArgs(argv)));\n if (!parsed.success) {\n throw new Error(`Invalid arguments: ${formatZodError(parsed.error)}`);\n }\n return {\n configPath: parsed.data.config,\n };\n}\n\nexport {\n parseSecretsArgs,\n type ParsedSecretsCommand,\n} from \"./commands/secrets/index.js\";\n","#!/usr/bin/env node\n\nimport {\n parseSyncArgs,\n parseApplyArgs,\n parseDevArgs,\n parseDeployArgs,\n parseMigrateArgs,\n parseTypesArgs,\n parseStatusArgs,\n parseEventsArgs,\n parseDestroyArgs,\n parseBootstrapArgs,\n parseDriftArgs,\n parsePlanArgs,\n parseImportArgs,\n parseDoctorArgs,\n parseProvisionTenantArgs,\n parseDestroyTenantArgs,\n} from \"./args.js\";\nimport { StateConflictError } from \"../core/state/StateConflictError.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\nconst rest = args.slice(1);\n\nasync function main() {\n let exitStatus = 0;\n try {\n switch (command) {\n case \"bootstrap\":\n await import(\"./commands/bootstrap.js\").then((m) =>\n m.runBootstrap(parseBootstrapArgs(rest)),\n );\n break;\n case \"sync\":\n await import(\"./commands/sync.js\").then((m) =>\n m.runSync(parseSyncArgs(rest))\n );\n break;\n case \"apply\": {\n const a = parseApplyArgs(rest);\n await import(\"./commands/apply.js\").then((m) =>\n m.runApply({\n env: a.env,\n addShard: a.addShard,\n configPath: a.configPath,\n planFile: a.planFile,\n allowStale: a.allowStale,\n rollbackOnFailure: a.rollbackOnFailure,\n target: a.target,\n }),\n );\n break;\n }\n case \"dev\":\n await import(\"./commands/dev.js\").then((m) =>\n m.runDev(parseDevArgs(rest))\n );\n break;\n case \"deploy\": {\n const d = parseDeployArgs(rest);\n await import(\"./commands/deploy.js\").then((m) =>\n m.runDeploy({\n worker: d.worker,\n env: d.env,\n configPath: d.configPath,\n dispatchNamespace: d.dispatchNamespace,\n }),\n );\n break;\n }\n case \"migrate\":\n await import(\"./commands/migrate.js\").then((m) =>\n m.runMigrate(parseMigrateArgs(rest))\n );\n break;\n case \"types\":\n await import(\"./commands/types.js\").then((m) =>\n m.runTypes(parseTypesArgs(rest))\n );\n break;\n case \"status\":\n await import(\"./commands/status.js\").then((m) =>\n m.runStatus(parseStatusArgs(rest))\n );\n break;\n case \"events\":\n await import(\"./commands/events.js\").then((m) =>\n m.runEvents(parseEventsArgs(rest)),\n );\n break;\n case \"drift\":\n exitStatus = await import(\"./commands/drift.js\").then((m) =>\n m.runDrift(parseDriftArgs(rest)),\n );\n break;\n case \"plan\": {\n const p = parsePlanArgs(rest);\n exitStatus = await import(\"./commands/plan.js\").then((m) =>\n m.runPlan({\n env: p.env,\n configPath: p.configPath,\n json: p.json,\n detailedExitcode: p.detailedExitcode,\n out: p.out,\n destroy: p.destroy,\n target: p.target,\n }),\n );\n break;\n }\n case \"import\":\n await import(\"./commands/import.js\").then((m) =>\n m.runImport(parseImportArgs(rest)),\n );\n break;\n case \"doctor\":\n exitStatus = await import(\"./commands/doctor.js\").then((m) =>\n m.runDoctor(parseDoctorArgs(rest)),\n );\n break;\n case \"provision-tenant\": {\n const p = parseProvisionTenantArgs(rest);\n await import(\"./commands/provision-tenant.js\").then((m) =>\n m.runProvisionTenant({\n env: p.env,\n product: p.product,\n workspace: p.workspace,\n main: p.main,\n artifactKey: p.artifactKey,\n moduleName: p.moduleName,\n configPath: p.configPath,\n compatibilityDate: p.compatibilityDate,\n compatibilityFlags: p.compatibilityFlags,\n shardsRaw: p.shardsRaw,\n json: p.json,\n }),\n );\n break;\n }\n case \"destroy-tenant\": {\n const t = parseDestroyTenantArgs(rest);\n await import(\"./commands/destroy-tenant.js\").then((m) =>\n m.runDestroyTenant({\n env: t.env,\n product: t.product,\n workspace: t.workspace,\n force: t.force,\n confirmTenant: t.confirmTenant,\n configPath: t.configPath,\n json: t.json,\n }),\n );\n break;\n }\n case \"destroy\": {\n const d = parseDestroyArgs(rest);\n await import(\"./commands/destroy.js\").then((m) =>\n m.runDestroy({\n env: d.env,\n force: d.force,\n skipWorkers: d.skipWorkers,\n confirmEnv: d.confirmEnv,\n configPath: d.configPath,\n wipeMetadata: d.wipeMetadata,\n planFile: d.planFile,\n allowStale: d.allowStale,\n }),\n );\n break;\n }\n case \"wfp\": {\n const [sub, ...wfpRest] = rest;\n if (sub === \"put\") {\n const { parseWfpPutArgs, runWfpPut } = await import(\n \"./commands/wfp-put.js\"\n );\n await runWfpPut(parseWfpPutArgs(wfpRest));\n break;\n }\n if (sub === \"delete\") {\n const { parseWfpDeleteArgs, runWfpDelete } = await import(\n \"./commands/wfp-delete.js\"\n );\n await runWfpDelete(parseWfpDeleteArgs(wfpRest));\n break;\n }\n console.error(\n \"usage:\\n tamer wfp put --namespace <n> --script-name <s> --main <file> [--compatibility-date <d>] [--compat-flags a,b] [--config <path>]\\n tamer wfp delete --namespace <n> --script-name <s> [--force] [--config <path>]\",\n );\n process.exit(1);\n }\n case \"secrets\":\n exitStatus = await import(\"./commands/secrets/index.js\").then((m) =>\n m.runSecrets(rest),\n );\n break;\n case \"help\":\n case \"-h\":\n case \"--help\":\n case undefined:\n console.log(`\ntamer — Cloudflare Workers infrastructure manager\n\nUsage: tamer <command> [options]\n\nCommands:\n bootstrap Create account-scoped Tamer metadata: tamer-state (D1), tamer-artifacts (R2), tamer-secrets (D1). Run once per account.\n sync Sync state from Cloudflare API\n apply Provision missing resources\n dev Start wrangler dev (use --all for every worker)\n deploy Deploy workers\n migrate Run D1 migrations\n types Generate worker-configuration.d.ts\n status Show resource status (optional --tenant product:workspace)\n events Show recent stack operations from state (read-only; --limit, --json)\n drift Compare state vs Cloudflare and report differences (read-only)\n plan CloudFormation-style preview of apply+deploy (read-only)\n import Register an existing Cloudflare resource into Tamer state by logical name\n doctor Verify CLOUDFLARE_* credentials can read the account API\n provision-tenant Runtime: create per-tenant D1 shards declared in tenant.d1Shards + upload dispatch script (--main or --artifact-key); --shards a,b trims to a subset of the configured layout (omit for all); --json emits machine-readable result for Cloudflare Container callers\n destroy-tenant Runtime: remove tenant script + D1 + state (shared envs need --confirm-tenant); --json emits machine-readable result\n destroy Delete all resources for an env (use with caution)\n secrets Encrypted secrets vault (init, set, load, get, list, rm, verify, push)\n wfp put Upload a single-module user Worker to a dispatch namespace (multipart API)\n wfp delete Delete a user Worker from a dispatch namespace\n\nOptions:\n --env <name> Environment (default: local for most commands; deploy requires explicit --env)\n --worker <name> Target specific worker (monorepo)\n --config <path> Path to tamer/project.config.ts (or another .ts file; tamer.config.ts is not supported)\n --all dev: run all workers on ports BASE, BASE+1, ... (see TAMER_DEV_BASE_PORT)\n --add-shard <name> Add a new shard (apply only)\n --target <kind>:<logical> apply / plan: only that declared resource (not with apply --plan or plan --out)\n --dispatch-namespace <name> Workers for Platforms: pass to wrangler deploy (deploy only)\n --force Bypass shared-env destroy confirmation (destroy only)\n --confirm-env <name> destroy: required for envs dev, staging, prod, production; must match --env\n --skip-workers destroy: do not run wrangler delete / dispatch script delete (storage + namespaces only)\n --wipe-metadata destroy: after resources, delete shared tamer-state-{env} D1 + tamer-artifacts-{env} R2 (use on last stack only)\n --json drift / plan: emit JSON instead of human-readable output\n --detailed-exitcode plan: exit 2 instead of 0 when there are pending changes (Terraform-style)\n --destroy plan: preview deletions instead of creates/updates (read-only \"tamer destroy\" dry-run)\n --kind <k> import: d1 | r2 | kv | queue | hyperdrive | vectorize | ai_gateway | pipeline | workflow | dispatch_namespace | worker_route\n --logical <n> import: logical resource name from the Tamer project config (or worker key)\n --cf-id <id> import: Cloudflare id (D1 uuid, KV id, R2 bucket name, dispatch namespace name)\n --shard-date <date> import d1: required for sharded D1 databases (YYYY-MM-DD)\n --created-date <date> import r2: bucket creation date (defaults to extracting from name)\n --route-id <id> import worker_route: route id from /zones/{id}/workers/routes\n --zone-name <z> import worker_route: optional zone hint when a worker has multiple routes\n\nSecrets (requires TAMER_SECRETS_KEY_{env} master key env var):\n tamer secrets init --env <env> Generate master key (print once) + provision vault\n tamer secrets set <NAME> --env <env> Encrypt value from stdin into vault (pipe only)\n tamer secrets load --env <env> [--worker <name>] [--file .dev.vars.<env>] Bulk import; all workers when --worker omitted\n tamer secrets get <NAME> --env <env> Decrypt + print (confirmation + audit log)\n tamer secrets list --env <env> Names + fingerprints + last-set (never values)\n tamer secrets rm <NAME> --env <env> Remove from vault\n tamer secrets verify --env <env> Reconcile declared vs vault vs pushed vs worker\n tamer secrets push --env <env> Push stale/new secrets to workers via CF API\n\nEnvironment variables (same as Wrangler):\n CLOUDFLARE_ACCOUNT_ID Cloudflare account ID\n CLOUDFLARE_API_TOKEN Cloudflare API token\n R2_ACCESS_KEY_ID (optional) R2 S3 API access key for \"tamer destroy\" — empty bucket (objects + abort incomplete multipart) before delete\n R2_SECRET_ACCESS_KEY (optional) R2 S3 API secret; create under R2 → Manage R2 API Tokens; not the same as CLOUDFLARE_API_TOKEN\n TAMER_DEV_BASE_PORT First port for \"tamer dev --all\" (default 8787)\n`);\n break;\n default:\n console.error(`Unknown command: ${command}`);\n console.error(\"Run 'tamer help' for usage.\");\n process.exit(1);\n }\n if (exitStatus !== 0) {\n process.exit(exitStatus);\n }\n } catch (err) {\n if (err instanceof StateConflictError) {\n console.error(err.message);\n process.exit(3);\n return;\n }\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}
|