beplus-mcp 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -1
- package/dist/index.js +122 -34
- package/dist/index.js.map +1 -1
- package/dist/remote-server.d.ts +24 -0
- package/dist/remote-server.js +28814 -0
- package/dist/remote-server.js.map +1 -0
- package/package.json +8 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/ajv/lib/compile/codegen/code.ts","../node_modules/ajv/lib/compile/codegen/scope.ts","../node_modules/ajv/lib/compile/codegen/index.ts","../node_modules/ajv/lib/compile/util.ts","../node_modules/ajv/lib/compile/names.ts","../node_modules/ajv/lib/compile/errors.ts","../node_modules/ajv/lib/compile/validate/boolSchema.ts","../node_modules/ajv/lib/compile/rules.ts","../node_modules/ajv/lib/compile/validate/applicability.ts","../node_modules/ajv/lib/compile/validate/dataType.ts","../node_modules/ajv/lib/compile/validate/defaults.ts","../node_modules/ajv/lib/vocabularies/code.ts","../node_modules/ajv/lib/compile/validate/keyword.ts","../node_modules/ajv/lib/compile/validate/subschema.ts","../node_modules/fast-deep-equal/index.js","../node_modules/json-schema-traverse/index.js","../node_modules/ajv/lib/compile/resolve.ts","../node_modules/ajv/lib/compile/validate/index.ts","../node_modules/ajv/lib/runtime/validation_error.ts","../node_modules/ajv/lib/compile/ref_error.ts","../node_modules/ajv/lib/compile/index.ts","../node_modules/ajv/dist/refs/data.json","../node_modules/fast-uri/lib/utils.js","../node_modules/fast-uri/lib/schemes.js","../node_modules/fast-uri/index.js","../node_modules/ajv/lib/runtime/uri.ts","../node_modules/ajv/lib/core.ts","../node_modules/ajv/lib/vocabularies/core/id.ts","../node_modules/ajv/lib/vocabularies/core/ref.ts","../node_modules/ajv/lib/vocabularies/core/index.ts","../node_modules/ajv/lib/vocabularies/validation/limitNumber.ts","../node_modules/ajv/lib/vocabularies/validation/multipleOf.ts","../node_modules/ajv/lib/runtime/ucs2length.ts","../node_modules/ajv/lib/vocabularies/validation/limitLength.ts","../node_modules/ajv/lib/vocabularies/validation/pattern.ts","../node_modules/ajv/lib/vocabularies/validation/limitProperties.ts","../node_modules/ajv/lib/vocabularies/validation/required.ts","../node_modules/ajv/lib/vocabularies/validation/limitItems.ts","../node_modules/ajv/lib/runtime/equal.ts","../node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts","../node_modules/ajv/lib/vocabularies/validation/const.ts","../node_modules/ajv/lib/vocabularies/validation/enum.ts","../node_modules/ajv/lib/vocabularies/validation/index.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts","../node_modules/ajv/lib/vocabularies/applicator/items.ts","../node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts","../node_modules/ajv/lib/vocabularies/applicator/items2020.ts","../node_modules/ajv/lib/vocabularies/applicator/contains.ts","../node_modules/ajv/lib/vocabularies/applicator/dependencies.ts","../node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts","../node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/properties.ts","../node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts","../node_modules/ajv/lib/vocabularies/applicator/not.ts","../node_modules/ajv/lib/vocabularies/applicator/anyOf.ts","../node_modules/ajv/lib/vocabularies/applicator/oneOf.ts","../node_modules/ajv/lib/vocabularies/applicator/allOf.ts","../node_modules/ajv/lib/vocabularies/applicator/if.ts","../node_modules/ajv/lib/vocabularies/applicator/thenElse.ts","../node_modules/ajv/lib/vocabularies/applicator/index.ts","../node_modules/ajv/lib/vocabularies/format/format.ts","../node_modules/ajv/lib/vocabularies/format/index.ts","../node_modules/ajv/lib/vocabularies/metadata.ts","../node_modules/ajv/lib/vocabularies/draft7.ts","../node_modules/ajv/lib/vocabularies/discriminator/types.ts","../node_modules/ajv/lib/vocabularies/discriminator/index.ts","../node_modules/ajv/dist/refs/json-schema-draft-07.json","../node_modules/ajv/lib/ajv.ts","../node_modules/ajv-formats/src/formats.ts","../node_modules/ajv-formats/src/limit.ts","../node_modules/ajv-formats/src/index.ts","../node_modules/@hono/node-server/dist/index.mjs","../node_modules/zod/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/locales/en.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/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/external.js","../node_modules/@modelcontextprotocol/sdk/src/types.ts","../node_modules/@modelcontextprotocol/sdk/src/server/webStandardStreamableHttp.ts","../node_modules/@modelcontextprotocol/sdk/src/server/streamableHttp.ts","../node_modules/zod/v3/external.js","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../node_modules/zod/v4/mini/schemas.js","../node_modules/@modelcontextprotocol/sdk/src/server/zod-compat.ts","../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/interfaces.ts","../node_modules/zod-to-json-schema/dist/esm/Options.js","../node_modules/zod-to-json-schema/dist/esm/Refs.js","../node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../node_modules/zod-to-json-schema/dist/esm/selectParser.js","../node_modules/zod-to-json-schema/dist/esm/parseDef.js","../node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../node_modules/@modelcontextprotocol/sdk/src/server/zod-json-schema-compat.ts","../node_modules/@modelcontextprotocol/sdk/src/shared/protocol.ts","../node_modules/@modelcontextprotocol/sdk/src/validation/ajv-provider.ts","../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/server.ts","../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/helpers.ts","../node_modules/@modelcontextprotocol/sdk/src/server/index.ts","../node_modules/@modelcontextprotocol/sdk/src/server/completable.ts","../node_modules/@modelcontextprotocol/sdk/src/shared/toolNameValidation.ts","../node_modules/@modelcontextprotocol/sdk/src/experimental/tasks/mcp-server.ts","../node_modules/@modelcontextprotocol/sdk/src/server/mcp.ts","../src/api/errors.ts","../src/credentials.ts","../src/oauth.ts","../src/auth.ts","../src/api/client.ts","../src/tools/team-gating.ts","../src/poll.ts","../src/media.ts","../src/remote.ts","../src/log.ts","../src/format.ts","../src/schemas/enums.ts","../src/tools/music.ts","../src/tools/generation.ts","../src/probe.ts","../src/tools/upscale.ts","../src/tools/audio.ts","../src/tools/account.ts","../src/tools/analyze.ts","../src/tools/projects.ts","../src/tools/clients.ts","../src/tools/calls.ts","../src/tools/canvas.ts","../src/canvas/api.ts","../src/canvas/catalog.ts","../src/canvas/core.ts","../src/canvas/layout.ts","../src/canvas/tabs.ts","../src/canvas/tab-scope.ts","../src/canvas/summary.ts","../src/canvas/comments.ts","../src/tools/canvas-comments.ts","../src/tools/canvas-aba-arg.ts","../src/tools/canvas-layout.ts","../src/canvas/upload.ts","../src/tools/canvas-media.ts","../src/tools/canvas-run.ts","../src/tools/canvas-focus.ts","../src/canvas/lock.ts","../src/canvas/mentions.ts","../src/version.ts","../src/server.ts","../src/remote-server.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport abstract class _CodeOrName {\n abstract readonly str: string\n abstract readonly names: UsedNames\n abstract toString(): string\n abstract emptyStr(): boolean\n}\n\nexport const IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i\n\nexport class Name extends _CodeOrName {\n readonly str: string\n constructor(s: string) {\n super()\n if (!IDENTIFIER.test(s)) throw new Error(\"CodeGen: name must be a valid identifier\")\n this.str = s\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n return false\n }\n\n get names(): UsedNames {\n return {[this.str]: 1}\n }\n}\n\nexport class _Code extends _CodeOrName {\n readonly _items: readonly CodeItem[]\n private _str?: string\n private _names?: UsedNames\n\n constructor(code: string | readonly CodeItem[]) {\n super()\n this._items = typeof code === \"string\" ? [code] : code\n }\n\n toString(): string {\n return this.str\n }\n\n emptyStr(): boolean {\n if (this._items.length > 1) return false\n const item = this._items[0]\n return item === \"\" || item === '\"\"'\n }\n\n get str(): string {\n return (this._str ??= this._items.reduce((s: string, c: CodeItem) => `${s}${c}`, \"\"))\n }\n\n get names(): UsedNames {\n return (this._names ??= this._items.reduce((names: UsedNames, c) => {\n if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1\n return names\n }, {}))\n }\n}\n\nexport type CodeItem = Name | string | number | boolean | null\n\nexport type UsedNames = Record<string, number | undefined>\n\nexport type Code = _Code | Name\n\nexport type SafeExpr = Code | number | boolean | null\n\nexport const nil = new _Code(\"\")\n\ntype CodeArg = SafeExpr | string | undefined\n\nexport function _(strs: TemplateStringsArray, ...args: CodeArg[]): _Code {\n const code: CodeItem[] = [strs[0]]\n let i = 0\n while (i < args.length) {\n addCodeArg(code, args[i])\n code.push(strs[++i])\n }\n return new _Code(code)\n}\n\nconst plus = new _Code(\"+\")\n\nexport function str(strs: TemplateStringsArray, ...args: (CodeArg | string[])[]): _Code {\n const expr: CodeItem[] = [safeStringify(strs[0])]\n let i = 0\n while (i < args.length) {\n expr.push(plus)\n addCodeArg(expr, args[i])\n expr.push(plus, safeStringify(strs[++i]))\n }\n optimize(expr)\n return new _Code(expr)\n}\n\nexport function addCodeArg(code: CodeItem[], arg: CodeArg | string[]): void {\n if (arg instanceof _Code) code.push(...arg._items)\n else if (arg instanceof Name) code.push(arg)\n else code.push(interpolate(arg))\n}\n\nfunction optimize(expr: CodeItem[]): void {\n let i = 1\n while (i < expr.length - 1) {\n if (expr[i] === plus) {\n const res = mergeExprItems(expr[i - 1], expr[i + 1])\n if (res !== undefined) {\n expr.splice(i - 1, 3, res)\n continue\n }\n expr[i++] = \"+\"\n }\n i++\n }\n}\n\nfunction mergeExprItems(a: CodeItem, b: CodeItem): CodeItem | undefined {\n if (b === '\"\"') return a\n if (a === '\"\"') return b\n if (typeof a == \"string\") {\n if (b instanceof Name || a[a.length - 1] !== '\"') return\n if (typeof b != \"string\") return `${a.slice(0, -1)}${b}\"`\n if (b[0] === '\"') return a.slice(0, -1) + b.slice(1)\n return\n }\n if (typeof b == \"string\" && b[0] === '\"' && !(a instanceof Name)) return `\"${a}${b.slice(1)}`\n return\n}\n\nexport function strConcat(c1: Code, c2: Code): Code {\n return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`\n}\n\n// TODO do not allow arrays here\nfunction interpolate(x?: string | string[] | number | boolean | null): SafeExpr | string {\n return typeof x == \"number\" || typeof x == \"boolean\" || x === null\n ? x\n : safeStringify(Array.isArray(x) ? x.join(\",\") : x)\n}\n\nexport function stringify(x: unknown): Code {\n return new _Code(safeStringify(x))\n}\n\nexport function safeStringify(x: unknown): string {\n return JSON.stringify(x)\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\")\n}\n\nexport function getProperty(key: Code | string | number): Code {\n return typeof key == \"string\" && IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`\n}\n\n//Does best effort to format the name properly\nexport function getEsmExportName(key: Code | string | number): Code {\n if (typeof key == \"string\" && IDENTIFIER.test(key)) {\n return new _Code(`${key}`)\n }\n throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`)\n}\n\nexport function regexpCode(rx: RegExp): Code {\n return new _Code(rx.toString())\n}\n","import {_, nil, Code, Name} from \"./code\"\n\ninterface NameGroup {\n prefix: string\n index: number\n}\n\nexport interface NameValue {\n ref: ValueReference // this is the reference to any value that can be referred to from generated code via `globals` var in the closure\n key?: unknown // any key to identify a global to avoid duplicates, if not passed ref is used\n code?: Code // this is the code creating the value needed for standalone code wit_out closure - can be a primitive value, function or import (`require`)\n}\n\nexport type ValueReference = unknown // possibly make CodeGen parameterized type on this type\n\nclass ValueError extends Error {\n readonly value?: NameValue\n constructor(name: ValueScopeName) {\n super(`CodeGen: \"code\" for ${name} not defined`)\n this.value = name.value\n }\n}\n\ninterface ScopeOptions {\n prefixes?: Set<string>\n parent?: Scope\n}\n\ninterface ValueScopeOptions extends ScopeOptions {\n scope: ScopeStore\n es5?: boolean\n lines?: boolean\n}\n\nexport type ScopeStore = Record<string, ValueReference[] | undefined>\n\ntype ScopeValues = {\n [Prefix in string]?: Map<unknown, ValueScopeName>\n}\n\nexport type ScopeValueSets = {\n [Prefix in string]?: Set<ValueScopeName>\n}\n\nexport enum UsedValueState {\n Started,\n Completed,\n}\n\nexport type UsedScopeValues = {\n [Prefix in string]?: Map<ValueScopeName, UsedValueState | undefined>\n}\n\nexport const varKinds = {\n const: new Name(\"const\"),\n let: new Name(\"let\"),\n var: new Name(\"var\"),\n}\n\nexport class Scope {\n protected readonly _names: {[Prefix in string]?: NameGroup} = {}\n protected readonly _prefixes?: Set<string>\n protected readonly _parent?: Scope\n\n constructor({prefixes, parent}: ScopeOptions = {}) {\n this._prefixes = prefixes\n this._parent = parent\n }\n\n toName(nameOrPrefix: Name | string): Name {\n return nameOrPrefix instanceof Name ? nameOrPrefix : this.name(nameOrPrefix)\n }\n\n name(prefix: string): Name {\n return new Name(this._newName(prefix))\n }\n\n protected _newName(prefix: string): string {\n const ng = this._names[prefix] || this._nameGroup(prefix)\n return `${prefix}${ng.index++}`\n }\n\n private _nameGroup(prefix: string): NameGroup {\n if (this._parent?._prefixes?.has(prefix) || (this._prefixes && !this._prefixes.has(prefix))) {\n throw new Error(`CodeGen: prefix \"${prefix}\" is not allowed in this scope`)\n }\n return (this._names[prefix] = {prefix, index: 0})\n }\n}\n\ninterface ScopePath {\n property: string\n itemIndex: number\n}\n\nexport class ValueScopeName extends Name {\n readonly prefix: string\n value?: NameValue\n scopePath?: Code\n\n constructor(prefix: string, nameStr: string) {\n super(nameStr)\n this.prefix = prefix\n }\n\n setValue(value: NameValue, {property, itemIndex}: ScopePath): void {\n this.value = value\n this.scopePath = _`.${new Name(property)}[${itemIndex}]`\n }\n}\n\ninterface VSOptions extends ValueScopeOptions {\n _n: Code\n}\n\nconst line = _`\\n`\n\nexport class ValueScope extends Scope {\n protected readonly _values: ScopeValues = {}\n protected readonly _scope: ScopeStore\n readonly opts: VSOptions\n\n constructor(opts: ValueScopeOptions) {\n super(opts)\n this._scope = opts.scope\n this.opts = {...opts, _n: opts.lines ? line : nil}\n }\n\n get(): ScopeStore {\n return this._scope\n }\n\n name(prefix: string): ValueScopeName {\n return new ValueScopeName(prefix, this._newName(prefix))\n }\n\n value(nameOrPrefix: ValueScopeName | string, value: NameValue): ValueScopeName {\n if (value.ref === undefined) throw new Error(\"CodeGen: ref must be passed in value\")\n const name = this.toName(nameOrPrefix) as ValueScopeName\n const {prefix} = name\n const valueKey = value.key ?? value.ref\n let vs = this._values[prefix]\n if (vs) {\n const _name = vs.get(valueKey)\n if (_name) return _name\n } else {\n vs = this._values[prefix] = new Map()\n }\n vs.set(valueKey, name)\n\n const s = this._scope[prefix] || (this._scope[prefix] = [])\n const itemIndex = s.length\n s[itemIndex] = value.ref\n name.setValue(value, {property: prefix, itemIndex})\n return name\n }\n\n getValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n const vs = this._values[prefix]\n if (!vs) return\n return vs.get(keyOrRef)\n }\n\n scopeRefs(scopeName: Name, values: ScopeValues | ScopeValueSets = this._values): Code {\n return this._reduceValues(values, (name: ValueScopeName) => {\n if (name.scopePath === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return _`${scopeName}${name.scopePath}`\n })\n }\n\n scopeCode(\n values: ScopeValues | ScopeValueSets = this._values,\n usedValues?: UsedScopeValues,\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n return this._reduceValues(\n values,\n (name: ValueScopeName) => {\n if (name.value === undefined) throw new Error(`CodeGen: name \"${name}\" has no value`)\n return name.value.code\n },\n usedValues,\n getCode\n )\n }\n\n private _reduceValues(\n values: ScopeValues | ScopeValueSets,\n valueCode: (n: ValueScopeName) => Code | undefined,\n usedValues: UsedScopeValues = {},\n getCode?: (n: ValueScopeName) => Code | undefined\n ): Code {\n let code: Code = nil\n for (const prefix in values) {\n const vs = values[prefix]\n if (!vs) continue\n const nameSet = (usedValues[prefix] = usedValues[prefix] || new Map())\n vs.forEach((name: ValueScopeName) => {\n if (nameSet.has(name)) return\n nameSet.set(name, UsedValueState.Started)\n let c = valueCode(name)\n if (c) {\n const def = this.opts.es5 ? varKinds.var : varKinds.const\n code = _`${code}${def} ${name} = ${c};${this.opts._n}`\n } else if ((c = getCode?.(name))) {\n code = _`${code}${c}${this.opts._n}`\n } else {\n throw new ValueError(name)\n }\n nameSet.set(name, UsedValueState.Completed)\n })\n }\n return code\n }\n}\n","import type {ScopeValueSets, NameValue, ValueScope, ValueScopeName} from \"./scope\"\nimport {_, nil, _Code, Code, Name, UsedNames, CodeItem, addCodeArg, _CodeOrName} from \"./code\"\nimport {Scope, varKinds} from \"./scope\"\n\nexport {_, str, strConcat, nil, getProperty, stringify, regexpCode, Name, Code} from \"./code\"\nexport {Scope, ScopeStore, ValueScope, ValueScopeName, ScopeValueSets, varKinds} from \"./scope\"\n\n// type for expressions that can be safely inserted in code without quotes\nexport type SafeExpr = Code | number | boolean | null\n\n// type that is either Code of function that adds code to CodeGen instance using its methods\nexport type Block = Code | (() => void)\n\nexport const operators = {\n GT: new _Code(\">\"),\n GTE: new _Code(\">=\"),\n LT: new _Code(\"<\"),\n LTE: new _Code(\"<=\"),\n EQ: new _Code(\"===\"),\n NEQ: new _Code(\"!==\"),\n NOT: new _Code(\"!\"),\n OR: new _Code(\"||\"),\n AND: new _Code(\"&&\"),\n ADD: new _Code(\"+\"),\n}\n\nabstract class Node {\n abstract readonly names: UsedNames\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n return this\n }\n\n optimizeNames(_names: UsedNames, _constants: Constants): this | undefined {\n return this\n }\n\n // get count(): number {\n // return 1\n // }\n}\n\nclass Def extends Node {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private rhs?: SafeExpr\n ) {\n super()\n }\n\n render({es5, _n}: CGOptions): string {\n const varKind = es5 ? varKinds.var : this.varKind\n const rhs = this.rhs === undefined ? \"\" : ` = ${this.rhs}`\n return `${varKind} ${this.name}${rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!names[this.name.str]) return\n if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.rhs instanceof _CodeOrName ? this.rhs.names : {}\n }\n}\n\nclass Assign extends Node {\n constructor(\n readonly lhs: Code,\n public rhs: SafeExpr,\n private readonly sideEffects?: boolean\n ) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} = ${this.rhs};` + _n\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (this.lhs instanceof Name && !names[this.lhs.str] && !this.sideEffects) return\n this.rhs = optimizeExpr(this.rhs, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = this.lhs instanceof Name ? {} : {...this.lhs.names}\n return addExprNames(names, this.rhs)\n }\n}\n\nclass AssignOp extends Assign {\n constructor(\n lhs: Code,\n private readonly op: Code,\n rhs: SafeExpr,\n sideEffects?: boolean\n ) {\n super(lhs, rhs, sideEffects)\n }\n\n render({_n}: CGOptions): string {\n return `${this.lhs} ${this.op}= ${this.rhs};` + _n\n }\n}\n\nclass Label extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label: Name) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.label}:` + _n\n }\n}\n\nclass Break extends Node {\n readonly names: UsedNames = {}\n constructor(readonly label?: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n const label = this.label ? ` ${this.label}` : \"\"\n return `break${label};` + _n\n }\n}\n\nclass Throw extends Node {\n constructor(readonly error: Code) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `throw ${this.error};` + _n\n }\n\n get names(): UsedNames {\n return this.error.names\n }\n}\n\nclass AnyCode extends Node {\n constructor(private code: SafeExpr) {\n super()\n }\n\n render({_n}: CGOptions): string {\n return `${this.code};` + _n\n }\n\n optimizeNodes(): this | undefined {\n return `${this.code}` ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n this.code = optimizeExpr(this.code, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return this.code instanceof _CodeOrName ? this.code.names : {}\n }\n}\n\nabstract class ParentNode extends Node {\n constructor(readonly nodes: ChildNode[] = []) {\n super()\n }\n\n render(opts: CGOptions): string {\n return this.nodes.reduce((code, n) => code + n.render(opts), \"\")\n }\n\n optimizeNodes(): this | ChildNode | ChildNode[] | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n const n = nodes[i].optimizeNodes()\n if (Array.isArray(n)) nodes.splice(i, 1, ...n)\n else if (n) nodes[i] = n\n else nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n const {nodes} = this\n let i = nodes.length\n while (i--) {\n // iterating backwards improves 1-pass optimization\n const n = nodes[i]\n if (n.optimizeNames(names, constants)) continue\n subtractNames(names, n.names)\n nodes.splice(i, 1)\n }\n return nodes.length > 0 ? this : undefined\n }\n\n get names(): UsedNames {\n return this.nodes.reduce((names: UsedNames, n) => addNames(names, n.names), {})\n }\n\n // get count(): number {\n // return this.nodes.reduce((c, n) => c + n.count, 1)\n // }\n}\n\nabstract class BlockNode extends ParentNode {\n render(opts: CGOptions): string {\n return \"{\" + opts._n + super.render(opts) + \"}\" + opts._n\n }\n}\n\nclass Root extends ParentNode {}\n\nclass Else extends BlockNode {\n static readonly kind = \"else\"\n}\n\nclass If extends BlockNode {\n static readonly kind = \"if\"\n else?: If | Else\n constructor(\n private condition: Code | boolean,\n nodes?: ChildNode[]\n ) {\n super(nodes)\n }\n\n render(opts: CGOptions): string {\n let code = `if(${this.condition})` + super.render(opts)\n if (this.else) code += \"else \" + this.else.render(opts)\n return code\n }\n\n optimizeNodes(): If | ChildNode[] | undefined {\n super.optimizeNodes()\n const cond = this.condition\n if (cond === true) return this.nodes // else is ignored here\n let e = this.else\n if (e) {\n const ns = e.optimizeNodes()\n e = this.else = Array.isArray(ns) ? new Else(ns) : (ns as Else | undefined)\n }\n if (e) {\n if (cond === false) return e instanceof If ? e : e.nodes\n if (this.nodes.length) return this\n return new If(not(cond), e instanceof If ? [e] : e.nodes)\n }\n if (cond === false || !this.nodes.length) return undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n this.else = this.else?.optimizeNames(names, constants)\n if (!(super.optimizeNames(names, constants) || this.else)) return\n this.condition = optimizeExpr(this.condition, names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n addExprNames(names, this.condition)\n if (this.else) addNames(names, this.else.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.else?.count || 0)\n // }\n}\n\nabstract class For extends BlockNode {\n static readonly kind = \"for\"\n}\n\nclass ForLoop extends For {\n constructor(private iteration: Code) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.iteration})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iteration = optimizeExpr(this.iteration, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iteration.names)\n }\n}\n\nclass ForRange extends For {\n constructor(\n private readonly varKind: Name,\n private readonly name: Name,\n private readonly from: SafeExpr,\n private readonly to: SafeExpr\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const varKind = opts.es5 ? varKinds.var : this.varKind\n const {name, from, to} = this\n return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts)\n }\n\n get names(): UsedNames {\n const names = addExprNames(super.names, this.from)\n return addExprNames(names, this.to)\n }\n}\n\nclass ForIter extends For {\n constructor(\n private readonly loop: \"of\" | \"in\",\n private readonly varKind: Name,\n private readonly name: Name,\n private iterable: Code\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts)\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this | undefined {\n if (!super.optimizeNames(names, constants)) return\n this.iterable = optimizeExpr(this.iterable, names, constants)\n return this\n }\n\n get names(): UsedNames {\n return addNames(super.names, this.iterable.names)\n }\n}\n\nclass Func extends BlockNode {\n static readonly kind = \"func\"\n constructor(\n public name: Name,\n public args: Code,\n public async?: boolean\n ) {\n super()\n }\n\n render(opts: CGOptions): string {\n const _async = this.async ? \"async \" : \"\"\n return `${_async}function ${this.name}(${this.args})` + super.render(opts)\n }\n}\n\nclass Return extends ParentNode {\n static readonly kind = \"return\"\n\n render(opts: CGOptions): string {\n return \"return \" + super.render(opts)\n }\n}\n\nclass Try extends BlockNode {\n catch?: Catch\n finally?: Finally\n\n render(opts: CGOptions): string {\n let code = \"try\" + super.render(opts)\n if (this.catch) code += this.catch.render(opts)\n if (this.finally) code += this.finally.render(opts)\n return code\n }\n\n optimizeNodes(): this {\n super.optimizeNodes()\n this.catch?.optimizeNodes() as Catch | undefined\n this.finally?.optimizeNodes() as Finally | undefined\n return this\n }\n\n optimizeNames(names: UsedNames, constants: Constants): this {\n super.optimizeNames(names, constants)\n this.catch?.optimizeNames(names, constants)\n this.finally?.optimizeNames(names, constants)\n return this\n }\n\n get names(): UsedNames {\n const names = super.names\n if (this.catch) addNames(names, this.catch.names)\n if (this.finally) addNames(names, this.finally.names)\n return names\n }\n\n // get count(): number {\n // return super.count + (this.catch?.count || 0) + (this.finally?.count || 0)\n // }\n}\n\nclass Catch extends BlockNode {\n static readonly kind = \"catch\"\n constructor(readonly error: Name) {\n super()\n }\n\n render(opts: CGOptions): string {\n return `catch(${this.error})` + super.render(opts)\n }\n}\n\nclass Finally extends BlockNode {\n static readonly kind = \"finally\"\n render(opts: CGOptions): string {\n return \"finally\" + super.render(opts)\n }\n}\n\ntype StartBlockNode = If | For | Func | Return | Try\n\ntype LeafNode = Def | Assign | Label | Break | Throw | AnyCode\n\ntype ChildNode = StartBlockNode | LeafNode\n\ntype EndBlockNodeType =\n | typeof If\n | typeof Else\n | typeof For\n | typeof Func\n | typeof Return\n | typeof Catch\n | typeof Finally\n\ntype Constants = Record<string, SafeExpr | undefined>\n\nexport interface CodeGenOptions {\n es5?: boolean\n lines?: boolean\n ownProperties?: boolean\n}\n\ninterface CGOptions extends CodeGenOptions {\n _n: \"\\n\" | \"\"\n}\n\nexport class CodeGen {\n readonly _scope: Scope\n readonly _extScope: ValueScope\n readonly _values: ScopeValueSets = {}\n private readonly _nodes: ParentNode[]\n private readonly _blockStarts: number[] = []\n private readonly _constants: Constants = {}\n private readonly opts: CGOptions\n\n constructor(extScope: ValueScope, opts: CodeGenOptions = {}) {\n this.opts = {...opts, _n: opts.lines ? \"\\n\" : \"\"}\n this._extScope = extScope\n this._scope = new Scope({parent: extScope})\n this._nodes = [new Root()]\n }\n\n toString(): string {\n return this._root.render(this.opts)\n }\n\n // returns unique name in the internal scope\n name(prefix: string): Name {\n return this._scope.name(prefix)\n }\n\n // reserves unique name in the external scope\n scopeName(prefix: string): ValueScopeName {\n return this._extScope.name(prefix)\n }\n\n // reserves unique name in the external scope and assigns value to it\n scopeValue(prefixOrName: ValueScopeName | string, value: NameValue): Name {\n const name = this._extScope.value(prefixOrName, value)\n const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set())\n vs.add(name)\n return name\n }\n\n getScopeValue(prefix: string, keyOrRef: unknown): ValueScopeName | undefined {\n return this._extScope.getValue(prefix, keyOrRef)\n }\n\n // return code that assigns values in the external scope to the names that are used internally\n // (same names that were returned by gen.scopeName or gen.scopeValue)\n scopeRefs(scopeName: Name): Code {\n return this._extScope.scopeRefs(scopeName, this._values)\n }\n\n scopeCode(): Code {\n return this._extScope.scopeCode(this._values)\n }\n\n private _def(\n varKind: Name,\n nameOrPrefix: Name | string,\n rhs?: SafeExpr,\n constant?: boolean\n ): Name {\n const name = this._scope.toName(nameOrPrefix)\n if (rhs !== undefined && constant) this._constants[name.str] = rhs\n this._leafNode(new Def(varKind, name, rhs))\n return name\n }\n\n // `const` declaration (`var` in es5 mode)\n const(nameOrPrefix: Name | string, rhs: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.const, nameOrPrefix, rhs, _constant)\n }\n\n // `let` declaration with optional assignment (`var` in es5 mode)\n let(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.let, nameOrPrefix, rhs, _constant)\n }\n\n // `var` declaration with optional assignment\n var(nameOrPrefix: Name | string, rhs?: SafeExpr, _constant?: boolean): Name {\n return this._def(varKinds.var, nameOrPrefix, rhs, _constant)\n }\n\n // assignment code\n assign(lhs: Code, rhs: SafeExpr, sideEffects?: boolean): CodeGen {\n return this._leafNode(new Assign(lhs, rhs, sideEffects))\n }\n\n // `+=` code\n add(lhs: Code, rhs: SafeExpr): CodeGen {\n return this._leafNode(new AssignOp(lhs, operators.ADD, rhs))\n }\n\n // appends passed SafeExpr to code or executes Block\n code(c: Block | SafeExpr): CodeGen {\n if (typeof c == \"function\") c()\n else if (c !== nil) this._leafNode(new AnyCode(c))\n return this\n }\n\n // returns code for object literal for the passed argument list of key-value pairs\n object(...keyValues: [Name | string, SafeExpr | string][]): _Code {\n const code: CodeItem[] = [\"{\"]\n for (const [key, value] of keyValues) {\n if (code.length > 1) code.push(\",\")\n code.push(key)\n if (key !== value || this.opts.es5) {\n code.push(\":\")\n addCodeArg(code, value)\n }\n }\n code.push(\"}\")\n return new _Code(code)\n }\n\n // `if` clause (or statement if `thenBody` and, optionally, `elseBody` are passed)\n if(condition: Code | boolean, thenBody?: Block, elseBody?: Block): CodeGen {\n this._blockNode(new If(condition))\n\n if (thenBody && elseBody) {\n this.code(thenBody).else().code(elseBody).endIf()\n } else if (thenBody) {\n this.code(thenBody).endIf()\n } else if (elseBody) {\n throw new Error('CodeGen: \"else\" body without \"then\" body')\n }\n return this\n }\n\n // `else if` clause - invalid without `if` or after `else` clauses\n elseIf(condition: Code | boolean): CodeGen {\n return this._elseNode(new If(condition))\n }\n\n // `else` clause - only valid after `if` or `else if` clauses\n else(): CodeGen {\n return this._elseNode(new Else())\n }\n\n // end `if` statement (needed if gen.if was used only with condition)\n endIf(): CodeGen {\n return this._endBlockNode(If, Else)\n }\n\n private _for(node: For, forBody?: Block): CodeGen {\n this._blockNode(node)\n if (forBody) this.code(forBody).endFor()\n return this\n }\n\n // a generic `for` clause (or statement if `forBody` is passed)\n for(iteration: Code, forBody?: Block): CodeGen {\n return this._for(new ForLoop(iteration), forBody)\n }\n\n // `for` statement for a range of values\n forRange(\n nameOrPrefix: Name | string,\n from: SafeExpr,\n to: SafeExpr,\n forBody: (index: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.let\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForRange(varKind, name, from, to), () => forBody(name))\n }\n\n // `for-of` statement (in es5 mode replace with a normal for loop)\n forOf(\n nameOrPrefix: Name | string,\n iterable: Code,\n forBody: (item: Name) => void,\n varKind: Code = varKinds.const\n ): CodeGen {\n const name = this._scope.toName(nameOrPrefix)\n if (this.opts.es5) {\n const arr = iterable instanceof Name ? iterable : this.var(\"_arr\", iterable)\n return this.forRange(\"_i\", 0, _`${arr}.length`, (i) => {\n this.var(name, _`${arr}[${i}]`)\n forBody(name)\n })\n }\n return this._for(new ForIter(\"of\", varKind, name, iterable), () => forBody(name))\n }\n\n // `for-in` statement.\n // With option `ownProperties` replaced with a `for-of` loop for object keys\n forIn(\n nameOrPrefix: Name | string,\n obj: Code,\n forBody: (item: Name) => void,\n varKind: Code = this.opts.es5 ? varKinds.var : varKinds.const\n ): CodeGen {\n if (this.opts.ownProperties) {\n return this.forOf(nameOrPrefix, _`Object.keys(${obj})`, forBody)\n }\n const name = this._scope.toName(nameOrPrefix)\n return this._for(new ForIter(\"in\", varKind, name, obj), () => forBody(name))\n }\n\n // end `for` loop\n endFor(): CodeGen {\n return this._endBlockNode(For)\n }\n\n // `label` statement\n label(label: Name): CodeGen {\n return this._leafNode(new Label(label))\n }\n\n // `break` statement\n break(label?: Code): CodeGen {\n return this._leafNode(new Break(label))\n }\n\n // `return` statement\n return(value: Block | SafeExpr): CodeGen {\n const node = new Return()\n this._blockNode(node)\n this.code(value)\n if (node.nodes.length !== 1) throw new Error('CodeGen: \"return\" should have one node')\n return this._endBlockNode(Return)\n }\n\n // `try` statement\n try(tryBody: Block, catchCode?: (e: Name) => void, finallyCode?: Block): CodeGen {\n if (!catchCode && !finallyCode) throw new Error('CodeGen: \"try\" without \"catch\" and \"finally\"')\n const node = new Try()\n this._blockNode(node)\n this.code(tryBody)\n if (catchCode) {\n const error = this.name(\"e\")\n this._currNode = node.catch = new Catch(error)\n catchCode(error)\n }\n if (finallyCode) {\n this._currNode = node.finally = new Finally()\n this.code(finallyCode)\n }\n return this._endBlockNode(Catch, Finally)\n }\n\n // `throw` statement\n throw(error: Code): CodeGen {\n return this._leafNode(new Throw(error))\n }\n\n // start self-balancing block\n block(body?: Block, nodeCount?: number): CodeGen {\n this._blockStarts.push(this._nodes.length)\n if (body) this.code(body).endBlock(nodeCount)\n return this\n }\n\n // end the current self-balancing block\n endBlock(nodeCount?: number): CodeGen {\n const len = this._blockStarts.pop()\n if (len === undefined) throw new Error(\"CodeGen: not in self-balancing block\")\n const toClose = this._nodes.length - len\n if (toClose < 0 || (nodeCount !== undefined && toClose !== nodeCount)) {\n throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`)\n }\n this._nodes.length = len\n return this\n }\n\n // `function` heading (or definition if funcBody is passed)\n func(name: Name, args: Code = nil, async?: boolean, funcBody?: Block): CodeGen {\n this._blockNode(new Func(name, args, async))\n if (funcBody) this.code(funcBody).endFunc()\n return this\n }\n\n // end function definition\n endFunc(): CodeGen {\n return this._endBlockNode(Func)\n }\n\n optimize(n = 1): void {\n while (n-- > 0) {\n this._root.optimizeNodes()\n this._root.optimizeNames(this._root.names, this._constants)\n }\n }\n\n private _leafNode(node: LeafNode): CodeGen {\n this._currNode.nodes.push(node)\n return this\n }\n\n private _blockNode(node: StartBlockNode): void {\n this._currNode.nodes.push(node)\n this._nodes.push(node)\n }\n\n private _endBlockNode(N1: EndBlockNodeType, N2?: EndBlockNodeType): CodeGen {\n const n = this._currNode\n if (n instanceof N1 || (N2 && n instanceof N2)) {\n this._nodes.pop()\n return this\n }\n throw new Error(`CodeGen: not in block \"${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}\"`)\n }\n\n private _elseNode(node: If | Else): CodeGen {\n const n = this._currNode\n if (!(n instanceof If)) {\n throw new Error('CodeGen: \"else\" without \"if\"')\n }\n this._currNode = n.else = node\n return this\n }\n\n private get _root(): Root {\n return this._nodes[0] as Root\n }\n\n private get _currNode(): ParentNode {\n const ns = this._nodes\n return ns[ns.length - 1]\n }\n\n private set _currNode(node: ParentNode) {\n const ns = this._nodes\n ns[ns.length - 1] = node\n }\n\n // get nodeCount(): number {\n // return this._root.count\n // }\n}\n\nfunction addNames(names: UsedNames, from: UsedNames): UsedNames {\n for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0)\n return names\n}\n\nfunction addExprNames(names: UsedNames, from: SafeExpr): UsedNames {\n return from instanceof _CodeOrName ? addNames(names, from.names) : names\n}\n\nfunction optimizeExpr<T extends SafeExpr | Code>(expr: T, names: UsedNames, constants: Constants): T\nfunction optimizeExpr(expr: SafeExpr, names: UsedNames, constants: Constants): SafeExpr {\n if (expr instanceof Name) return replaceName(expr)\n if (!canOptimize(expr)) return expr\n return new _Code(\n expr._items.reduce((items: CodeItem[], c: SafeExpr | string) => {\n if (c instanceof Name) c = replaceName(c)\n if (c instanceof _Code) items.push(...c._items)\n else items.push(c)\n return items\n }, [])\n )\n\n function replaceName(n: Name): SafeExpr {\n const c = constants[n.str]\n if (c === undefined || names[n.str] !== 1) return n\n delete names[n.str]\n return c\n }\n\n function canOptimize(e: SafeExpr): e is _Code {\n return (\n e instanceof _Code &&\n e._items.some(\n (c) => c instanceof Name && names[c.str] === 1 && constants[c.str] !== undefined\n )\n )\n }\n}\n\nfunction subtractNames(names: UsedNames, from: UsedNames): void {\n for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0)\n}\n\nexport function not<T extends Code | SafeExpr>(x: T): T\nexport function not(x: Code | SafeExpr): Code | SafeExpr {\n return typeof x == \"boolean\" || typeof x == \"number\" || x === null ? !x : _`!${par(x)}`\n}\n\nconst andCode = mappend(operators.AND)\n\n// boolean AND (&&) expression with the passed arguments\nexport function and(...args: Code[]): Code {\n return args.reduce(andCode)\n}\n\nconst orCode = mappend(operators.OR)\n\n// boolean OR (||) expression with the passed arguments\nexport function or(...args: Code[]): Code {\n return args.reduce(orCode)\n}\n\ntype MAppend = (x: Code, y: Code) => Code\n\nfunction mappend(op: Code): MAppend {\n return (x, y) => (x === nil ? y : y === nil ? x : _`${par(x)} ${op} ${par(y)}`)\n}\n\nfunction par(x: Code): Code {\n return x instanceof Name ? x : _`(${x})`\n}\n","import type {AnySchema, EvaluatedProperties, EvaluatedItems} from \"../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \".\"\nimport {_, getProperty, Code, Name, CodeGen} from \"./codegen\"\nimport {_Code} from \"./codegen/code\"\nimport type {Rule, ValidationRules} from \"./rules\"\n\n// TODO refactor to use Set\nexport function toHash<T extends string = string>(arr: T[]): {[K in T]?: true} {\n const hash: {[K in T]?: true} = {}\n for (const item of arr) hash[item] = true\n return hash\n}\n\nexport function alwaysValidSchema(it: SchemaCxt, schema: AnySchema): boolean | void {\n if (typeof schema == \"boolean\") return schema\n if (Object.keys(schema).length === 0) return true\n checkUnknownRules(it, schema)\n return !schemaHasRules(schema, it.self.RULES.all)\n}\n\nexport function checkUnknownRules(it: SchemaCxt, schema: AnySchema = it.schema): void {\n const {opts, self} = it\n if (!opts.strictSchema) return\n if (typeof schema === \"boolean\") return\n const rules = self.RULES.keywords\n for (const key in schema) {\n if (!rules[key]) checkStrictMode(it, `unknown keyword: \"${key}\"`)\n }\n}\n\nexport function schemaHasRules(\n schema: AnySchema,\n rules: {[Key in string]?: boolean | Rule}\n): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (rules[key]) return true\n return false\n}\n\nexport function schemaHasRulesButRef(schema: AnySchema, RULES: ValidationRules): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (key !== \"$ref\" && RULES.all[key]) return true\n return false\n}\n\nexport function schemaRefOrVal(\n {topSchemaRef, schemaPath}: SchemaObjCxt,\n schema: unknown,\n keyword: string,\n $data?: string | false\n): Code | number | boolean {\n if (!$data) {\n if (typeof schema == \"number\" || typeof schema == \"boolean\") return schema\n if (typeof schema == \"string\") return _`${schema}`\n }\n return _`${topSchemaRef}${schemaPath}${getProperty(keyword)}`\n}\n\nexport function unescapeFragment(str: string): string {\n return unescapeJsonPointer(decodeURIComponent(str))\n}\n\nexport function escapeFragment(str: string | number): string {\n return encodeURIComponent(escapeJsonPointer(str))\n}\n\nexport function escapeJsonPointer(str: string | number): string {\n if (typeof str == \"number\") return `${str}`\n return str.replace(/~/g, \"~0\").replace(/\\//g, \"~1\")\n}\n\nexport function unescapeJsonPointer(str: string): string {\n return str.replace(/~1/g, \"/\").replace(/~0/g, \"~\")\n}\n\nexport function eachItem<T>(xs: T | T[], f: (x: T) => void): void {\n if (Array.isArray(xs)) {\n for (const x of xs) f(x)\n } else {\n f(xs)\n }\n}\n\ntype SomeEvaluated = EvaluatedProperties | EvaluatedItems\n\ntype MergeEvaluatedFunc<T extends SomeEvaluated> = (\n gen: CodeGen,\n from: Name | T,\n to: Name | Exclude<T, true> | undefined,\n toName?: typeof Name\n) => Name | T\n\ninterface MakeMergeFuncArgs<T extends SomeEvaluated> {\n mergeNames: (gen: CodeGen, from: Name, to: Name) => void\n mergeToName: (gen: CodeGen, from: T, to: Name) => void\n mergeValues: (from: T, to: Exclude<T, true>) => T\n resultToName: (gen: CodeGen, res?: T) => Name\n}\n\nfunction makeMergeEvaluated<T extends SomeEvaluated>({\n mergeNames,\n mergeToName,\n mergeValues,\n resultToName,\n}: MakeMergeFuncArgs<T>): MergeEvaluatedFunc<T> {\n return (gen, from, to, toName) => {\n const res =\n to === undefined\n ? from\n : to instanceof Name\n ? (from instanceof Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to)\n : from instanceof Name\n ? (mergeToName(gen, to, from), from)\n : mergeValues(from, to)\n return toName === Name && !(res instanceof Name) ? resultToName(gen, res) : res\n }\n}\n\ninterface MergeEvaluated {\n props: MergeEvaluatedFunc<EvaluatedProperties>\n items: MergeEvaluatedFunc<EvaluatedItems>\n}\n\nexport const mergeEvaluated: MergeEvaluated = {\n props: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () => {\n gen.if(\n _`${from} === true`,\n () => gen.assign(to, true),\n () => gen.assign(to, _`${to} || {}`).code(_`Object.assign(${to}, ${from})`)\n )\n }),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () => {\n if (from === true) {\n gen.assign(to, true)\n } else {\n gen.assign(to, _`${to} || {}`)\n setEvaluated(gen, to, from)\n }\n }),\n mergeValues: (from, to) => (from === true ? true : {...from, ...to}),\n resultToName: evaluatedPropsToName,\n }),\n items: makeMergeEvaluated({\n mergeNames: (gen, from, to) =>\n gen.if(_`${to} !== true && ${from} !== undefined`, () =>\n gen.assign(to, _`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeToName: (gen, from, to) =>\n gen.if(_`${to} !== true`, () =>\n gen.assign(to, from === true ? true : _`${to} > ${from} ? ${to} : ${from}`)\n ),\n mergeValues: (from, to) => (from === true ? true : Math.max(from, to)),\n resultToName: (gen, items) => gen.var(\"items\", items),\n }),\n}\n\nexport function evaluatedPropsToName(gen: CodeGen, ps?: EvaluatedProperties): Name {\n if (ps === true) return gen.var(\"props\", true)\n const props = gen.var(\"props\", _`{}`)\n if (ps !== undefined) setEvaluated(gen, props, ps)\n return props\n}\n\nexport function setEvaluated(gen: CodeGen, props: Name, ps: {[K in string]?: true}): void {\n Object.keys(ps).forEach((p) => gen.assign(_`${props}${getProperty(p)}`, true))\n}\n\nconst snippets: {[S in string]?: _Code} = {}\n\nexport function useFunc(gen: CodeGen, f: {code: string}): Name {\n return gen.scopeValue(\"func\", {\n ref: f,\n code: snippets[f.code] || (snippets[f.code] = new _Code(f.code)),\n })\n}\n\nexport enum Type {\n Num,\n Str,\n}\n\nexport function getErrorPath(\n dataProp: Name | string | number,\n dataPropType?: Type,\n jsPropertySyntax?: boolean\n): Code | string {\n // let path\n if (dataProp instanceof Name) {\n const isNumber = dataPropType === Type.Num\n return jsPropertySyntax\n ? isNumber\n ? _`\"[\" + ${dataProp} + \"]\"`\n : _`\"['\" + ${dataProp} + \"']\"`\n : isNumber\n ? _`\"/\" + ${dataProp}`\n : _`\"/\" + ${dataProp}.replace(/~/g, \"~0\").replace(/\\\\//g, \"~1\")` // TODO maybe use global escapePointer\n }\n return jsPropertySyntax ? getProperty(dataProp).toString() : \"/\" + escapeJsonPointer(dataProp)\n}\n\nexport function checkStrictMode(\n it: SchemaCxt,\n msg: string,\n mode: boolean | \"log\" = it.opts.strictSchema\n): void {\n if (!mode) return\n msg = `strict mode: ${msg}`\n if (mode === true) throw new Error(msg)\n it.self.logger.warn(msg)\n}\n","import {Name} from \"./codegen\"\n\nconst names = {\n // validation function arguments\n data: new Name(\"data\"), // data passed to validation function\n // args passed from referencing schema\n valCxt: new Name(\"valCxt\"), // validation/data context - should not be used directly, it is destructured to the names below\n instancePath: new Name(\"instancePath\"),\n parentData: new Name(\"parentData\"),\n parentDataProperty: new Name(\"parentDataProperty\"),\n rootData: new Name(\"rootData\"), // root data - same as the data passed to the first/top validation function\n dynamicAnchors: new Name(\"dynamicAnchors\"), // used to support recursiveRef and dynamicRef\n // function scoped variables\n vErrors: new Name(\"vErrors\"), // null or array of validation errors\n errors: new Name(\"errors\"), // counter of validation errors\n this: new Name(\"this\"),\n // \"globals\"\n self: new Name(\"self\"),\n scope: new Name(\"scope\"),\n // JTD serialize/parse name for JSON string and position\n json: new Name(\"json\"),\n jsonPos: new Name(\"jsonPos\"),\n jsonLen: new Name(\"jsonLen\"),\n jsonPart: new Name(\"jsonPart\"),\n}\n\nexport default names\n","import type {KeywordErrorCxt, KeywordErrorDefinition} from \"../types\"\nimport type {SchemaCxt} from \"./index\"\nimport {CodeGen, _, str, strConcat, Code, Name} from \"./codegen\"\nimport {SafeExpr} from \"./codegen/code\"\nimport {getErrorPath, Type} from \"./util\"\nimport N from \"./names\"\n\nexport const keywordError: KeywordErrorDefinition = {\n message: ({keyword}) => str`must pass \"${keyword}\" keyword validation`,\n}\n\nexport const keyword$DataError: KeywordErrorDefinition = {\n message: ({keyword, schemaType}) =>\n schemaType\n ? str`\"${keyword}\" keyword must be ${schemaType} ($data)`\n : str`\"${keyword}\" keyword is invalid ($data)`,\n}\n\nexport interface ErrorPaths {\n instancePath?: Code\n schemaPath?: string\n parentSchema?: boolean\n}\n\nexport function reportError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths,\n overrideAllErrors?: boolean\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n if (overrideAllErrors ?? (compositeRule || allErrors)) {\n addError(gen, errObj)\n } else {\n returnErrors(it, _`[${errObj}]`)\n }\n}\n\nexport function reportExtraError(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition = keywordError,\n errorPaths?: ErrorPaths\n): void {\n const {it} = cxt\n const {gen, compositeRule, allErrors} = it\n const errObj = errorObjectCode(cxt, error, errorPaths)\n addError(gen, errObj)\n if (!(compositeRule || allErrors)) {\n returnErrors(it, N.vErrors)\n }\n}\n\nexport function resetErrorsCount(gen: CodeGen, errsCount: Name): void {\n gen.assign(N.errors, errsCount)\n gen.if(_`${N.vErrors} !== null`, () =>\n gen.if(\n errsCount,\n () => gen.assign(_`${N.vErrors}.length`, errsCount),\n () => gen.assign(N.vErrors, null)\n )\n )\n}\n\nexport function extendErrors({\n gen,\n keyword,\n schemaValue,\n data,\n errsCount,\n it,\n}: KeywordErrorCxt): void {\n /* istanbul ignore if */\n if (errsCount === undefined) throw new Error(\"ajv implementation error\")\n const err = gen.name(\"err\")\n gen.forRange(\"i\", errsCount, N.errors, (i) => {\n gen.const(err, _`${N.vErrors}[${i}]`)\n gen.if(_`${err}.instancePath === undefined`, () =>\n gen.assign(_`${err}.instancePath`, strConcat(N.instancePath, it.errorPath))\n )\n gen.assign(_`${err}.schemaPath`, str`${it.errSchemaPath}/${keyword}`)\n if (it.opts.verbose) {\n gen.assign(_`${err}.schema`, schemaValue)\n gen.assign(_`${err}.data`, data)\n }\n })\n}\n\nfunction addError(gen: CodeGen, errObj: Code): void {\n const err = gen.const(\"err\", errObj)\n gen.if(\n _`${N.vErrors} === null`,\n () => gen.assign(N.vErrors, _`[${err}]`),\n _`${N.vErrors}.push(${err})`\n )\n gen.code(_`${N.errors}++`)\n}\n\nfunction returnErrors(it: SchemaCxt, errs: Code): void {\n const {gen, validateName, schemaEnv} = it\n if (schemaEnv.$async) {\n gen.throw(_`new ${it.ValidationError as Name}(${errs})`)\n } else {\n gen.assign(_`${validateName}.errors`, errs)\n gen.return(false)\n }\n}\n\nconst E = {\n keyword: new Name(\"keyword\"),\n schemaPath: new Name(\"schemaPath\"), // also used in JTD errors\n params: new Name(\"params\"),\n propertyName: new Name(\"propertyName\"),\n message: new Name(\"message\"),\n schema: new Name(\"schema\"),\n parentSchema: new Name(\"parentSchema\"),\n}\n\nfunction errorObjectCode(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths?: ErrorPaths\n): Code {\n const {createErrors} = cxt.it\n if (createErrors === false) return _`{}`\n return errorObject(cxt, error, errorPaths)\n}\n\nfunction errorObject(\n cxt: KeywordErrorCxt,\n error: KeywordErrorDefinition,\n errorPaths: ErrorPaths = {}\n): Code {\n const {gen, it} = cxt\n const keyValues: [Name, SafeExpr | string][] = [\n errorInstancePath(it, errorPaths),\n errorSchemaPath(cxt, errorPaths),\n ]\n extraErrorProps(cxt, error, keyValues)\n return gen.object(...keyValues)\n}\n\nfunction errorInstancePath({errorPath}: SchemaCxt, {instancePath}: ErrorPaths): [Name, Code] {\n const instPath = instancePath\n ? str`${errorPath}${getErrorPath(instancePath, Type.Str)}`\n : errorPath\n return [N.instancePath, strConcat(N.instancePath, instPath)]\n}\n\nfunction errorSchemaPath(\n {keyword, it: {errSchemaPath}}: KeywordErrorCxt,\n {schemaPath, parentSchema}: ErrorPaths\n): [Name, string | Code] {\n let schPath = parentSchema ? errSchemaPath : str`${errSchemaPath}/${keyword}`\n if (schemaPath) {\n schPath = str`${schPath}${getErrorPath(schemaPath, Type.Str)}`\n }\n return [E.schemaPath, schPath]\n}\n\nfunction extraErrorProps(\n cxt: KeywordErrorCxt,\n {params, message}: KeywordErrorDefinition,\n keyValues: [Name, SafeExpr | string][]\n): void {\n const {keyword, data, schemaValue, it} = cxt\n const {opts, propertyName, topSchemaRef, schemaPath} = it\n keyValues.push(\n [E.keyword, keyword],\n [E.params, typeof params == \"function\" ? params(cxt) : params || _`{}`]\n )\n if (opts.messages) {\n keyValues.push([E.message, typeof message == \"function\" ? message(cxt) : message])\n }\n if (opts.verbose) {\n keyValues.push(\n [E.schema, schemaValue],\n [E.parentSchema, _`${topSchemaRef}${schemaPath}`],\n [N.data, data]\n )\n }\n if (propertyName) keyValues.push([E.propertyName, propertyName])\n}\n","import type {KeywordErrorDefinition, KeywordErrorCxt} from \"../../types\"\nimport type {SchemaCxt} from \"..\"\nimport {reportError} from \"../errors\"\nimport {_, Name} from \"../codegen\"\nimport N from \"../names\"\n\nconst boolError: KeywordErrorDefinition = {\n message: \"boolean schema is false\",\n}\n\nexport function topBoolOrEmptySchema(it: SchemaCxt): void {\n const {gen, schema, validateName} = it\n if (schema === false) {\n falseSchemaError(it, false)\n } else if (typeof schema == \"object\" && schema.$async === true) {\n gen.return(N.data)\n } else {\n gen.assign(_`${validateName}.errors`, null)\n gen.return(true)\n }\n}\n\nexport function boolOrEmptySchema(it: SchemaCxt, valid: Name): void {\n const {gen, schema} = it\n if (schema === false) {\n gen.var(valid, false) // TODO var\n falseSchemaError(it)\n } else {\n gen.var(valid, true) // TODO var\n }\n}\n\nfunction falseSchemaError(it: SchemaCxt, overrideAllErrors?: boolean): void {\n const {gen, data} = it\n // TODO maybe some other interface should be used for non-keyword validation errors...\n const cxt: KeywordErrorCxt = {\n gen,\n keyword: \"false schema\",\n data,\n schema: false,\n schemaCode: false,\n schemaValue: false,\n params: {},\n it,\n }\n reportError(cxt, boolError, undefined, overrideAllErrors)\n}\n","import type {AddedKeywordDefinition} from \"../types\"\n\nconst _jsonTypes = [\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"object\", \"array\"] as const\n\nexport type JSONType = (typeof _jsonTypes)[number]\n\nconst jsonTypes: Set<string> = new Set(_jsonTypes)\n\nexport function isJSONType(x: unknown): x is JSONType {\n return typeof x == \"string\" && jsonTypes.has(x)\n}\n\ntype ValidationTypes = {\n [K in JSONType]: boolean | RuleGroup | undefined\n}\n\nexport interface ValidationRules {\n rules: RuleGroup[]\n post: RuleGroup\n all: {[Key in string]?: boolean | Rule} // rules that have to be validated\n keywords: {[Key in string]?: boolean} // all known keywords (superset of \"all\")\n types: ValidationTypes\n}\n\nexport interface RuleGroup {\n type?: JSONType\n rules: Rule[]\n}\n\n// This interface wraps KeywordDefinition because definition can have multiple keywords\nexport interface Rule {\n keyword: string\n definition: AddedKeywordDefinition\n}\n\nexport function getRules(): ValidationRules {\n const groups: Record<\"number\" | \"string\" | \"array\" | \"object\", RuleGroup> = {\n number: {type: \"number\", rules: []},\n string: {type: \"string\", rules: []},\n array: {type: \"array\", rules: []},\n object: {type: \"object\", rules: []},\n }\n return {\n types: {...groups, integer: true, boolean: true, null: true},\n rules: [{rules: []}, groups.number, groups.string, groups.array, groups.object],\n post: {rules: []},\n all: {},\n keywords: {},\n }\n}\n","import type {AnySchemaObject} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport type {JSONType, RuleGroup, Rule} from \"../rules\"\n\nexport function schemaHasRulesForType(\n {schema, self}: SchemaObjCxt,\n type: JSONType\n): boolean | undefined {\n const group = self.RULES.types[type]\n return group && group !== true && shouldUseGroup(schema, group)\n}\n\nexport function shouldUseGroup(schema: AnySchemaObject, group: RuleGroup): boolean {\n return group.rules.some((rule) => shouldUseRule(schema, rule))\n}\n\nexport function shouldUseRule(schema: AnySchemaObject, rule: Rule): boolean | undefined {\n return (\n schema[rule.keyword] !== undefined ||\n rule.definition.implements?.some((kwd) => schema[kwd] !== undefined)\n )\n}\n","import type {\n KeywordErrorDefinition,\n KeywordErrorCxt,\n ErrorObject,\n AnySchemaObject,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {isJSONType, JSONType} from \"../rules\"\nimport {schemaHasRulesForType} from \"./applicability\"\nimport {reportError} from \"../errors\"\nimport {_, nil, and, not, operators, Code, Name} from \"../codegen\"\nimport {toHash, schemaRefOrVal} from \"../util\"\n\nexport enum DataType {\n Correct,\n Wrong,\n}\n\nexport function getSchemaTypes(schema: AnySchemaObject): JSONType[] {\n const types = getJSONTypes(schema.type)\n const hasNull = types.includes(\"null\")\n if (hasNull) {\n if (schema.nullable === false) throw new Error(\"type: null contradicts nullable: false\")\n } else {\n if (!types.length && schema.nullable !== undefined) {\n throw new Error('\"nullable\" cannot be used without \"type\"')\n }\n if (schema.nullable === true) types.push(\"null\")\n }\n return types\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport function getJSONTypes(ts: unknown | unknown[]): JSONType[] {\n const types: unknown[] = Array.isArray(ts) ? ts : ts ? [ts] : []\n if (types.every(isJSONType)) return types\n throw new Error(\"type must be JSONType or JSONType[]: \" + types.join(\",\"))\n}\n\nexport function coerceAndCheckDataType(it: SchemaObjCxt, types: JSONType[]): boolean {\n const {gen, data, opts} = it\n const coerceTo = coerceToTypes(types, opts.coerceTypes)\n const checkTypes =\n types.length > 0 &&\n !(coerceTo.length === 0 && types.length === 1 && schemaHasRulesForType(it, types[0]))\n if (checkTypes) {\n const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong)\n gen.if(wrongType, () => {\n if (coerceTo.length) coerceData(it, types, coerceTo)\n else reportTypeError(it)\n })\n }\n return checkTypes\n}\n\nconst COERCIBLE: Set<JSONType> = new Set([\"string\", \"number\", \"integer\", \"boolean\", \"null\"])\nfunction coerceToTypes(types: JSONType[], coerceTypes?: boolean | \"array\"): JSONType[] {\n return coerceTypes\n ? types.filter((t) => COERCIBLE.has(t) || (coerceTypes === \"array\" && t === \"array\"))\n : []\n}\n\nfunction coerceData(it: SchemaObjCxt, types: JSONType[], coerceTo: JSONType[]): void {\n const {gen, data, opts} = it\n const dataType = gen.let(\"dataType\", _`typeof ${data}`)\n const coerced = gen.let(\"coerced\", _`undefined`)\n if (opts.coerceTypes === \"array\") {\n gen.if(_`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () =>\n gen\n .assign(data, _`${data}[0]`)\n .assign(dataType, _`typeof ${data}`)\n .if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))\n )\n }\n gen.if(_`${coerced} !== undefined`)\n for (const t of coerceTo) {\n if (COERCIBLE.has(t) || (t === \"array\" && opts.coerceTypes === \"array\")) {\n coerceSpecificType(t)\n }\n }\n gen.else()\n reportTypeError(it)\n gen.endIf()\n\n gen.if(_`${coerced} !== undefined`, () => {\n gen.assign(data, coerced)\n assignParentData(it, coerced)\n })\n\n function coerceSpecificType(t: string): void {\n switch (t) {\n case \"string\":\n gen\n .elseIf(_`${dataType} == \"number\" || ${dataType} == \"boolean\"`)\n .assign(coerced, _`\"\" + ${data}`)\n .elseIf(_`${data} === null`)\n .assign(coerced, _`\"\"`)\n return\n case \"number\":\n gen\n .elseIf(\n _`${dataType} == \"boolean\" || ${data} === null\n || (${dataType} == \"string\" && ${data} && ${data} == +${data})`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"integer\":\n gen\n .elseIf(\n _`${dataType} === \"boolean\" || ${data} === null\n || (${dataType} === \"string\" && ${data} && ${data} == +${data} && !(${data} % 1))`\n )\n .assign(coerced, _`+${data}`)\n return\n case \"boolean\":\n gen\n .elseIf(_`${data} === \"false\" || ${data} === 0 || ${data} === null`)\n .assign(coerced, false)\n .elseIf(_`${data} === \"true\" || ${data} === 1`)\n .assign(coerced, true)\n return\n case \"null\":\n gen.elseIf(_`${data} === \"\" || ${data} === 0 || ${data} === false`)\n gen.assign(coerced, null)\n return\n\n case \"array\":\n gen\n .elseIf(\n _`${dataType} === \"string\" || ${dataType} === \"number\"\n || ${dataType} === \"boolean\" || ${data} === null`\n )\n .assign(coerced, _`[${data}]`)\n }\n }\n}\n\nfunction assignParentData({gen, parentData, parentDataProperty}: SchemaObjCxt, expr: Name): void {\n // TODO use gen.property\n gen.if(_`${parentData} !== undefined`, () =>\n gen.assign(_`${parentData}[${parentDataProperty}]`, expr)\n )\n}\n\nexport function checkDataType(\n dataType: JSONType,\n data: Name,\n strictNums?: boolean | \"log\",\n correct = DataType.Correct\n): Code {\n const EQ = correct === DataType.Correct ? operators.EQ : operators.NEQ\n let cond: Code\n switch (dataType) {\n case \"null\":\n return _`${data} ${EQ} null`\n case \"array\":\n cond = _`Array.isArray(${data})`\n break\n case \"object\":\n cond = _`${data} && typeof ${data} == \"object\" && !Array.isArray(${data})`\n break\n case \"integer\":\n cond = numCond(_`!(${data} % 1) && !isNaN(${data})`)\n break\n case \"number\":\n cond = numCond()\n break\n default:\n return _`typeof ${data} ${EQ} ${dataType}`\n }\n return correct === DataType.Correct ? cond : not(cond)\n\n function numCond(_cond: Code = nil): Code {\n return and(_`typeof ${data} == \"number\"`, _cond, strictNums ? _`isFinite(${data})` : nil)\n }\n}\n\nexport function checkDataTypes(\n dataTypes: JSONType[],\n data: Name,\n strictNums?: boolean | \"log\",\n correct?: DataType\n): Code {\n if (dataTypes.length === 1) {\n return checkDataType(dataTypes[0], data, strictNums, correct)\n }\n let cond: Code\n const types = toHash(dataTypes)\n if (types.array && types.object) {\n const notObj = _`typeof ${data} != \"object\"`\n cond = types.null ? notObj : _`!${data} || ${notObj}`\n delete types.null\n delete types.array\n delete types.object\n } else {\n cond = nil\n }\n if (types.number) delete types.integer\n for (const t in types) cond = and(cond, checkDataType(t as JSONType, data, strictNums, correct))\n return cond\n}\n\nexport type TypeError = ErrorObject<\"type\", {type: string}>\n\nconst typeError: KeywordErrorDefinition = {\n message: ({schema}) => `must be ${schema}`,\n params: ({schema, schemaValue}) =>\n typeof schema == \"string\" ? _`{type: ${schema}}` : _`{type: ${schemaValue}}`,\n}\n\nexport function reportTypeError(it: SchemaObjCxt): void {\n const cxt = getTypeErrorContext(it)\n reportError(cxt, typeError)\n}\n\nfunction getTypeErrorContext(it: SchemaObjCxt): KeywordErrorCxt {\n const {gen, data, schema} = it\n const schemaCode = schemaRefOrVal(it, schema, \"type\")\n return {\n gen,\n keyword: \"type\",\n data,\n schema: schema.type,\n schemaCode,\n schemaValue: schemaCode,\n parentSchema: schema,\n params: {},\n it,\n }\n}\n","import type {SchemaObjCxt} from \"..\"\nimport {_, getProperty, stringify} from \"../codegen\"\nimport {checkStrictMode} from \"../util\"\n\nexport function assignDefaults(it: SchemaObjCxt, ty?: string): void {\n const {properties, items} = it.schema\n if (ty === \"object\" && properties) {\n for (const key in properties) {\n assignDefault(it, key, properties[key].default)\n }\n } else if (ty === \"array\" && Array.isArray(items)) {\n items.forEach((sch, i: number) => assignDefault(it, i, sch.default))\n }\n}\n\nfunction assignDefault(it: SchemaObjCxt, prop: string | number, defaultValue: unknown): void {\n const {gen, compositeRule, data, opts} = it\n if (defaultValue === undefined) return\n const childData = _`${data}${getProperty(prop)}`\n if (compositeRule) {\n checkStrictMode(it, `default is ignored for: ${childData}`)\n return\n }\n\n let condition = _`${childData} === undefined`\n if (opts.useDefaults === \"empty\") {\n condition = _`${condition} || ${childData} === null || ${childData} === \"\"`\n }\n // `${childData} === undefined` +\n // (opts.useDefaults === \"empty\" ? ` || ${childData} === null || ${childData} === \"\"` : \"\")\n gen.if(condition, _`${childData} = ${stringify(defaultValue)}`)\n}\n","import type {AnySchema, SchemaMap} from \"../types\"\nimport type {SchemaCxt} from \"../compile\"\nimport type {KeywordCxt} from \"../compile/validate\"\nimport {CodeGen, _, and, or, not, nil, strConcat, getProperty, Code, Name} from \"../compile/codegen\"\nimport {alwaysValidSchema, Type} from \"../compile/util\"\nimport N from \"../compile/names\"\nimport {useFunc} from \"../compile/util\"\nexport function checkReportMissingProp(cxt: KeywordCxt, prop: string): void {\n const {gen, data, it} = cxt\n gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => {\n cxt.setParams({missingProperty: _`${prop}`}, true)\n cxt.error()\n })\n}\n\nexport function checkMissingProp(\n {gen, data, it: {opts}}: KeywordCxt,\n properties: string[],\n missing: Name\n): Code {\n return or(\n ...properties.map((prop) =>\n and(noPropertyInData(gen, data, prop, opts.ownProperties), _`${missing} = ${prop}`)\n )\n )\n}\n\nexport function reportMissingProp(cxt: KeywordCxt, missing: Name): void {\n cxt.setParams({missingProperty: missing}, true)\n cxt.error()\n}\n\nexport function hasPropFunc(gen: CodeGen): Name {\n return gen.scopeValue(\"func\", {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n ref: Object.prototype.hasOwnProperty,\n code: _`Object.prototype.hasOwnProperty`,\n })\n}\n\nexport function isOwnProperty(gen: CodeGen, data: Name, property: Name | string): Code {\n return _`${hasPropFunc(gen)}.call(${data}, ${property})`\n}\n\nexport function propertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} !== undefined`\n return ownProperties ? _`${cond} && ${isOwnProperty(gen, data, property)}` : cond\n}\n\nexport function noPropertyInData(\n gen: CodeGen,\n data: Name,\n property: Name | string,\n ownProperties?: boolean\n): Code {\n const cond = _`${data}${getProperty(property)} === undefined`\n return ownProperties ? or(cond, not(isOwnProperty(gen, data, property))) : cond\n}\n\nexport function allSchemaProperties(schemaMap?: SchemaMap): string[] {\n return schemaMap ? Object.keys(schemaMap).filter((p) => p !== \"__proto__\") : []\n}\n\nexport function schemaProperties(it: SchemaCxt, schemaMap: SchemaMap): string[] {\n return allSchemaProperties(schemaMap).filter(\n (p) => !alwaysValidSchema(it, schemaMap[p] as AnySchema)\n )\n}\n\nexport function callValidateCode(\n {schemaCode, data, it: {gen, topSchemaRef, schemaPath, errorPath}, it}: KeywordCxt,\n func: Code,\n context: Code,\n passSchema?: boolean\n): Code {\n const dataAndSchema = passSchema ? _`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data\n const valCxt: [Name, Code | number][] = [\n [N.instancePath, strConcat(N.instancePath, errorPath)],\n [N.parentData, it.parentData],\n [N.parentDataProperty, it.parentDataProperty],\n [N.rootData, N.rootData],\n ]\n if (it.opts.dynamicRef) valCxt.push([N.dynamicAnchors, N.dynamicAnchors])\n const args = _`${dataAndSchema}, ${gen.object(...valCxt)}`\n return context !== nil ? _`${func}.call(${context}, ${args})` : _`${func}(${args})`\n}\n\nconst newRegExp = _`new RegExp`\n\nexport function usePattern({gen, it: {opts}}: KeywordCxt, pattern: string): Name {\n const u = opts.unicodeRegExp ? \"u\" : \"\"\n const {regExp} = opts.code\n const rx = regExp(pattern, u)\n\n return gen.scopeValue(\"pattern\", {\n key: rx.toString(),\n ref: rx,\n code: _`${regExp.code === \"new RegExp\" ? newRegExp : useFunc(gen, regExp)}(${pattern}, ${u})`,\n })\n}\n\nexport function validateArray(cxt: KeywordCxt): Name {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n if (it.allErrors) {\n const validArr = gen.let(\"valid\", true)\n validateItems(() => gen.assign(validArr, false))\n return validArr\n }\n gen.var(valid, true)\n validateItems(() => gen.break())\n return valid\n\n function validateItems(notValid: () => void): void {\n const len = gen.const(\"len\", _`${data}.length`)\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword,\n dataProp: i,\n dataPropType: Type.Num,\n },\n valid\n )\n gen.if(not(valid), notValid)\n })\n }\n}\n\nexport function validateUnion(cxt: KeywordCxt): void {\n const {gen, schema, keyword, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const alwaysValid = schema.some((sch: AnySchema) => alwaysValidSchema(it, sch))\n if (alwaysValid && !it.opts.unevaluated) return\n\n const valid = gen.let(\"valid\", false)\n const schValid = gen.name(\"_valid\")\n\n gen.block(() =>\n schema.forEach((_sch: AnySchema, i: number) => {\n const schCxt = cxt.subschema(\n {\n keyword,\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n gen.assign(valid, _`${valid} || ${schValid}`)\n const merged = cxt.mergeValidEvaluated(schCxt, schValid)\n // can short-circuit if `unevaluatedProperties/Items` not supported (opts.unevaluated !== true)\n // or if all properties and items were evaluated (it.props === true && it.items === true)\n if (!merged) gen.if(not(valid))\n })\n )\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n}\n","import type {KeywordCxt} from \".\"\nimport type {\n AnySchema,\n SchemaValidateFunction,\n AnyValidateFunction,\n AddedKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, nil, not, stringify, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport type {JSONType} from \"../rules\"\nimport {callValidateCode} from \"../../vocabularies/code\"\nimport {extendErrors} from \"../errors\"\n\ntype KeywordCompilationResult = AnySchema | SchemaValidateFunction | AnyValidateFunction\n\nexport function macroKeywordCode(cxt: KeywordCxt, def: MacroKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, it} = cxt\n const macroSchema = def.macro.call(it.self, schema, parentSchema, it)\n const schemaRef = useKeyword(gen, keyword, macroSchema)\n if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true)\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n schema: macroSchema,\n schemaPath: nil,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n topSchemaRef: schemaRef,\n compositeRule: true,\n },\n valid\n )\n cxt.pass(valid, () => cxt.error(true))\n}\n\nexport function funcKeywordCode(cxt: KeywordCxt, def: FuncKeywordDefinition): void {\n const {gen, keyword, schema, parentSchema, $data, it} = cxt\n checkAsyncKeyword(it, def)\n const validate =\n !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate\n const validateRef = useKeyword(gen, keyword, validate)\n const valid = gen.let(\"valid\")\n cxt.block$data(valid, validateKeyword)\n cxt.ok(def.valid ?? valid)\n\n function validateKeyword(): void {\n if (def.errors === false) {\n assignValid()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => cxt.error())\n } else {\n const ruleErrs = def.async ? validateAsync() : validateSync()\n if (def.modifying) modifyData(cxt)\n reportErrs(() => addErrs(cxt, ruleErrs))\n }\n }\n\n function validateAsync(): Name {\n const ruleErrs = gen.let(\"ruleErrs\", null)\n gen.try(\n () => assignValid(_`await `),\n (e) =>\n gen.assign(valid, false).if(\n _`${e} instanceof ${it.ValidationError as Name}`,\n () => gen.assign(ruleErrs, _`${e}.errors`),\n () => gen.throw(e)\n )\n )\n return ruleErrs\n }\n\n function validateSync(): Code {\n const validateErrs = _`${validateRef}.errors`\n gen.assign(validateErrs, null)\n assignValid(nil)\n return validateErrs\n }\n\n function assignValid(_await: Code = def.async ? _`await ` : nil): void {\n const passCxt = it.opts.passContext ? N.this : N.self\n const passSchema = !((\"compile\" in def && !$data) || def.schema === false)\n gen.assign(\n valid,\n _`${_await}${callValidateCode(cxt, validateRef, passCxt, passSchema)}`,\n def.modifying\n )\n }\n\n function reportErrs(errors: () => void): void {\n gen.if(not(def.valid ?? valid), errors)\n }\n}\n\nfunction modifyData(cxt: KeywordCxt): void {\n const {gen, data, it} = cxt\n gen.if(it.parentData, () => gen.assign(data, _`${it.parentData}[${it.parentDataProperty}]`))\n}\n\nfunction addErrs(cxt: KeywordCxt, errs: Code): void {\n const {gen} = cxt\n gen.if(\n _`Array.isArray(${errs})`,\n () => {\n gen\n .assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`)\n .assign(N.errors, _`${N.vErrors}.length`)\n extendErrors(cxt)\n },\n () => cxt.error()\n )\n}\n\nfunction checkAsyncKeyword({schemaEnv}: SchemaObjCxt, def: FuncKeywordDefinition): void {\n if (def.async && !schemaEnv.$async) throw new Error(\"async keyword in sync schema\")\n}\n\nfunction useKeyword(gen: CodeGen, keyword: string, result?: KeywordCompilationResult): Name {\n if (result === undefined) throw new Error(`keyword \"${keyword}\" failed to compile`)\n return gen.scopeValue(\n \"keyword\",\n typeof result == \"function\" ? {ref: result} : {ref: result, code: stringify(result)}\n )\n}\n\nexport function validSchemaType(\n schema: unknown,\n schemaType: JSONType[],\n allowUndefined = false\n): boolean {\n // TODO add tests\n return (\n !schemaType.length ||\n schemaType.some((st) =>\n st === \"array\"\n ? Array.isArray(schema)\n : st === \"object\"\n ? schema && typeof schema == \"object\" && !Array.isArray(schema)\n : typeof schema == st || (allowUndefined && typeof schema == \"undefined\")\n )\n )\n}\n\nexport function validateKeywordUsage(\n {schema, opts, self, errSchemaPath}: SchemaObjCxt,\n def: AddedKeywordDefinition,\n keyword: string\n): void {\n /* istanbul ignore if */\n if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) {\n throw new Error(\"ajv implementation error\")\n }\n\n const deps = def.dependencies\n if (deps?.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) {\n throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(\",\")}`)\n }\n\n if (def.validateSchema) {\n const valid = def.validateSchema(schema[keyword])\n if (!valid) {\n const msg =\n `keyword \"${keyword}\" value is invalid at path \"${errSchemaPath}\": ` +\n self.errorsText(def.validateSchema.errors)\n if (opts.validateSchema === \"log\") self.logger.error(msg)\n else throw new Error(msg)\n }\n }\n}\n","import type {AnySchema} from \"../../types\"\nimport type {SchemaObjCxt} from \"..\"\nimport {_, str, getProperty, Code, Name} from \"../codegen\"\nimport {escapeFragment, getErrorPath, Type} from \"../util\"\nimport type {JSONType} from \"../rules\"\n\nexport interface SubschemaContext {\n // TODO use Optional? align with SchemCxt property types\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef?: Code\n errorPath?: Code\n dataLevel?: number\n dataTypes?: JSONType[]\n data?: Name\n parentData?: Name\n parentDataProperty?: Code | number\n dataNames?: Name[]\n dataPathArr?: (Code | number)[]\n propertyName?: Name\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n compositeRule?: true\n createErrors?: boolean\n allErrors?: boolean\n}\n\nexport type SubschemaArgs = Partial<{\n keyword: string\n schemaProp: string | number\n schema: AnySchema\n schemaPath: Code\n errSchemaPath: string\n topSchemaRef: Code\n data: Name | Code\n dataProp: Code | string | number\n dataTypes: JSONType[]\n definedProperties: Set<string>\n propertyName: Name\n dataPropType: Type\n jtdDiscriminator: string\n jtdMetadata: boolean\n compositeRule: true\n createErrors: boolean\n allErrors: boolean\n}>\n\nexport function getSubschema(\n it: SchemaObjCxt,\n {keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef}: SubschemaArgs\n): SubschemaContext {\n if (keyword !== undefined && schema !== undefined) {\n throw new Error('both \"keyword\" and \"schema\" passed, only one allowed')\n }\n\n if (keyword !== undefined) {\n const sch = it.schema[keyword]\n return schemaProp === undefined\n ? {\n schema: sch,\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}`,\n }\n : {\n schema: sch[schemaProp],\n schemaPath: _`${it.schemaPath}${getProperty(keyword)}${getProperty(schemaProp)}`,\n errSchemaPath: `${it.errSchemaPath}/${keyword}/${escapeFragment(schemaProp)}`,\n }\n }\n\n if (schema !== undefined) {\n if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) {\n throw new Error('\"schemaPath\", \"errSchemaPath\" and \"topSchemaRef\" are required with \"schema\"')\n }\n return {\n schema,\n schemaPath,\n topSchemaRef,\n errSchemaPath,\n }\n }\n\n throw new Error('either \"keyword\" or \"schema\" must be passed')\n}\n\nexport function extendSubschemaData(\n subschema: SubschemaContext,\n it: SchemaObjCxt,\n {dataProp, dataPropType: dpType, data, dataTypes, propertyName}: SubschemaArgs\n): void {\n if (data !== undefined && dataProp !== undefined) {\n throw new Error('both \"data\" and \"dataProp\" passed, only one allowed')\n }\n\n const {gen} = it\n\n if (dataProp !== undefined) {\n const {errorPath, dataPathArr, opts} = it\n const nextData = gen.let(\"data\", _`${it.data}${getProperty(dataProp)}`, true)\n dataContextProps(nextData)\n subschema.errorPath = str`${errorPath}${getErrorPath(dataProp, dpType, opts.jsPropertySyntax)}`\n subschema.parentDataProperty = _`${dataProp}`\n subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]\n }\n\n if (data !== undefined) {\n const nextData = data instanceof Name ? data : gen.let(\"data\", data, true) // replaceable if used once?\n dataContextProps(nextData)\n if (propertyName !== undefined) subschema.propertyName = propertyName\n // TODO something is possibly wrong here with not changing parentDataProperty and not appending dataPathArr\n }\n\n if (dataTypes) subschema.dataTypes = dataTypes\n\n function dataContextProps(_nextData: Name): void {\n subschema.data = _nextData\n subschema.dataLevel = it.dataLevel + 1\n subschema.dataTypes = []\n it.definedProperties = new Set<string>()\n subschema.parentData = it.data\n subschema.dataNames = [...it.dataNames, _nextData]\n }\n}\n\nexport function extendSubschemaMode(\n subschema: SubschemaContext,\n {jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors}: SubschemaArgs\n): void {\n if (compositeRule !== undefined) subschema.compositeRule = compositeRule\n if (createErrors !== undefined) subschema.createErrors = createErrors\n if (allErrors !== undefined) subschema.allErrors = allErrors\n subschema.jtdDiscriminator = jtdDiscriminator // not inherited\n subschema.jtdMetadata = jtdMetadata // not inherited\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","'use strict';\n\nvar traverse = module.exports = function (schema, opts, cb) {\n // Legacy support for v0.3.1 and earlier.\n if (typeof opts == 'function') {\n cb = opts;\n opts = {};\n }\n\n cb = opts.cb || cb;\n var pre = (typeof cb == 'function') ? cb : cb.pre || function() {};\n var post = cb.post || function() {};\n\n _traverse(opts, pre, post, schema, '', schema);\n};\n\n\ntraverse.keywords = {\n additionalItems: true,\n items: true,\n contains: true,\n additionalProperties: true,\n propertyNames: true,\n not: true,\n if: true,\n then: true,\n else: true\n};\n\ntraverse.arrayKeywords = {\n items: true,\n allOf: true,\n anyOf: true,\n oneOf: true\n};\n\ntraverse.propsKeywords = {\n $defs: true,\n definitions: true,\n properties: true,\n patternProperties: true,\n dependencies: true\n};\n\ntraverse.skipKeywords = {\n default: true,\n enum: true,\n const: true,\n required: true,\n maximum: true,\n minimum: true,\n exclusiveMaximum: true,\n exclusiveMinimum: true,\n multipleOf: true,\n maxLength: true,\n minLength: true,\n pattern: true,\n format: true,\n maxItems: true,\n minItems: true,\n uniqueItems: true,\n maxProperties: true,\n minProperties: true\n};\n\n\nfunction _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {\n if (schema && typeof schema == 'object' && !Array.isArray(schema)) {\n pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n for (var key in schema) {\n var sch = schema[key];\n if (Array.isArray(sch)) {\n if (key in traverse.arrayKeywords) {\n for (var i=0; i<sch.length; i++)\n _traverse(opts, pre, post, sch[i], jsonPtr + '/' + key + '/' + i, rootSchema, jsonPtr, key, schema, i);\n }\n } else if (key in traverse.propsKeywords) {\n if (sch && typeof sch == 'object') {\n for (var prop in sch)\n _traverse(opts, pre, post, sch[prop], jsonPtr + '/' + key + '/' + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop);\n }\n } else if (key in traverse.keywords || (opts.allKeys && !(key in traverse.skipKeywords))) {\n _traverse(opts, pre, post, sch, jsonPtr + '/' + key, rootSchema, jsonPtr, key, schema);\n }\n }\n post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);\n }\n}\n\n\nfunction escapeJsonPtr(str) {\n return str.replace(/~/g, '~0').replace(/\\//g, '~1');\n}\n","import type {AnySchema, AnySchemaObject, UriResolver} from \"../types\"\nimport type Ajv from \"../ajv\"\nimport type {URIComponent} from \"fast-uri\"\nimport {eachItem} from \"./util\"\nimport * as equal from \"fast-deep-equal\"\nimport * as traverse from \"json-schema-traverse\"\n\n// the hash of local references inside the schema (created by getSchemaRefs), used for inline resolution\nexport type LocalRefs = {[Ref in string]?: AnySchemaObject}\n\n// TODO refactor to use keyword definitions\nconst SIMPLE_INLINED = new Set([\n \"type\",\n \"format\",\n \"pattern\",\n \"maxLength\",\n \"minLength\",\n \"maxProperties\",\n \"minProperties\",\n \"maxItems\",\n \"minItems\",\n \"maximum\",\n \"minimum\",\n \"uniqueItems\",\n \"multipleOf\",\n \"required\",\n \"enum\",\n \"const\",\n])\n\nexport function inlineRef(schema: AnySchema, limit: boolean | number = true): boolean {\n if (typeof schema == \"boolean\") return true\n if (limit === true) return !hasRef(schema)\n if (!limit) return false\n return countKeys(schema) <= limit\n}\n\nconst REF_KEYWORDS = new Set([\n \"$ref\",\n \"$recursiveRef\",\n \"$recursiveAnchor\",\n \"$dynamicRef\",\n \"$dynamicAnchor\",\n])\n\nfunction hasRef(schema: AnySchemaObject): boolean {\n for (const key in schema) {\n if (REF_KEYWORDS.has(key)) return true\n const sch = schema[key]\n if (Array.isArray(sch) && sch.some(hasRef)) return true\n if (typeof sch == \"object\" && hasRef(sch)) return true\n }\n return false\n}\n\nfunction countKeys(schema: AnySchemaObject): number {\n let count = 0\n for (const key in schema) {\n if (key === \"$ref\") return Infinity\n count++\n if (SIMPLE_INLINED.has(key)) continue\n if (typeof schema[key] == \"object\") {\n eachItem(schema[key], (sch) => (count += countKeys(sch)))\n }\n if (count === Infinity) return Infinity\n }\n return count\n}\n\nexport function getFullPath(resolver: UriResolver, id = \"\", normalize?: boolean): string {\n if (normalize !== false) id = normalizeId(id)\n const p = resolver.parse(id)\n return _getFullPath(resolver, p)\n}\n\nexport function _getFullPath(resolver: UriResolver, p: URIComponent): string {\n const serialized = resolver.serialize(p)\n return serialized.split(\"#\")[0] + \"#\"\n}\n\nconst TRAILING_SLASH_HASH = /#\\/?$/\nexport function normalizeId(id: string | undefined): string {\n return id ? id.replace(TRAILING_SLASH_HASH, \"\") : \"\"\n}\n\nexport function resolveUrl(resolver: UriResolver, baseId: string, id: string): string {\n id = normalizeId(id)\n return resolver.resolve(baseId, id)\n}\n\nconst ANCHOR = /^[a-z_][-a-z0-9._]*$/i\n\nexport function getSchemaRefs(this: Ajv, schema: AnySchema, baseId: string): LocalRefs {\n if (typeof schema == \"boolean\") return {}\n const {schemaId, uriResolver} = this.opts\n const schId = normalizeId(schema[schemaId] || baseId)\n const baseIds: {[JsonPtr in string]?: string} = {\"\": schId}\n const pathPrefix = getFullPath(uriResolver, schId, false)\n const localRefs: LocalRefs = {}\n const schemaRefs: Set<string> = new Set()\n\n traverse(schema, {allKeys: true}, (sch, jsonPtr, _, parentJsonPtr) => {\n if (parentJsonPtr === undefined) return\n const fullPath = pathPrefix + jsonPtr\n let innerBaseId = baseIds[parentJsonPtr]\n if (typeof sch[schemaId] == \"string\") innerBaseId = addRef.call(this, sch[schemaId])\n addAnchor.call(this, sch.$anchor)\n addAnchor.call(this, sch.$dynamicAnchor)\n baseIds[jsonPtr] = innerBaseId\n\n function addRef(this: Ajv, ref: string): string {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const _resolve = this.opts.uriResolver.resolve\n ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref)\n if (schemaRefs.has(ref)) throw ambiguos(ref)\n schemaRefs.add(ref)\n let schOrRef = this.refs[ref]\n if (typeof schOrRef == \"string\") schOrRef = this.refs[schOrRef]\n if (typeof schOrRef == \"object\") {\n checkAmbiguosRef(sch, schOrRef.schema, ref)\n } else if (ref !== normalizeId(fullPath)) {\n if (ref[0] === \"#\") {\n checkAmbiguosRef(sch, localRefs[ref], ref)\n localRefs[ref] = sch\n } else {\n this.refs[ref] = fullPath\n }\n }\n return ref\n }\n\n function addAnchor(this: Ajv, anchor: unknown): void {\n if (typeof anchor == \"string\") {\n if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor \"${anchor}\"`)\n addRef.call(this, `#${anchor}`)\n }\n }\n })\n\n return localRefs\n\n function checkAmbiguosRef(sch1: AnySchema, sch2: AnySchema | undefined, ref: string): void {\n if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref)\n }\n\n function ambiguos(ref: string): Error {\n return new Error(`reference \"${ref}\" resolves to more than one schema`)\n }\n}\n","import type {\n AddedKeywordDefinition,\n AnySchema,\n AnySchemaObject,\n KeywordErrorCxt,\n KeywordCxtParams,\n} from \"../../types\"\nimport type {SchemaCxt, SchemaObjCxt} from \"..\"\nimport type {InstanceOptions} from \"../../core\"\nimport {boolOrEmptySchema, topBoolOrEmptySchema} from \"./boolSchema\"\nimport {coerceAndCheckDataType, getSchemaTypes} from \"./dataType\"\nimport {shouldUseGroup, shouldUseRule} from \"./applicability\"\nimport {checkDataType, checkDataTypes, reportTypeError, DataType} from \"./dataType\"\nimport {assignDefaults} from \"./defaults\"\nimport {funcKeywordCode, macroKeywordCode, validateKeywordUsage, validSchemaType} from \"./keyword\"\nimport {getSubschema, extendSubschemaData, SubschemaArgs, extendSubschemaMode} from \"./subschema\"\nimport {_, nil, str, or, not, getProperty, Block, Code, Name, CodeGen} from \"../codegen\"\nimport N from \"../names\"\nimport {resolveUrl} from \"../resolve\"\nimport {\n schemaRefOrVal,\n schemaHasRulesButRef,\n checkUnknownRules,\n checkStrictMode,\n unescapeJsonPointer,\n mergeEvaluated,\n} from \"../util\"\nimport type {JSONType, Rule, RuleGroup} from \"../rules\"\nimport {\n ErrorPaths,\n reportError,\n reportExtraError,\n resetErrorsCount,\n keyword$DataError,\n} from \"../errors\"\n\n// schema compilation - generates validation function, subschemaCode (below) is used for subschemas\nexport function validateFunctionCode(it: SchemaCxt): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n topSchemaObjCode(it)\n return\n }\n }\n validateFunction(it, () => topBoolOrEmptySchema(it))\n}\n\nfunction validateFunction(\n {gen, validateName, schema, schemaEnv, opts}: SchemaCxt,\n body: Block\n): void {\n if (opts.code.es5) {\n gen.func(validateName, _`${N.data}, ${N.valCxt}`, schemaEnv.$async, () => {\n gen.code(_`\"use strict\"; ${funcSourceUrl(schema, opts)}`)\n destructureValCxtES5(gen, opts)\n gen.code(body)\n })\n } else {\n gen.func(validateName, _`${N.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () =>\n gen.code(funcSourceUrl(schema, opts)).code(body)\n )\n }\n}\n\nfunction destructureValCxt(opts: InstanceOptions): Code {\n return _`{${N.instancePath}=\"\", ${N.parentData}, ${N.parentDataProperty}, ${N.rootData}=${\n N.data\n }${opts.dynamicRef ? _`, ${N.dynamicAnchors}={}` : nil}}={}`\n}\n\nfunction destructureValCxtES5(gen: CodeGen, opts: InstanceOptions): void {\n gen.if(\n N.valCxt,\n () => {\n gen.var(N.instancePath, _`${N.valCxt}.${N.instancePath}`)\n gen.var(N.parentData, _`${N.valCxt}.${N.parentData}`)\n gen.var(N.parentDataProperty, _`${N.valCxt}.${N.parentDataProperty}`)\n gen.var(N.rootData, _`${N.valCxt}.${N.rootData}`)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`${N.valCxt}.${N.dynamicAnchors}`)\n },\n () => {\n gen.var(N.instancePath, _`\"\"`)\n gen.var(N.parentData, _`undefined`)\n gen.var(N.parentDataProperty, _`undefined`)\n gen.var(N.rootData, N.data)\n if (opts.dynamicRef) gen.var(N.dynamicAnchors, _`{}`)\n }\n )\n}\n\nfunction topSchemaObjCode(it: SchemaObjCxt): void {\n const {schema, opts, gen} = it\n validateFunction(it, () => {\n if (opts.$comment && schema.$comment) commentKeyword(it)\n checkNoDefault(it)\n gen.let(N.vErrors, null)\n gen.let(N.errors, 0)\n if (opts.unevaluated) resetEvaluated(it)\n typeAndKeywords(it)\n returnResults(it)\n })\n return\n}\n\nfunction resetEvaluated(it: SchemaObjCxt): void {\n // TODO maybe some hook to execute it in the end to check whether props/items are Name, as in assignEvaluated\n const {gen, validateName} = it\n it.evaluated = gen.const(\"evaluated\", _`${validateName}.evaluated`)\n gen.if(_`${it.evaluated}.dynamicProps`, () => gen.assign(_`${it.evaluated}.props`, _`undefined`))\n gen.if(_`${it.evaluated}.dynamicItems`, () => gen.assign(_`${it.evaluated}.items`, _`undefined`))\n}\n\nfunction funcSourceUrl(schema: AnySchema, opts: InstanceOptions): Code {\n const schId = typeof schema == \"object\" && schema[opts.schemaId]\n return schId && (opts.code.source || opts.code.process) ? _`/*# sourceURL=${schId} */` : nil\n}\n\n// schema compilation - this function is used recursively to generate code for sub-schemas\nfunction subschemaCode(it: SchemaCxt, valid: Name): void {\n if (isSchemaObj(it)) {\n checkKeywords(it)\n if (schemaCxtHasRules(it)) {\n subSchemaObjCode(it, valid)\n return\n }\n }\n boolOrEmptySchema(it, valid)\n}\n\nfunction schemaCxtHasRules({schema, self}: SchemaCxt): boolean {\n if (typeof schema == \"boolean\") return !schema\n for (const key in schema) if (self.RULES.all[key]) return true\n return false\n}\n\nfunction isSchemaObj(it: SchemaCxt): it is SchemaObjCxt {\n return typeof it.schema != \"boolean\"\n}\n\nfunction subSchemaObjCode(it: SchemaObjCxt, valid: Name): void {\n const {schema, gen, opts} = it\n if (opts.$comment && schema.$comment) commentKeyword(it)\n updateContext(it)\n checkAsyncSchema(it)\n const errsCount = gen.const(\"_errs\", N.errors)\n typeAndKeywords(it, errsCount)\n // TODO var\n gen.var(valid, _`${errsCount} === ${N.errors}`)\n}\n\nfunction checkKeywords(it: SchemaObjCxt): void {\n checkUnknownRules(it)\n checkRefsAndKeywords(it)\n}\n\nfunction typeAndKeywords(it: SchemaObjCxt, errsCount?: Name): void {\n if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount)\n const types = getSchemaTypes(it.schema)\n const checkedTypes = coerceAndCheckDataType(it, types)\n schemaKeywords(it, types, !checkedTypes, errsCount)\n}\n\nfunction checkRefsAndKeywords(it: SchemaObjCxt): void {\n const {schema, errSchemaPath, opts, self} = it\n if (schema.$ref && opts.ignoreKeywordsWithRef && schemaHasRulesButRef(schema, self.RULES)) {\n self.logger.warn(`$ref: keywords ignored in schema at path \"${errSchemaPath}\"`)\n }\n}\n\nfunction checkNoDefault(it: SchemaObjCxt): void {\n const {schema, opts} = it\n if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) {\n checkStrictMode(it, \"default is ignored in the schema root\")\n }\n}\n\nfunction updateContext(it: SchemaObjCxt): void {\n const schId = it.schema[it.opts.schemaId]\n if (schId) it.baseId = resolveUrl(it.opts.uriResolver, it.baseId, schId)\n}\n\nfunction checkAsyncSchema(it: SchemaObjCxt): void {\n if (it.schema.$async && !it.schemaEnv.$async) throw new Error(\"async schema in sync schema\")\n}\n\nfunction commentKeyword({gen, schemaEnv, schema, errSchemaPath, opts}: SchemaObjCxt): void {\n const msg = schema.$comment\n if (opts.$comment === true) {\n gen.code(_`${N.self}.logger.log(${msg})`)\n } else if (typeof opts.$comment == \"function\") {\n const schemaPath = str`${errSchemaPath}/$comment`\n const rootName = gen.scopeValue(\"root\", {ref: schemaEnv.root})\n gen.code(_`${N.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`)\n }\n}\n\nfunction returnResults(it: SchemaCxt): void {\n const {gen, schemaEnv, validateName, ValidationError, opts} = it\n if (schemaEnv.$async) {\n // TODO assign unevaluated\n gen.if(\n _`${N.errors} === 0`,\n () => gen.return(N.data),\n () => gen.throw(_`new ${ValidationError as Name}(${N.vErrors})`)\n )\n } else {\n gen.assign(_`${validateName}.errors`, N.vErrors)\n if (opts.unevaluated) assignEvaluated(it)\n gen.return(_`${N.errors} === 0`)\n }\n}\n\nfunction assignEvaluated({gen, evaluated, props, items}: SchemaCxt): void {\n if (props instanceof Name) gen.assign(_`${evaluated}.props`, props)\n if (items instanceof Name) gen.assign(_`${evaluated}.items`, items)\n}\n\nfunction schemaKeywords(\n it: SchemaObjCxt,\n types: JSONType[],\n typeErrors: boolean,\n errsCount?: Name\n): void {\n const {gen, schema, data, allErrors, opts, self} = it\n const {RULES} = self\n if (schema.$ref && (opts.ignoreKeywordsWithRef || !schemaHasRulesButRef(schema, RULES))) {\n gen.block(() => keywordCode(it, \"$ref\", (RULES.all.$ref as Rule).definition)) // TODO typecast\n return\n }\n if (!opts.jtd) checkStrictTypes(it, types)\n gen.block(() => {\n for (const group of RULES.rules) groupKeywords(group)\n groupKeywords(RULES.post)\n })\n\n function groupKeywords(group: RuleGroup): void {\n if (!shouldUseGroup(schema, group)) return\n if (group.type) {\n gen.if(checkDataType(group.type, data, opts.strictNumbers))\n iterateKeywords(it, group)\n if (types.length === 1 && types[0] === group.type && typeErrors) {\n gen.else()\n reportTypeError(it)\n }\n gen.endIf()\n } else {\n iterateKeywords(it, group)\n }\n // TODO make it \"ok\" call?\n if (!allErrors) gen.if(_`${N.errors} === ${errsCount || 0}`)\n }\n}\n\nfunction iterateKeywords(it: SchemaObjCxt, group: RuleGroup): void {\n const {\n gen,\n schema,\n opts: {useDefaults},\n } = it\n if (useDefaults) assignDefaults(it, group.type)\n gen.block(() => {\n for (const rule of group.rules) {\n if (shouldUseRule(schema, rule)) {\n keywordCode(it, rule.keyword, rule.definition, group.type)\n }\n }\n })\n}\n\nfunction checkStrictTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (it.schemaEnv.meta || !it.opts.strictTypes) return\n checkContextTypes(it, types)\n if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types)\n checkKeywordTypes(it, it.dataTypes)\n}\n\nfunction checkContextTypes(it: SchemaObjCxt, types: JSONType[]): void {\n if (!types.length) return\n if (!it.dataTypes.length) {\n it.dataTypes = types\n return\n }\n types.forEach((t) => {\n if (!includesType(it.dataTypes, t)) {\n strictTypesError(it, `type \"${t}\" not allowed by context \"${it.dataTypes.join(\",\")}\"`)\n }\n })\n narrowSchemaTypes(it, types)\n}\n\nfunction checkMultipleTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n if (ts.length > 1 && !(ts.length === 2 && ts.includes(\"null\"))) {\n strictTypesError(it, \"use allowUnionTypes to allow union type keyword\")\n }\n}\n\nfunction checkKeywordTypes(it: SchemaObjCxt, ts: JSONType[]): void {\n const rules = it.self.RULES.all\n for (const keyword in rules) {\n const rule = rules[keyword]\n if (typeof rule == \"object\" && shouldUseRule(it.schema, rule)) {\n const {type} = rule.definition\n if (type.length && !type.some((t) => hasApplicableType(ts, t))) {\n strictTypesError(it, `missing type \"${type.join(\",\")}\" for keyword \"${keyword}\"`)\n }\n }\n }\n}\n\nfunction hasApplicableType(schTs: JSONType[], kwdT: JSONType): boolean {\n return schTs.includes(kwdT) || (kwdT === \"number\" && schTs.includes(\"integer\"))\n}\n\nfunction includesType(ts: JSONType[], t: JSONType): boolean {\n return ts.includes(t) || (t === \"integer\" && ts.includes(\"number\"))\n}\n\nfunction narrowSchemaTypes(it: SchemaObjCxt, withTypes: JSONType[]): void {\n const ts: JSONType[] = []\n for (const t of it.dataTypes) {\n if (includesType(withTypes, t)) ts.push(t)\n else if (withTypes.includes(\"integer\") && t === \"number\") ts.push(\"integer\")\n }\n it.dataTypes = ts\n}\n\nfunction strictTypesError(it: SchemaObjCxt, msg: string): void {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n msg += ` at \"${schemaPath}\" (strictTypes)`\n checkStrictMode(it, msg, it.opts.strictTypes)\n}\n\nexport class KeywordCxt implements KeywordErrorCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean\n readonly keyword: string\n readonly data: Name // Name referencing the current level of the data instance\n readonly $data?: string | false\n schema: any // keyword value in the schema\n readonly schemaValue: Code | number | boolean // Code reference to keyword schema value or primitive value\n readonly schemaCode: Code | number | boolean // Code reference to resolved schema value (different if schema is $data)\n readonly schemaType: JSONType[] // allowed type(s) of keyword value in the schema\n readonly parentSchema: AnySchemaObject\n readonly errsCount?: Name // Name reference to the number of validation errors collected before this keyword,\n // requires option trackErrors in keyword definition\n params: KeywordCxtParams // object to pass parameters to error messages from keyword code\n readonly it: SchemaObjCxt // schema compilation context (schema is guaranteed to be an object, not boolean)\n readonly def: AddedKeywordDefinition\n\n constructor(it: SchemaObjCxt, def: AddedKeywordDefinition, keyword: string) {\n validateKeywordUsage(it, def, keyword)\n this.gen = it.gen\n this.allErrors = it.allErrors\n this.keyword = keyword\n this.data = it.data\n this.schema = it.schema[keyword]\n this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data\n this.schemaValue = schemaRefOrVal(it, this.schema, keyword, this.$data)\n this.schemaType = def.schemaType\n this.parentSchema = it.schema\n this.params = {}\n this.it = it\n this.def = def\n\n if (this.$data) {\n this.schemaCode = it.gen.const(\"vSchema\", getData(this.$data, it))\n } else {\n this.schemaCode = this.schemaValue\n if (!validSchemaType(this.schema, def.schemaType, def.allowUndefined)) {\n throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`)\n }\n }\n\n if (\"code\" in def ? def.trackErrors : def.errors !== false) {\n this.errsCount = it.gen.const(\"_errs\", N.errors)\n }\n }\n\n result(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.failResult(not(condition), successAction, failAction)\n }\n\n failResult(condition: Code, successAction?: () => void, failAction?: () => void): void {\n this.gen.if(condition)\n if (failAction) failAction()\n else this.error()\n if (successAction) {\n this.gen.else()\n successAction()\n if (this.allErrors) this.gen.endIf()\n } else {\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n }\n\n pass(condition: Code, failAction?: () => void): void {\n this.failResult(not(condition), undefined, failAction)\n }\n\n fail(condition?: Code): void {\n if (condition === undefined) {\n this.error()\n if (!this.allErrors) this.gen.if(false) // this branch will be removed by gen.optimize\n return\n }\n this.gen.if(condition)\n this.error()\n if (this.allErrors) this.gen.endIf()\n else this.gen.else()\n }\n\n fail$data(condition: Code): void {\n if (!this.$data) return this.fail(condition)\n const {schemaCode} = this\n this.fail(_`${schemaCode} !== undefined && (${or(this.invalid$data(), condition)})`)\n }\n\n error(append?: boolean, errorParams?: KeywordCxtParams, errorPaths?: ErrorPaths): void {\n if (errorParams) {\n this.setParams(errorParams)\n this._error(append, errorPaths)\n this.setParams({})\n return\n }\n this._error(append, errorPaths)\n }\n\n private _error(append?: boolean, errorPaths?: ErrorPaths): void {\n ;(append ? reportExtraError : reportError)(this, this.def.error, errorPaths)\n }\n\n $dataError(): void {\n reportError(this, this.def.$dataError || keyword$DataError)\n }\n\n reset(): void {\n if (this.errsCount === undefined) throw new Error('add \"trackErrors\" to keyword definition')\n resetErrorsCount(this.gen, this.errsCount)\n }\n\n ok(cond: Code | boolean): void {\n if (!this.allErrors) this.gen.if(cond)\n }\n\n setParams(obj: KeywordCxtParams, assign?: true): void {\n if (assign) Object.assign(this.params, obj)\n else this.params = obj\n }\n\n block$data(valid: Name, codeBlock: () => void, $dataValid: Code = nil): void {\n this.gen.block(() => {\n this.check$data(valid, $dataValid)\n codeBlock()\n })\n }\n\n check$data(valid: Name = nil, $dataValid: Code = nil): void {\n if (!this.$data) return\n const {gen, schemaCode, schemaType, def} = this\n gen.if(or(_`${schemaCode} === undefined`, $dataValid))\n if (valid !== nil) gen.assign(valid, true)\n if (schemaType.length || def.validateSchema) {\n gen.elseIf(this.invalid$data())\n this.$dataError()\n if (valid !== nil) gen.assign(valid, false)\n }\n gen.else()\n }\n\n invalid$data(): Code {\n const {gen, schemaCode, schemaType, def, it} = this\n return or(wrong$DataType(), invalid$DataSchema())\n\n function wrong$DataType(): Code {\n if (schemaType.length) {\n /* istanbul ignore if */\n if (!(schemaCode instanceof Name)) throw new Error(\"ajv implementation error\")\n const st = Array.isArray(schemaType) ? schemaType : [schemaType]\n return _`${checkDataTypes(st, schemaCode, it.opts.strictNumbers, DataType.Wrong)}`\n }\n return nil\n }\n\n function invalid$DataSchema(): Code {\n if (def.validateSchema) {\n const validateSchemaRef = gen.scopeValue(\"validate$data\", {ref: def.validateSchema}) // TODO value.code for standalone\n return _`!${validateSchemaRef}(${schemaCode})`\n }\n return nil\n }\n }\n\n subschema(appl: SubschemaArgs, valid: Name): SchemaCxt {\n const subschema = getSubschema(this.it, appl)\n extendSubschemaData(subschema, this.it, appl)\n extendSubschemaMode(subschema, appl)\n const nextContext = {...this.it, ...subschema, items: undefined, props: undefined}\n subschemaCode(nextContext, valid)\n return nextContext\n }\n\n mergeEvaluated(schemaCxt: SchemaCxt, toName?: typeof Name): void {\n const {it, gen} = this\n if (!it.opts.unevaluated) return\n if (it.props !== true && schemaCxt.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schemaCxt.props, it.props, toName)\n }\n if (it.items !== true && schemaCxt.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schemaCxt.items, it.items, toName)\n }\n }\n\n mergeValidEvaluated(schemaCxt: SchemaCxt, valid: Name): boolean | void {\n const {it, gen} = this\n if (it.opts.unevaluated && (it.props !== true || it.items !== true)) {\n gen.if(valid, () => this.mergeEvaluated(schemaCxt, Name))\n return true\n }\n }\n}\n\nfunction keywordCode(\n it: SchemaObjCxt,\n keyword: string,\n def: AddedKeywordDefinition,\n ruleType?: JSONType\n): void {\n const cxt = new KeywordCxt(it, def, keyword)\n if (\"code\" in def) {\n def.code(cxt, ruleType)\n } else if (cxt.$data && def.validate) {\n funcKeywordCode(cxt, def)\n } else if (\"macro\" in def) {\n macroKeywordCode(cxt, def)\n } else if (def.compile || def.validate) {\n funcKeywordCode(cxt, def)\n }\n}\n\nconst JSON_POINTER = /^\\/(?:[^~]|~0|~1)*$/\nconst RELATIVE_JSON_POINTER = /^([0-9]+)(#|\\/(?:[^~]|~0|~1)*)?$/\nexport function getData(\n $data: string,\n {dataLevel, dataNames, dataPathArr}: SchemaCxt\n): Code | number {\n let jsonPointer\n let data: Code\n if ($data === \"\") return N.rootData\n if ($data[0] === \"/\") {\n if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`)\n jsonPointer = $data\n data = N.rootData\n } else {\n const matches = RELATIVE_JSON_POINTER.exec($data)\n if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`)\n const up: number = +matches[1]\n jsonPointer = matches[2]\n if (jsonPointer === \"#\") {\n if (up >= dataLevel) throw new Error(errorMsg(\"property/index\", up))\n return dataPathArr[dataLevel - up]\n }\n if (up > dataLevel) throw new Error(errorMsg(\"data\", up))\n data = dataNames[dataLevel - up]\n if (!jsonPointer) return data\n }\n\n let expr = data\n const segments = jsonPointer.split(\"/\")\n for (const segment of segments) {\n if (segment) {\n data = _`${data}${getProperty(unescapeJsonPointer(segment))}`\n expr = _`${expr} && ${data}`\n }\n }\n return expr\n\n function errorMsg(pointerType: string, up: number): string {\n return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`\n }\n}\n","import type {ErrorObject} from \"../types\"\n\nexport default class ValidationError extends Error {\n readonly errors: Partial<ErrorObject>[]\n readonly ajv: true\n readonly validation: true\n\n constructor(errors: Partial<ErrorObject>[]) {\n super(\"validation failed\")\n this.errors = errors\n this.ajv = this.validation = true\n }\n}\n","import {resolveUrl, normalizeId, getFullPath} from \"./resolve\"\nimport type {UriResolver} from \"../types\"\n\nexport default class MissingRefError extends Error {\n readonly missingRef: string\n readonly missingSchema: string\n\n constructor(resolver: UriResolver, baseId: string, ref: string, msg?: string) {\n super(msg || `can't resolve reference ${ref} from id ${baseId}`)\n this.missingRef = resolveUrl(resolver, baseId, ref)\n this.missingSchema = normalizeId(getFullPath(resolver, this.missingRef))\n }\n}\n","import type {\n AnySchema,\n AnySchemaObject,\n AnyValidateFunction,\n AsyncValidateFunction,\n EvaluatedProperties,\n EvaluatedItems,\n} from \"../types\"\nimport type Ajv from \"../core\"\nimport type {InstanceOptions} from \"../core\"\nimport {CodeGen, _, nil, stringify, Name, Code, ValueScopeName} from \"./codegen\"\nimport ValidationError from \"../runtime/validation_error\"\nimport N from \"./names\"\nimport {LocalRefs, getFullPath, _getFullPath, inlineRef, normalizeId, resolveUrl} from \"./resolve\"\nimport {schemaHasRulesButRef, unescapeFragment} from \"./util\"\nimport {validateFunctionCode} from \"./validate\"\nimport {URIComponent} from \"fast-uri\"\nimport {JSONType} from \"./rules\"\n\nexport type SchemaRefs = {\n [Ref in string]?: SchemaEnv | AnySchema\n}\n\nexport interface SchemaCxt {\n readonly gen: CodeGen\n readonly allErrors?: boolean // validation mode - whether to collect all errors or break on error\n readonly data: Name // Name with reference to the current part of data instance\n readonly parentData: Name // should be used in keywords modifying data\n readonly parentDataProperty: Code | number // should be used in keywords modifying data\n readonly dataNames: Name[]\n readonly dataPathArr: (Code | number)[]\n readonly dataLevel: number // the level of the currently validated data,\n // it can be used to access both the property names and the data on all levels from the top.\n dataTypes: JSONType[] // data types applied to the current part of data instance\n definedProperties: Set<string> // set of properties to keep track of for required checks\n readonly topSchemaRef: Code\n readonly validateName: Name\n evaluated?: Name\n readonly ValidationError?: Name\n readonly schema: AnySchema // current schema object - equal to parentSchema passed via KeywordCxt\n readonly schemaEnv: SchemaEnv\n readonly rootId: string\n baseId: string // the current schema base URI that should be used as the base for resolving URIs in references (\\$ref)\n readonly schemaPath: Code // the run-time expression that evaluates to the property name of the current schema\n readonly errSchemaPath: string // this is actual string, should not be changed to Code\n readonly errorPath: Code\n readonly propertyName?: Name\n readonly compositeRule?: boolean // true indicates that the current schema is inside the compound keyword,\n // where failing some rule doesn't mean validation failure (`anyOf`, `oneOf`, `not`, `if`).\n // This flag is used to determine whether you can return validation result immediately after any error in case the option `allErrors` is not `true.\n // You only need to use it if you have many steps in your keywords and potentially can define multiple errors.\n props?: EvaluatedProperties | Name // properties evaluated by this schema - used by parent schema or assigned to validation function\n items?: EvaluatedItems | Name // last item evaluated by this schema - used by parent schema or assigned to validation function\n jtdDiscriminator?: string\n jtdMetadata?: boolean\n readonly createErrors?: boolean\n readonly opts: InstanceOptions // Ajv instance option.\n readonly self: Ajv // current Ajv instance\n}\n\nexport interface SchemaObjCxt extends SchemaCxt {\n readonly schema: AnySchemaObject\n}\ninterface SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root?: SchemaEnv\n readonly baseId?: string\n readonly schemaPath?: string\n readonly localRefs?: LocalRefs\n readonly meta?: boolean\n}\n\nexport class SchemaEnv implements SchemaEnvArgs {\n readonly schema: AnySchema\n readonly schemaId?: \"$id\" | \"id\"\n readonly root: SchemaEnv\n baseId: string // TODO possibly, it should be readonly\n schemaPath?: string\n localRefs?: LocalRefs\n readonly meta?: boolean\n readonly $async?: boolean // true if the current schema is asynchronous.\n readonly refs: SchemaRefs = {}\n readonly dynamicAnchors: {[Ref in string]?: true} = {}\n validate?: AnyValidateFunction\n validateName?: ValueScopeName\n serialize?: (data: unknown) => string\n serializeName?: ValueScopeName\n parse?: (data: string) => unknown\n parseName?: ValueScopeName\n\n constructor(env: SchemaEnvArgs) {\n let schema: AnySchemaObject | undefined\n if (typeof env.schema == \"object\") schema = env.schema\n this.schema = env.schema\n this.schemaId = env.schemaId\n this.root = env.root || this\n this.baseId = env.baseId ?? normalizeId(schema?.[env.schemaId || \"$id\"])\n this.schemaPath = env.schemaPath\n this.localRefs = env.localRefs\n this.meta = env.meta\n this.$async = schema?.$async\n this.refs = {}\n }\n}\n\n// let codeSize = 0\n// let nodeCount = 0\n\n// Compiles schema in SchemaEnv\nexport function compileSchema(this: Ajv, sch: SchemaEnv): SchemaEnv {\n // TODO refactor - remove compilations\n const _sch = getCompilingSchema.call(this, sch)\n if (_sch) return _sch\n const rootId = getFullPath(this.opts.uriResolver, sch.root.baseId) // TODO if getFullPath removed 1 tests fails\n const {es5, lines} = this.opts.code\n const {ownProperties} = this.opts\n const gen = new CodeGen(this.scope, {es5, lines, ownProperties})\n let _ValidationError\n if (sch.$async) {\n _ValidationError = gen.scopeValue(\"Error\", {\n ref: ValidationError,\n code: _`require(\"ajv/dist/runtime/validation_error\").default`,\n })\n }\n\n const validateName = gen.scopeName(\"validate\")\n sch.validateName = validateName\n\n const schemaCxt: SchemaCxt = {\n gen,\n allErrors: this.opts.allErrors,\n data: N.data,\n parentData: N.parentData,\n parentDataProperty: N.parentDataProperty,\n dataNames: [N.data],\n dataPathArr: [nil], // TODO can its length be used as dataLevel if nil is removed?\n dataLevel: 0,\n dataTypes: [],\n definedProperties: new Set<string>(),\n topSchemaRef: gen.scopeValue(\n \"schema\",\n this.opts.code.source === true\n ? {ref: sch.schema, code: stringify(sch.schema)}\n : {ref: sch.schema}\n ),\n validateName,\n ValidationError: _ValidationError,\n schema: sch.schema,\n schemaEnv: sch,\n rootId,\n baseId: sch.baseId || rootId,\n schemaPath: nil,\n errSchemaPath: sch.schemaPath || (this.opts.jtd ? \"\" : \"#\"),\n errorPath: _`\"\"`,\n opts: this.opts,\n self: this,\n }\n\n let sourceCode: string | undefined\n try {\n this._compilations.add(sch)\n validateFunctionCode(schemaCxt)\n gen.optimize(this.opts.code.optimize)\n // gen.optimize(1)\n const validateCode = gen.toString()\n sourceCode = `${gen.scopeRefs(N.scope)}return ${validateCode}`\n // console.log((codeSize += sourceCode.length), (nodeCount += gen.nodeCount))\n if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode)\n const makeValidate = new Function(`${N.self}`, `${N.scope}`, sourceCode)\n const validate: AnyValidateFunction = makeValidate(this, this.scope.get())\n this.scope.value(validateName, {ref: validate})\n\n validate.errors = null\n validate.schema = sch.schema\n validate.schemaEnv = sch\n if (sch.$async) (validate as AsyncValidateFunction).$async = true\n if (this.opts.code.source === true) {\n validate.source = {validateName, validateCode, scopeValues: gen._values}\n }\n if (this.opts.unevaluated) {\n const {props, items} = schemaCxt\n validate.evaluated = {\n props: props instanceof Name ? undefined : props,\n items: items instanceof Name ? undefined : items,\n dynamicProps: props instanceof Name,\n dynamicItems: items instanceof Name,\n }\n if (validate.source) validate.source.evaluated = stringify(validate.evaluated)\n }\n sch.validate = validate\n return sch\n } catch (e) {\n delete sch.validate\n delete sch.validateName\n if (sourceCode) this.logger.error(\"Error compiling schema, function code:\", sourceCode)\n // console.log(\"\\n\\n\\n *** \\n\", sourceCode, this.opts)\n throw e\n } finally {\n this._compilations.delete(sch)\n }\n}\n\nexport function resolveRef(\n this: Ajv,\n root: SchemaEnv,\n baseId: string,\n ref: string\n): AnySchema | SchemaEnv | undefined {\n ref = resolveUrl(this.opts.uriResolver, baseId, ref)\n const schOrFunc = root.refs[ref]\n if (schOrFunc) return schOrFunc\n\n let _sch = resolve.call(this, root, ref)\n if (_sch === undefined) {\n const schema = root.localRefs?.[ref] // TODO maybe localRefs should hold SchemaEnv\n const {schemaId} = this.opts\n if (schema) _sch = new SchemaEnv({schema, schemaId, root, baseId})\n }\n\n if (_sch === undefined) return\n return (root.refs[ref] = inlineOrCompile.call(this, _sch))\n}\n\nfunction inlineOrCompile(this: Ajv, sch: SchemaEnv): AnySchema | SchemaEnv {\n if (inlineRef(sch.schema, this.opts.inlineRefs)) return sch.schema\n return sch.validate ? sch : compileSchema.call(this, sch)\n}\n\n// Index of schema compilation in the currently compiled list\nexport function getCompilingSchema(this: Ajv, schEnv: SchemaEnv): SchemaEnv | void {\n for (const sch of this._compilations) {\n if (sameSchemaEnv(sch, schEnv)) return sch\n }\n}\n\nfunction sameSchemaEnv(s1: SchemaEnv, s2: SchemaEnv): boolean {\n return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId\n}\n\n// resolve and compile the references ($ref)\n// TODO returns AnySchemaObject (if the schema can be inlined) or validation function\nfunction resolve(\n this: Ajv,\n root: SchemaEnv, // information about the root schema for the current schema\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n let sch\n while (typeof (sch = this.refs[ref]) == \"string\") ref = sch\n return sch || this.schemas[ref] || resolveSchema.call(this, root, ref)\n}\n\n// Resolve schema, its root and baseId\nexport function resolveSchema(\n this: Ajv,\n root: SchemaEnv, // root object with properties schema, refs TODO below SchemaEnv is assigned to it\n ref: string // reference to resolve\n): SchemaEnv | undefined {\n const p = this.opts.uriResolver.parse(ref)\n const refPath = _getFullPath(this.opts.uriResolver, p)\n let baseId = getFullPath(this.opts.uriResolver, root.baseId, undefined)\n // TODO `Object.keys(root.schema).length > 0` should not be needed - but removing breaks 2 tests\n if (Object.keys(root.schema).length > 0 && refPath === baseId) {\n return getJsonPointer.call(this, p, root)\n }\n\n const id = normalizeId(refPath)\n const schOrRef = this.refs[id] || this.schemas[id]\n if (typeof schOrRef == \"string\") {\n const sch = resolveSchema.call(this, root, schOrRef)\n if (typeof sch?.schema !== \"object\") return\n return getJsonPointer.call(this, p, sch)\n }\n\n if (typeof schOrRef?.schema !== \"object\") return\n if (!schOrRef.validate) compileSchema.call(this, schOrRef)\n if (id === normalizeId(ref)) {\n const {schema} = schOrRef\n const {schemaId} = this.opts\n const schId = schema[schemaId]\n if (schId) baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n return new SchemaEnv({schema, schemaId, root, baseId})\n }\n return getJsonPointer.call(this, p, schOrRef)\n}\n\nconst PREVENT_SCOPE_CHANGE = new Set([\n \"properties\",\n \"patternProperties\",\n \"enum\",\n \"dependencies\",\n \"definitions\",\n])\n\nfunction getJsonPointer(\n this: Ajv,\n parsedRef: URIComponent,\n {baseId, schema, root}: SchemaEnv\n): SchemaEnv | undefined {\n if (parsedRef.fragment?.[0] !== \"/\") return\n for (const part of parsedRef.fragment.slice(1).split(\"/\")) {\n if (typeof schema === \"boolean\") return\n const partSchema = schema[unescapeFragment(part)]\n if (partSchema === undefined) return\n schema = partSchema\n // TODO PREVENT_SCOPE_CHANGE could be defined in keyword def?\n const schId = typeof schema === \"object\" && schema[this.opts.schemaId]\n if (!PREVENT_SCOPE_CHANGE.has(part) && schId) {\n baseId = resolveUrl(this.opts.uriResolver, baseId, schId)\n }\n }\n let env: SchemaEnv | undefined\n if (typeof schema != \"boolean\" && schema.$ref && !schemaHasRulesButRef(schema, this.RULES)) {\n const $ref = resolveUrl(this.opts.uriResolver, baseId, schema.$ref)\n env = resolveSchema.call(this, root, $ref)\n }\n // even though resolution failed we need to return SchemaEnv to throw exception\n // so that compileAsync loads missing schema.\n const {schemaId} = this.opts\n env = env || new SchemaEnv({schema, schemaId, root, baseId})\n if (env.schema !== env.root.schema) return env\n return undefined\n}\n","{\n \"$id\": \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n \"description\": \"Meta-schema for $data reference (JSON AnySchema extension proposal)\",\n \"type\": \"object\",\n \"required\": [\"$data\"],\n \"properties\": {\n \"$data\": {\n \"type\": \"string\",\n \"anyOf\": [{\"format\": \"relative-json-pointer\"}, {\"format\": \"json-pointer\"}]\n }\n },\n \"additionalProperties\": false\n}\n","'use strict'\n\n/** @type {(value: string) => boolean} */\nconst isUUID = RegExp.prototype.test.bind(/^[\\da-f]{8}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{4}-[\\da-f]{12}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)$/u)\n\n/** @type {(value: string) => boolean} */\nconst isHexPair = RegExp.prototype.test.bind(/^[\\da-f]{2}$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isUnreserved = RegExp.prototype.test.bind(/^[\\da-z\\-._~]$/iu)\n\n/** @type {(value: string) => boolean} */\nconst isPathCharacter = RegExp.prototype.test.bind(/^[\\da-z\\-._~!$&'()*+,;=:@/]$/iu)\n\n/**\n * @param {Array<string>} input\n * @returns {string}\n */\nfunction stringArrayToHexStripped (input) {\n let acc = ''\n let code = 0\n let i = 0\n\n for (i = 0; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (code === 48) {\n continue\n }\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n break\n }\n\n for (i += 1; i < input.length; i++) {\n code = input[i].charCodeAt(0)\n if (!((code >= 48 && code <= 57) || (code >= 65 && code <= 70) || (code >= 97 && code <= 102))) {\n return ''\n }\n acc += input[i]\n }\n return acc\n}\n\n/**\n * @typedef {Object} GetIPV6Result\n * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.\n * @property {string} address - The parsed IPv6 address.\n * @property {string} [zone] - The zone identifier, if present.\n */\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nconst nonSimpleDomain = RegExp.prototype.test.bind(/[^!\"$&'()*+,\\-.;=_`a-z{}~]/u)\n\n/**\n * @param {Array<string>} buffer\n * @returns {boolean}\n */\nfunction consumeIsZone (buffer) {\n buffer.length = 0\n return true\n}\n\n/**\n * @param {Array<string>} buffer\n * @param {Array<string>} address\n * @param {GetIPV6Result} output\n * @returns {boolean}\n */\nfunction consumeHextets (buffer, address, output) {\n if (buffer.length) {\n const hex = stringArrayToHexStripped(buffer)\n if (hex !== '') {\n address.push(hex)\n } else {\n output.error = true\n return false\n }\n buffer.length = 0\n }\n return true\n}\n\n/**\n * @param {string} input\n * @returns {GetIPV6Result}\n */\nfunction getIPV6 (input) {\n let tokenCount = 0\n const output = { error: false, address: '', zone: '' }\n /** @type {Array<string>} */\n const address = []\n /** @type {Array<string>} */\n const buffer = []\n let endipv6Encountered = false\n let endIpv6 = false\n\n let consume = consumeHextets\n\n for (let i = 0; i < input.length; i++) {\n const cursor = input[i]\n if (cursor === '[' || cursor === ']') { continue }\n if (cursor === ':') {\n if (endipv6Encountered === true) {\n endIpv6 = true\n }\n if (!consume(buffer, address, output)) { break }\n if (++tokenCount > 7) {\n // not valid\n output.error = true\n break\n }\n if (i > 0 && input[i - 1] === ':') {\n endipv6Encountered = true\n }\n address.push(':')\n continue\n } else if (cursor === '%') {\n if (!consume(buffer, address, output)) { break }\n // switch to zone detection\n consume = consumeIsZone\n } else {\n buffer.push(cursor)\n continue\n }\n }\n if (buffer.length) {\n if (consume === consumeIsZone) {\n output.zone = buffer.join('')\n } else if (endIpv6) {\n address.push(buffer.join(''))\n } else {\n address.push(stringArrayToHexStripped(buffer))\n }\n }\n output.address = address.join('')\n return output\n}\n\n/**\n * @typedef {Object} NormalizeIPv6Result\n * @property {string} host - The normalized host.\n * @property {string} [escapedHost] - The escaped host.\n * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.\n */\n\n/**\n * @param {string} host\n * @returns {NormalizeIPv6Result}\n */\nfunction normalizeIPv6 (host) {\n if (findToken(host, ':') < 2) { return { host, isIPV6: false } }\n const ipv6 = getIPV6(host)\n\n if (!ipv6.error) {\n let newHost = ipv6.address\n let escapedHost = ipv6.address\n if (ipv6.zone) {\n newHost += '%' + ipv6.zone\n escapedHost += '%25' + ipv6.zone\n }\n return { host: newHost, isIPV6: true, escapedHost }\n } else {\n return { host, isIPV6: false }\n }\n}\n\n/**\n * @param {string} str\n * @param {string} token\n * @returns {number}\n */\nfunction findToken (str, token) {\n let ind = 0\n for (let i = 0; i < str.length; i++) {\n if (str[i] === token) ind++\n }\n return ind\n}\n\n/**\n * @param {string} path\n * @returns {string}\n *\n * @see https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4\n */\nfunction removeDotSegments (path) {\n let input = path\n const output = []\n let nextSlash = -1\n let len = 0\n\n // eslint-disable-next-line no-cond-assign\n while (len = input.length) {\n if (len === 1) {\n if (input === '.') {\n break\n } else if (input === '/') {\n output.push('/')\n break\n } else {\n output.push(input)\n break\n }\n } else if (len === 2) {\n if (input[0] === '.') {\n if (input[1] === '.') {\n break\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.' || input[1] === '/') {\n output.push('/')\n break\n }\n }\n } else if (len === 3) {\n if (input === '/..') {\n if (output.length !== 0) {\n output.pop()\n }\n output.push('/')\n break\n }\n }\n if (input[0] === '.') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(3)\n continue\n }\n } else if (input[1] === '/') {\n input = input.slice(2)\n continue\n }\n } else if (input[0] === '/') {\n if (input[1] === '.') {\n if (input[2] === '/') {\n input = input.slice(2)\n continue\n } else if (input[2] === '.') {\n if (input[3] === '/') {\n input = input.slice(3)\n if (output.length !== 0) {\n output.pop()\n }\n continue\n }\n }\n }\n }\n\n // Rule 2E: Move normal path segment to output\n if ((nextSlash = input.indexOf('/', 1)) === -1) {\n output.push(input)\n break\n } else {\n output.push(input.slice(0, nextSlash))\n input = input.slice(nextSlash)\n }\n }\n\n return output.join('')\n}\n\n/**\n * Re-escape RFC 3986 gen-delims that must not appear literally in the host.\n * After the URI regex parses, these characters cannot be literal in the host\n * field, so any that appear after decoding came from percent-encoding and\n * must be restored to prevent authority structure changes.\n *\n * @param {string} host\n * @param {boolean} isIP - true for IPv4/IPv6 hosts (skip colon re-escaping)\n * @returns {string}\n */\nconst HOST_DELIMS = { '@': '%40', '/': '%2F', '?': '%3F', '#': '%23', ':': '%3A' }\nconst HOST_DELIM_RE = /[@/?#:]/g\nconst HOST_DELIM_NO_COLON_RE = /[@/?#]/g\n\nfunction reescapeHostDelimiters (host, isIP) {\n const re = isIP ? HOST_DELIM_NO_COLON_RE : HOST_DELIM_RE\n re.lastIndex = 0\n return host.replace(re, (ch) => HOST_DELIMS[ch])\n}\n\n/**\n * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.\n * Reserved delimiters such as `%2F` and `%2E` stay escaped.\n *\n * @param {string} input\n * @param {boolean} [decodeUnreserved=false]\n * @returns {string}\n */\nfunction normalizePercentEncoding (input, decodeUnreserved = false) {\n if (input.indexOf('%') === -1) {\n return input\n }\n\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decodeUnreserved && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n output += input[i]\n }\n\n return output\n}\n\n/**\n * Normalizes path data without turning reserved escapes into live path syntax.\n * Valid escapes are uppercased, raw unsafe characters are escaped, and only\n * unreserved bytes that are not `.` are decoded.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizePathEncoding (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n const normalizedHex = hex.toUpperCase()\n const decoded = String.fromCharCode(parseInt(normalizedHex, 16))\n\n if (decoded !== '.' && isUnreserved(decoded)) {\n output += decoded\n } else {\n output += '%' + normalizedHex\n }\n\n i += 2\n continue\n }\n }\n\n if (isPathCharacter(input[i])) {\n output += input[i]\n } else {\n output += escape(input[i])\n }\n }\n\n return output\n}\n\n/**\n * Escapes a component while preserving existing valid percent escapes.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction escapePreservingEscapes (input) {\n let output = ''\n\n for (let i = 0; i < input.length; i++) {\n if (input[i] === '%' && i + 2 < input.length) {\n const hex = input.slice(i + 1, i + 3)\n if (isHexPair(hex)) {\n output += '%' + hex.toUpperCase()\n i += 2\n continue\n }\n }\n\n output += escape(input[i])\n }\n\n return output\n}\n\n/**\n * @param {import('../types/index').URIComponent} component\n * @returns {string|undefined}\n */\nfunction recomposeAuthority (component) {\n const uriTokens = []\n\n if (component.userinfo !== undefined) {\n uriTokens.push(component.userinfo)\n uriTokens.push('@')\n }\n\n if (component.host !== undefined) {\n let host = unescape(component.host)\n if (!isIPv4(host)) {\n const ipV6res = normalizeIPv6(host)\n if (ipV6res.isIPV6 === true) {\n host = `[${ipV6res.escapedHost}]`\n } else {\n host = reescapeHostDelimiters(host, false)\n }\n }\n uriTokens.push(host)\n }\n\n if (typeof component.port === 'number' || typeof component.port === 'string') {\n uriTokens.push(':')\n uriTokens.push(String(component.port))\n }\n\n return uriTokens.length ? uriTokens.join('') : undefined\n};\n\nmodule.exports = {\n nonSimpleDomain,\n recomposeAuthority,\n reescapeHostDelimiters,\n normalizePercentEncoding,\n normalizePathEncoding,\n escapePreservingEscapes,\n removeDotSegments,\n isIPv4,\n isUUID,\n normalizeIPv6,\n stringArrayToHexStripped\n}\n","'use strict'\n\nconst { isUUID } = require('./utils')\nconst URN_REG = /([\\da-z][\\d\\-a-z]{0,31}):((?:[\\w!$'()*+,\\-.:;=@]|%[\\da-f]{2})+)/iu\n\nconst supportedSchemeNames = /** @type {const} */ (['http', 'https', 'ws',\n 'wss', 'urn', 'urn:uuid'])\n\n/** @typedef {supportedSchemeNames[number]} SchemeName */\n\n/**\n * @param {string} name\n * @returns {name is SchemeName}\n */\nfunction isValidSchemeName (name) {\n return supportedSchemeNames.indexOf(/** @type {*} */ (name)) !== -1\n}\n\n/**\n * @callback SchemeFn\n * @param {import('../types/index').URIComponent} component\n * @param {import('../types/index').Options} options\n * @returns {import('../types/index').URIComponent}\n */\n\n/**\n * @typedef {Object} SchemeHandler\n * @property {SchemeName} scheme - The scheme name.\n * @property {boolean} [domainHost] - Indicates if the scheme supports domain hosts.\n * @property {SchemeFn} parse - Function to parse the URI component for this scheme.\n * @property {SchemeFn} serialize - Function to serialize the URI component for this scheme.\n * @property {boolean} [skipNormalize] - Indicates if normalization should be skipped for this scheme.\n * @property {boolean} [absolutePath] - Indicates if the scheme uses absolute paths.\n * @property {boolean} [unicodeSupport] - Indicates if the scheme supports Unicode.\n */\n\n/**\n * @param {import('../types/index').URIComponent} wsComponent\n * @returns {boolean}\n */\nfunction wsIsSecure (wsComponent) {\n if (wsComponent.secure === true) {\n return true\n } else if (wsComponent.secure === false) {\n return false\n } else if (wsComponent.scheme) {\n return (\n wsComponent.scheme.length === 3 &&\n (wsComponent.scheme[0] === 'w' || wsComponent.scheme[0] === 'W') &&\n (wsComponent.scheme[1] === 's' || wsComponent.scheme[1] === 'S') &&\n (wsComponent.scheme[2] === 's' || wsComponent.scheme[2] === 'S')\n )\n } else {\n return false\n }\n}\n\n/** @type {SchemeFn} */\nfunction httpParse (component) {\n if (!component.host) {\n component.error = component.error || 'HTTP URIs must have a host.'\n }\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction httpSerialize (component) {\n const secure = String(component.scheme).toLowerCase() === 'https'\n\n // normalize the default port\n if (component.port === (secure ? 443 : 80) || component.port === '') {\n component.port = undefined\n }\n\n // normalize the empty path\n if (!component.path) {\n component.path = '/'\n }\n\n // NOTE: We do not parse query strings for HTTP URIs\n // as WWW Form Url Encoded query strings are part of the HTML4+ spec,\n // and not the HTTP spec.\n\n return component\n}\n\n/** @type {SchemeFn} */\nfunction wsParse (wsComponent) {\n// indicate if the secure flag is set\n wsComponent.secure = wsIsSecure(wsComponent)\n\n // construct resouce name\n wsComponent.resourceName = (wsComponent.path || '/') + (wsComponent.query ? '?' + wsComponent.query : '')\n wsComponent.path = undefined\n wsComponent.query = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction wsSerialize (wsComponent) {\n// normalize the default port\n if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === '') {\n wsComponent.port = undefined\n }\n\n // ensure scheme matches secure flag\n if (typeof wsComponent.secure === 'boolean') {\n wsComponent.scheme = (wsComponent.secure ? 'wss' : 'ws')\n wsComponent.secure = undefined\n }\n\n // reconstruct path from resource name\n if (wsComponent.resourceName) {\n const [path, query] = wsComponent.resourceName.split('?')\n wsComponent.path = (path && path !== '/' ? path : undefined)\n wsComponent.query = query\n wsComponent.resourceName = undefined\n }\n\n // forbid fragment component\n wsComponent.fragment = undefined\n\n return wsComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnParse (urnComponent, options) {\n if (!urnComponent.path) {\n urnComponent.error = 'URN can not be parsed'\n return urnComponent\n }\n const matches = urnComponent.path.match(URN_REG)\n if (matches) {\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n urnComponent.nid = matches[1].toLowerCase()\n urnComponent.nss = matches[2]\n const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n urnComponent.path = undefined\n\n if (schemeHandler) {\n urnComponent = schemeHandler.parse(urnComponent, options)\n }\n } else {\n urnComponent.error = urnComponent.error || 'URN can not be parsed.'\n }\n\n return urnComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnSerialize (urnComponent, options) {\n if (urnComponent.nid === undefined) {\n throw new Error('URN without nid cannot be serialized')\n }\n const scheme = options.scheme || urnComponent.scheme || 'urn'\n const nid = urnComponent.nid.toLowerCase()\n const urnScheme = `${scheme}:${options.nid || nid}`\n const schemeHandler = getSchemeHandler(urnScheme)\n\n if (schemeHandler) {\n urnComponent = schemeHandler.serialize(urnComponent, options)\n }\n\n const uriComponent = urnComponent\n const nss = urnComponent.nss\n uriComponent.path = `${nid || options.nid}:${nss}`\n\n options.skipEscape = true\n return uriComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidParse (urnComponent, options) {\n const uuidComponent = urnComponent\n uuidComponent.uuid = uuidComponent.nss\n uuidComponent.nss = undefined\n\n if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) {\n uuidComponent.error = uuidComponent.error || 'UUID is not valid.'\n }\n\n return uuidComponent\n}\n\n/** @type {SchemeFn} */\nfunction urnuuidSerialize (uuidComponent) {\n const urnComponent = uuidComponent\n // normalize UUID\n urnComponent.nss = (uuidComponent.uuid || '').toLowerCase()\n return urnComponent\n}\n\nconst http = /** @type {SchemeHandler} */ ({\n scheme: 'http',\n domainHost: true,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst https = /** @type {SchemeHandler} */ ({\n scheme: 'https',\n domainHost: http.domainHost,\n parse: httpParse,\n serialize: httpSerialize\n})\n\nconst ws = /** @type {SchemeHandler} */ ({\n scheme: 'ws',\n domainHost: true,\n parse: wsParse,\n serialize: wsSerialize\n})\n\nconst wss = /** @type {SchemeHandler} */ ({\n scheme: 'wss',\n domainHost: ws.domainHost,\n parse: ws.parse,\n serialize: ws.serialize\n})\n\nconst urn = /** @type {SchemeHandler} */ ({\n scheme: 'urn',\n parse: urnParse,\n serialize: urnSerialize,\n skipNormalize: true\n})\n\nconst urnuuid = /** @type {SchemeHandler} */ ({\n scheme: 'urn:uuid',\n parse: urnuuidParse,\n serialize: urnuuidSerialize,\n skipNormalize: true\n})\n\nconst SCHEMES = /** @type {Record<SchemeName, SchemeHandler>} */ ({\n http,\n https,\n ws,\n wss,\n urn,\n 'urn:uuid': urnuuid\n})\n\nObject.setPrototypeOf(SCHEMES, null)\n\n/**\n * @param {string|undefined} scheme\n * @returns {SchemeHandler|undefined}\n */\nfunction getSchemeHandler (scheme) {\n return (\n scheme && (\n SCHEMES[/** @type {SchemeName} */ (scheme)] ||\n SCHEMES[/** @type {SchemeName} */(scheme.toLowerCase())])\n ) ||\n undefined\n}\n\nmodule.exports = {\n wsIsSecure,\n SCHEMES,\n isValidSchemeName,\n getSchemeHandler,\n}\n","'use strict'\n\nconst { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require('./lib/utils')\nconst { SCHEMES, getSchemeHandler } = require('./lib/schemes')\n\n/**\n * @template {import('./types/index').URIComponent|string} T\n * @param {T} uri\n * @param {import('./types/index').Options} [options]\n * @returns {T}\n */\nfunction normalize (uri, options) {\n if (typeof uri === 'string') {\n uri = /** @type {T} */ (normalizeString(uri, options))\n } else if (typeof uri === 'object') {\n uri = /** @type {T} */ (parse(serialize(uri, options), options))\n }\n return uri\n}\n\n/**\n * @param {string} baseURI\n * @param {string} relativeURI\n * @param {import('./types/index').Options} [options]\n * @returns {string}\n */\nfunction resolve (baseURI, relativeURI, options) {\n const schemelessOptions = options ? Object.assign({ scheme: 'null' }, options) : { scheme: 'null' }\n const resolved = resolveComponent(parse(baseURI, schemelessOptions), parse(relativeURI, schemelessOptions), schemelessOptions, true)\n schemelessOptions.skipEscape = true\n return serialize(resolved, schemelessOptions)\n}\n\n/**\n * @param {import ('./types/index').URIComponent} base\n * @param {import ('./types/index').URIComponent} relative\n * @param {import('./types/index').Options} [options]\n * @param {boolean} [skipNormalization=false]\n * @returns {import ('./types/index').URIComponent}\n */\nfunction resolveComponent (base, relative, options, skipNormalization) {\n /** @type {import('./types/index').URIComponent} */\n const target = {}\n if (!skipNormalization) {\n base = parse(serialize(base, options), options) // normalize base component\n relative = parse(serialize(relative, options), options) // normalize relative component\n }\n options = options || {}\n\n if (!options.tolerant && relative.scheme) {\n target.scheme = relative.scheme\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) {\n // target.authority = relative.authority;\n target.userinfo = relative.userinfo\n target.host = relative.host\n target.port = relative.port\n target.path = removeDotSegments(relative.path || '')\n target.query = relative.query\n } else {\n if (!relative.path) {\n target.path = base.path\n if (relative.query !== undefined) {\n target.query = relative.query\n } else {\n target.query = base.query\n }\n } else {\n if (relative.path[0] === '/') {\n target.path = removeDotSegments(relative.path)\n } else {\n if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) {\n target.path = '/' + relative.path\n } else if (!base.path) {\n target.path = relative.path\n } else {\n target.path = base.path.slice(0, base.path.lastIndexOf('/') + 1) + relative.path\n }\n target.path = removeDotSegments(target.path)\n }\n target.query = relative.query\n }\n // target.authority = base.authority;\n target.userinfo = base.userinfo\n target.host = base.host\n target.port = base.port\n }\n target.scheme = base.scheme\n }\n\n target.fragment = relative.fragment\n\n return target\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uriA\n * @param {import ('./types/index').URIComponent|string} uriB\n * @param {import ('./types/index').Options} options\n * @returns {boolean}\n */\nfunction equal (uriA, uriB, options) {\n const normalizedA = normalizeComparableURI(uriA, options)\n const normalizedB = normalizeComparableURI(uriB, options)\n\n return normalizedA !== undefined && normalizedB !== undefined && normalizedA.toLowerCase() === normalizedB.toLowerCase()\n}\n\n/**\n * @param {Readonly<import('./types/index').URIComponent>} cmpts\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction serialize (cmpts, opts) {\n const component = {\n host: cmpts.host,\n scheme: cmpts.scheme,\n userinfo: cmpts.userinfo,\n port: cmpts.port,\n path: cmpts.path,\n query: cmpts.query,\n nid: cmpts.nid,\n nss: cmpts.nss,\n uuid: cmpts.uuid,\n fragment: cmpts.fragment,\n reference: cmpts.reference,\n resourceName: cmpts.resourceName,\n secure: cmpts.secure,\n error: ''\n }\n const options = Object.assign({}, opts)\n const uriTokens = []\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || component.scheme)\n\n // perform scheme specific serialization\n if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options)\n\n if (component.path !== undefined) {\n if (!options.skipEscape) {\n component.path = escapePreservingEscapes(component.path)\n\n if (component.scheme !== undefined) {\n component.path = component.path.split('%3A').join(':')\n }\n } else {\n component.path = normalizePercentEncoding(component.path)\n }\n }\n\n if (options.reference !== 'suffix' && component.scheme) {\n uriTokens.push(component.scheme, ':')\n }\n\n const authority = recomposeAuthority(component)\n if (authority !== undefined) {\n if (options.reference !== 'suffix') {\n uriTokens.push('//')\n }\n\n uriTokens.push(authority)\n\n if (component.path && component.path[0] !== '/') {\n uriTokens.push('/')\n }\n }\n if (component.path !== undefined) {\n let s = component.path\n\n if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {\n s = removeDotSegments(s)\n }\n\n if (\n authority === undefined &&\n s[0] === '/' &&\n s[1] === '/'\n ) {\n // don't allow the path to start with \"//\"\n s = '/%2F' + s.slice(2)\n }\n\n uriTokens.push(s)\n }\n\n if (component.query !== undefined) {\n uriTokens.push('?', component.query)\n }\n\n if (component.fragment !== undefined) {\n uriTokens.push('#', component.fragment)\n }\n return uriTokens.join('')\n}\n\nconst URI_PARSE = /^(?:([^#/:?]+):)?(?:\\/\\/((?:([^#/?@]*)@)?(\\[[^#/?\\]]+\\]|[^#/:?]*)(?::(\\d*))?))?([^#?]*)(?:\\?([^#]*))?(?:#((?:.|[\\n\\r])*))?/u\n\n/**\n * @param {import('./types/index').URIComponent} parsed\n * @param {RegExpMatchArray} matches\n * @returns {string|undefined}\n */\nfunction getParseError (parsed, matches) {\n if (matches[2] !== undefined && parsed.path && parsed.path[0] !== '/') {\n return 'URI path must start with \"/\" when authority is present.'\n }\n\n if (typeof parsed.port === 'number' && (parsed.port < 0 || parsed.port > 65535)) {\n return 'URI port is malformed.'\n }\n\n return undefined\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean }}\n */\nfunction parseWithStatus (uri, opts) {\n const options = Object.assign({}, opts)\n /** @type {import('./types/index').URIComponent} */\n const parsed = {\n scheme: undefined,\n userinfo: undefined,\n host: '',\n port: undefined,\n path: '',\n query: undefined,\n fragment: undefined\n }\n\n let malformedAuthorityOrPort = false\n\n let isIP = false\n if (options.reference === 'suffix') {\n if (options.scheme) {\n uri = options.scheme + ':' + uri\n } else {\n uri = '//' + uri\n }\n }\n\n const matches = uri.match(URI_PARSE)\n\n if (matches) {\n // store each component\n parsed.scheme = matches[1]\n parsed.userinfo = matches[3]\n parsed.host = matches[4]\n parsed.port = parseInt(matches[5], 10)\n parsed.path = matches[6] || ''\n parsed.query = matches[7]\n parsed.fragment = matches[8]\n\n // fix port number\n if (isNaN(parsed.port)) {\n parsed.port = matches[5]\n }\n\n const parseError = getParseError(parsed, matches)\n if (parseError !== undefined) {\n parsed.error = parsed.error || parseError\n malformedAuthorityOrPort = true\n }\n\n if (parsed.host) {\n const ipv4result = isIPv4(parsed.host)\n if (ipv4result === false) {\n const ipv6result = normalizeIPv6(parsed.host)\n parsed.host = ipv6result.host.toLowerCase()\n isIP = ipv6result.isIPV6\n } else {\n isIP = true\n }\n }\n if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) {\n parsed.reference = 'same-document'\n } else if (parsed.scheme === undefined) {\n parsed.reference = 'relative'\n } else if (parsed.fragment === undefined) {\n parsed.reference = 'absolute'\n } else {\n parsed.reference = 'uri'\n }\n\n // check for reference errors\n if (options.reference && options.reference !== 'suffix' && options.reference !== parsed.reference) {\n parsed.error = parsed.error || 'URI is not a ' + options.reference + ' reference.'\n }\n\n // find scheme handler\n const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme)\n\n // check if scheme can't handle IRIs\n if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {\n // if host component is a domain name\n if (parsed.host && (options.domainHost || (schemeHandler && schemeHandler.domainHost)) && isIP === false && nonSimpleDomain(parsed.host)) {\n // convert Unicode IDN -> ASCII IDN\n try {\n parsed.host = URL.domainToASCII(parsed.host.toLowerCase())\n } catch (e) {\n parsed.error = parsed.error || \"Host's domain name can not be converted to ASCII: \" + e\n }\n }\n // convert IRI -> URI\n }\n\n if (!schemeHandler || (schemeHandler && !schemeHandler.skipNormalize)) {\n if (uri.indexOf('%') !== -1) {\n if (parsed.scheme !== undefined) {\n parsed.scheme = unescape(parsed.scheme)\n }\n if (parsed.host !== undefined) {\n parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP)\n }\n }\n if (parsed.path) {\n parsed.path = normalizePathEncoding(parsed.path)\n }\n if (parsed.fragment) {\n try {\n parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment))\n } catch {\n parsed.error = parsed.error || 'URI malformed'\n }\n }\n }\n\n // perform scheme specific parsing\n if (schemeHandler && schemeHandler.parse) {\n schemeHandler.parse(parsed, options)\n }\n } else {\n parsed.error = parsed.error || 'URI can not be parsed.'\n }\n return { parsed, malformedAuthorityOrPort }\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns\n */\nfunction parse (uri, opts) {\n return parseWithStatus(uri, opts).parsed\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string}\n */\nfunction normalizeString (uri, opts) {\n return normalizeStringWithStatus(uri, opts).normalized\n}\n\n/**\n * @param {string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {{ normalized: string, malformedAuthorityOrPort: boolean }}\n */\nfunction normalizeStringWithStatus (uri, opts) {\n const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts)\n return {\n normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts),\n malformedAuthorityOrPort\n }\n}\n\n/**\n * @param {import ('./types/index').URIComponent|string} uri\n * @param {import('./types/index').Options} [opts]\n * @returns {string|undefined}\n */\nfunction normalizeComparableURI (uri, opts) {\n if (typeof uri === 'string') {\n const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts)\n return malformedAuthorityOrPort ? undefined : normalized\n }\n\n if (typeof uri === 'object') {\n return serialize(uri, opts)\n }\n}\n\nconst fastUri = {\n SCHEMES,\n normalize,\n resolve,\n resolveComponent,\n equal,\n serialize,\n parse\n}\n\nmodule.exports = fastUri\nmodule.exports.default = fastUri\nmodule.exports.fastUri = fastUri\n","import * as uri from \"fast-uri\"\n\ntype URI = typeof uri & {code: string}\n;(uri as URI).code = 'require(\"ajv/dist/runtime/uri\").default'\n\nexport default uri as URI\n","export {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n AnyValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport interface Plugin<Opts> {\n (ajv: Ajv, options?: Opts): Ajv\n [prop: string]: any\n}\n\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\n\nimport type {\n Schema,\n AnySchema,\n AnySchemaObject,\n SchemaObject,\n AsyncSchema,\n Vocabulary,\n KeywordDefinition,\n AddedKeywordDefinition,\n AnyValidateFunction,\n ValidateFunction,\n AsyncValidateFunction,\n ErrorObject,\n Format,\n AddedFormat,\n RegExpEngine,\n UriResolver,\n} from \"./types\"\nimport type {JSONSchemaType} from \"./types/json-schema\"\nimport type {JTDSchemaType, SomeJTDSchemaType, JTDDataType} from \"./types/jtd-schema\"\nimport ValidationError from \"./runtime/validation_error\"\nimport MissingRefError from \"./compile/ref_error\"\nimport {getRules, ValidationRules, Rule, RuleGroup, JSONType} from \"./compile/rules\"\nimport {SchemaEnv, compileSchema, resolveSchema} from \"./compile\"\nimport {Code, ValueScope} from \"./compile/codegen\"\nimport {normalizeId, getSchemaRefs} from \"./compile/resolve\"\nimport {getJSONTypes} from \"./compile/validate/dataType\"\nimport {eachItem} from \"./compile/util\"\nimport * as $dataRefSchema from \"./refs/data.json\"\n\nimport DefaultUriResolver from \"./runtime/uri\"\n\nconst defaultRegExp: RegExpEngine = (str, flags) => new RegExp(str, flags)\ndefaultRegExp.code = \"new RegExp\"\n\nconst META_IGNORE_OPTIONS: (keyof Options)[] = [\"removeAdditional\", \"useDefaults\", \"coerceTypes\"]\nconst EXT_SCOPE_NAMES = new Set([\n \"validate\",\n \"serialize\",\n \"parse\",\n \"wrapper\",\n \"root\",\n \"schema\",\n \"keyword\",\n \"pattern\",\n \"formats\",\n \"validate$data\",\n \"func\",\n \"obj\",\n \"Error\",\n])\n\nexport type Options = CurrentOptions & DeprecatedOptions\n\nexport interface CurrentOptions {\n // strict mode options (NEW)\n strict?: boolean | \"log\"\n strictSchema?: boolean | \"log\"\n strictNumbers?: boolean | \"log\"\n strictTypes?: boolean | \"log\"\n strictTuples?: boolean | \"log\"\n strictRequired?: boolean | \"log\"\n allowMatchingProperties?: boolean // disables a strict mode restriction\n allowUnionTypes?: boolean\n validateFormats?: boolean\n // validation and reporting options:\n $data?: boolean\n allErrors?: boolean\n verbose?: boolean\n discriminator?: boolean\n unicodeRegExp?: boolean\n timestamp?: \"string\" | \"date\" // JTD only\n parseDate?: boolean // JTD only\n allowDate?: boolean // JTD only\n specialNumbers?: \"fast\" | \"null\" // JTD only\n $comment?:\n | true\n | ((comment: string, schemaPath?: string, rootSchema?: AnySchemaObject) => unknown)\n formats?: {[Name in string]?: Format}\n keywords?: Vocabulary\n schemas?: AnySchema[] | {[Key in string]?: AnySchema}\n logger?: Logger | false\n loadSchema?: (uri: string) => Promise<AnySchemaObject>\n // options to modify validated data:\n removeAdditional?: boolean | \"all\" | \"failing\"\n useDefaults?: boolean | \"empty\"\n coerceTypes?: boolean | \"array\"\n // advanced options:\n next?: boolean // NEW\n unevaluated?: boolean // NEW\n dynamicRef?: boolean // NEW\n schemaId?: \"id\" | \"$id\"\n jtd?: boolean // NEW\n meta?: SchemaObject | boolean\n defaultMeta?: string | AnySchemaObject\n validateSchema?: boolean | \"log\"\n addUsedSchema?: boolean\n inlineRefs?: boolean | number\n passContext?: boolean\n loopRequired?: number\n loopEnum?: number // NEW\n ownProperties?: boolean\n multipleOfPrecision?: number\n int32range?: boolean // JTD only\n messages?: boolean\n code?: CodeOptions // NEW\n uriResolver?: UriResolver\n}\n\nexport interface CodeOptions {\n es5?: boolean\n esm?: boolean\n lines?: boolean\n optimize?: boolean | number\n formats?: Code // code to require (or construct) map of available formats - for standalone code\n source?: boolean\n process?: (code: string, schema?: SchemaEnv) => string\n regExp?: RegExpEngine\n}\n\ninterface InstanceCodeOptions extends CodeOptions {\n regExp: RegExpEngine\n optimize: number\n}\n\ninterface DeprecatedOptions {\n /** @deprecated */\n ignoreKeywordsWithRef?: boolean\n /** @deprecated */\n jsPropertySyntax?: boolean // added instead of jsonPointers\n /** @deprecated */\n unicode?: boolean\n}\n\ninterface RemovedOptions {\n format?: boolean\n errorDataPath?: \"object\" | \"property\"\n nullable?: boolean // \"nullable\" keyword is supported by default\n jsonPointers?: boolean\n extendRefs?: true | \"ignore\" | \"fail\"\n missingRefs?: true | \"ignore\" | \"fail\"\n processCode?: (code: string, schema?: SchemaEnv) => string\n sourceCode?: boolean\n strictDefaults?: boolean\n strictKeywords?: boolean\n uniqueItems?: boolean\n unknownFormats?: true | string[] | \"ignore\"\n cache?: any\n serialize?: (schema: AnySchema) => unknown\n ajvErrors?: boolean\n}\n\ntype OptionsInfo<T extends RemovedOptions | DeprecatedOptions> = {\n [K in keyof T]-?: string | undefined\n}\n\nconst removedOptions: OptionsInfo<RemovedOptions> = {\n errorDataPath: \"\",\n format: \"`validateFormats: false` can be used instead.\",\n nullable: '\"nullable\" keyword is supported by default.',\n jsonPointers: \"Deprecated jsPropertySyntax can be used instead.\",\n extendRefs: \"Deprecated ignoreKeywordsWithRef can be used instead.\",\n missingRefs: \"Pass empty schema with $id that should be ignored to ajv.addSchema.\",\n processCode: \"Use option `code: {process: (code, schemaEnv: object) => string}`\",\n sourceCode: \"Use option `code: {source: true}`\",\n strictDefaults: \"It is default now, see option `strict`.\",\n strictKeywords: \"It is default now, see option `strict`.\",\n uniqueItems: '\"uniqueItems\" keyword is always validated.',\n unknownFormats: \"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).\",\n cache: \"Map is used as cache, schema object as key.\",\n serialize: \"Map is used as cache, schema object as key.\",\n ajvErrors: \"It is default now.\",\n}\n\nconst deprecatedOptions: OptionsInfo<DeprecatedOptions> = {\n ignoreKeywordsWithRef: \"\",\n jsPropertySyntax: \"\",\n unicode: '\"minLength\"/\"maxLength\" account for unicode characters by default.',\n}\n\ntype RequiredInstanceOptions = {\n [K in\n | \"strictSchema\"\n | \"strictNumbers\"\n | \"strictTypes\"\n | \"strictTuples\"\n | \"strictRequired\"\n | \"inlineRefs\"\n | \"loopRequired\"\n | \"loopEnum\"\n | \"meta\"\n | \"messages\"\n | \"schemaId\"\n | \"addUsedSchema\"\n | \"validateSchema\"\n | \"validateFormats\"\n | \"int32range\"\n | \"unicodeRegExp\"\n | \"uriResolver\"]: NonNullable<Options[K]>\n} & {code: InstanceCodeOptions}\n\nexport type InstanceOptions = Options & RequiredInstanceOptions\n\nconst MAX_EXPRESSION = 200\n\n// eslint-disable-next-line complexity\nfunction requiredOptions(o: Options): RequiredInstanceOptions {\n const s = o.strict\n const _optz = o.code?.optimize\n const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0\n const regExp = o.code?.regExp ?? defaultRegExp\n const uriResolver = o.uriResolver ?? DefaultUriResolver\n return {\n strictSchema: o.strictSchema ?? s ?? true,\n strictNumbers: o.strictNumbers ?? s ?? true,\n strictTypes: o.strictTypes ?? s ?? \"log\",\n strictTuples: o.strictTuples ?? s ?? \"log\",\n strictRequired: o.strictRequired ?? s ?? false,\n code: o.code ? {...o.code, optimize, regExp} : {optimize, regExp},\n loopRequired: o.loopRequired ?? MAX_EXPRESSION,\n loopEnum: o.loopEnum ?? MAX_EXPRESSION,\n meta: o.meta ?? true,\n messages: o.messages ?? true,\n inlineRefs: o.inlineRefs ?? true,\n schemaId: o.schemaId ?? \"$id\",\n addUsedSchema: o.addUsedSchema ?? true,\n validateSchema: o.validateSchema ?? true,\n validateFormats: o.validateFormats ?? true,\n unicodeRegExp: o.unicodeRegExp ?? true,\n int32range: o.int32range ?? true,\n uriResolver: uriResolver,\n }\n}\n\nexport interface Logger {\n log(...args: unknown[]): unknown\n warn(...args: unknown[]): unknown\n error(...args: unknown[]): unknown\n}\n\nexport default class Ajv {\n opts: InstanceOptions\n errors?: ErrorObject[] | null // errors from the last validation\n logger: Logger\n // shared external scope values for compiled functions\n readonly scope: ValueScope\n readonly schemas: {[Key in string]?: SchemaEnv} = {}\n readonly refs: {[Ref in string]?: SchemaEnv | string} = {}\n readonly formats: {[Name in string]?: AddedFormat} = Object.create(null)\n readonly RULES: ValidationRules\n readonly _compilations: Set<SchemaEnv> = new Set()\n private readonly _loading: {[Ref in string]?: Promise<AnySchemaObject>} = {}\n private readonly _cache: Map<AnySchema, SchemaEnv> = new Map()\n private readonly _metaOpts: InstanceOptions\n\n static ValidationError = ValidationError\n static MissingRefError = MissingRefError\n\n constructor(opts: Options = {}) {\n opts = this.opts = {...opts, ...requiredOptions(opts)}\n const {es5, lines} = this.opts.code\n\n this.scope = new ValueScope({scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines})\n this.logger = getLogger(opts.logger)\n const formatOpt = opts.validateFormats\n opts.validateFormats = false\n\n this.RULES = getRules()\n checkOptions.call(this, removedOptions, opts, \"NOT SUPPORTED\")\n checkOptions.call(this, deprecatedOptions, opts, \"DEPRECATED\", \"warn\")\n this._metaOpts = getMetaSchemaOptions.call(this)\n\n if (opts.formats) addInitialFormats.call(this)\n this._addVocabularies()\n this._addDefaultMetaSchema()\n if (opts.keywords) addInitialKeywords.call(this, opts.keywords)\n if (typeof opts.meta == \"object\") this.addMetaSchema(opts.meta)\n addInitialSchemas.call(this)\n opts.validateFormats = formatOpt\n }\n\n _addVocabularies(): void {\n this.addKeyword(\"$async\")\n }\n\n _addDefaultMetaSchema(): void {\n const {$data, meta, schemaId} = this.opts\n let _dataRefSchema: SchemaObject = $dataRefSchema\n if (schemaId === \"id\") {\n _dataRefSchema = {...$dataRefSchema}\n _dataRefSchema.id = _dataRefSchema.$id\n delete _dataRefSchema.$id\n }\n if (meta && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false)\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n const {meta, schemaId} = this.opts\n return (this.opts.defaultMeta = typeof meta == \"object\" ? meta[schemaId] || meta : undefined)\n }\n\n // Validate data using schema\n // AnySchema will be compiled and cached using schema itself as a key for Map\n validate(schema: Schema | string, data: unknown): boolean\n validate(schemaKeyRef: AnySchema | string, data: unknown): boolean | Promise<unknown>\n validate<T>(schema: Schema | JSONSchemaType<T> | string, data: unknown): data is T\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n validate<T>(schema: JTDSchemaType<T>, data: unknown): data is T\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n validate<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n data: unknown\n ): data is JTDDataType<T>\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n validate<T>(schema: AsyncSchema, data: unknown | T): Promise<T>\n validate<T>(schemaKeyRef: AnySchema | string, data: unknown): data is T | Promise<T>\n validate<T>(\n schemaKeyRef: AnySchema | string, // key, ref or schema object\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n data: unknown | T // to be validated\n ): boolean | Promise<T> {\n let v: AnyValidateFunction | undefined\n if (typeof schemaKeyRef == \"string\") {\n v = this.getSchema<T>(schemaKeyRef)\n if (!v) throw new Error(`no schema with key or ref \"${schemaKeyRef}\"`)\n } else {\n v = this.compile<T>(schemaKeyRef)\n }\n\n const valid = v(data)\n if (!(\"$async\" in v)) this.errors = v.errors\n return valid\n }\n\n // Create validation function for passed schema\n // _meta: true if schema is a meta-schema. Used internally to compile meta schemas of user-defined keywords.\n compile<T = unknown>(schema: Schema | JSONSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compile<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): ValidateFunction<T>\n // This overload is only intended for typescript inference, the first\n // argument prevents manual type annotation from matching this overload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n compile<N extends never, T extends SomeJTDSchemaType>(\n schema: T,\n _meta?: boolean\n ): ValidateFunction<JTDDataType<T>>\n compile<T = unknown>(schema: AsyncSchema, _meta?: boolean): AsyncValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T>\n compile<T = unknown>(schema: AnySchema, _meta?: boolean): AnyValidateFunction<T> {\n const sch = this._addSchema(schema, _meta)\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T>\n }\n\n // Creates validating function for passed schema with asynchronous loading of missing schemas.\n // `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.\n // TODO allow passing schema URI\n // meta - optional true to compile meta-schema\n compileAsync<T = unknown>(\n schema: SchemaObject | JSONSchemaType<T>,\n _meta?: boolean\n ): Promise<ValidateFunction<T>>\n // Separated for type inference to work\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(schema: JTDSchemaType<T>, _meta?: boolean): Promise<ValidateFunction<T>>\n compileAsync<T = unknown>(schema: AsyncSchema, meta?: boolean): Promise<AsyncValidateFunction<T>>\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>>\n compileAsync<T = unknown>(\n schema: AnySchemaObject,\n meta?: boolean\n ): Promise<AnyValidateFunction<T>> {\n if (typeof this.opts.loadSchema != \"function\") {\n throw new Error(\"options.loadSchema should be a function\")\n }\n const {loadSchema} = this.opts\n return runCompileAsync.call(this, schema, meta)\n\n async function runCompileAsync(\n this: Ajv,\n _schema: AnySchemaObject,\n _meta?: boolean\n ): Promise<AnyValidateFunction> {\n await loadMetaSchema.call(this, _schema.$schema)\n const sch = this._addSchema(_schema, _meta)\n return sch.validate || _compileAsync.call(this, sch)\n }\n\n async function loadMetaSchema(this: Ajv, $ref?: string): Promise<void> {\n if ($ref && !this.getSchema($ref)) {\n await runCompileAsync.call(this, {$ref}, true)\n }\n }\n\n async function _compileAsync(this: Ajv, sch: SchemaEnv): Promise<AnyValidateFunction> {\n try {\n return this._compileSchemaEnv(sch)\n } catch (e) {\n if (!(e instanceof MissingRefError)) throw e\n checkLoaded.call(this, e)\n await loadMissingSchema.call(this, e.missingSchema)\n return _compileAsync.call(this, sch)\n }\n }\n\n function checkLoaded(this: Ajv, {missingSchema: ref, missingRef}: MissingRefError): void {\n if (this.refs[ref]) {\n throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`)\n }\n }\n\n async function loadMissingSchema(this: Ajv, ref: string): Promise<void> {\n const _schema = await _loadSchema.call(this, ref)\n if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema)\n if (!this.refs[ref]) this.addSchema(_schema, ref, meta)\n }\n\n async function _loadSchema(this: Ajv, ref: string): Promise<AnySchemaObject> {\n const p = this._loading[ref]\n if (p) return p\n try {\n return await (this._loading[ref] = loadSchema(ref))\n } finally {\n delete this._loading[ref]\n }\n }\n }\n\n // Adds schema to the instance\n addSchema(\n schema: AnySchema | AnySchema[], // If array is passed, `key` will be ignored\n key?: string, // Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.\n _meta?: boolean, // true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.\n _validateSchema = this.opts.validateSchema // false to skip schema validation. Used internally, option validateSchema should be used instead.\n ): Ajv {\n if (Array.isArray(schema)) {\n for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema)\n return this\n }\n let id: string | undefined\n if (typeof schema === \"object\") {\n const {schemaId} = this.opts\n id = schema[schemaId]\n if (id !== undefined && typeof id != \"string\") {\n throw new Error(`schema ${schemaId} must be string`)\n }\n }\n key = normalizeId(key || id)\n this._checkUnique(key)\n this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true)\n return this\n }\n\n // Add schema that will be used to validate other schemas\n // options in META_IGNORE_OPTIONS are alway set to false\n addMetaSchema(\n schema: AnySchemaObject,\n key?: string, // schema key\n _validateSchema = this.opts.validateSchema // false to skip schema validation, can be used to override validateSchema option for meta-schema\n ): Ajv {\n this.addSchema(schema, key, true, _validateSchema)\n return this\n }\n\n // Validate schema against its meta-schema\n validateSchema(schema: AnySchema, throwOrLogError?: boolean): boolean | Promise<unknown> {\n if (typeof schema == \"boolean\") return true\n let $schema: string | AnySchemaObject | undefined\n $schema = schema.$schema\n if ($schema !== undefined && typeof $schema != \"string\") {\n throw new Error(\"$schema must be a string\")\n }\n $schema = $schema || this.opts.defaultMeta || this.defaultMeta()\n if (!$schema) {\n this.logger.warn(\"meta-schema not available\")\n this.errors = null\n return true\n }\n const valid = this.validate($schema, schema)\n if (!valid && throwOrLogError) {\n const message = \"schema is invalid: \" + this.errorsText()\n if (this.opts.validateSchema === \"log\") this.logger.error(message)\n else throw new Error(message)\n }\n return valid\n }\n\n // Get compiled schema by `key` or `ref`.\n // (`key` that was passed to `addSchema` or full schema reference - `schema.$id` or resolved id)\n getSchema<T = unknown>(keyRef: string): AnyValidateFunction<T> | undefined {\n let sch\n while (typeof (sch = getSchEnv.call(this, keyRef)) == \"string\") keyRef = sch\n if (sch === undefined) {\n const {schemaId} = this.opts\n const root = new SchemaEnv({schema: {}, schemaId})\n sch = resolveSchema.call(this, root, keyRef)\n if (!sch) return\n this.refs[keyRef] = sch\n }\n return (sch.validate || this._compileSchemaEnv(sch)) as AnyValidateFunction<T> | undefined\n }\n\n // Remove cached schema(s).\n // If no parameter is passed all schemas but meta-schemas are removed.\n // If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.\n // Even if schema is referenced by other schemas it still can be removed as other schemas have local references.\n removeSchema(schemaKeyRef?: AnySchema | string | RegExp): Ajv {\n if (schemaKeyRef instanceof RegExp) {\n this._removeAllSchemas(this.schemas, schemaKeyRef)\n this._removeAllSchemas(this.refs, schemaKeyRef)\n return this\n }\n switch (typeof schemaKeyRef) {\n case \"undefined\":\n this._removeAllSchemas(this.schemas)\n this._removeAllSchemas(this.refs)\n this._cache.clear()\n return this\n case \"string\": {\n const sch = getSchEnv.call(this, schemaKeyRef)\n if (typeof sch == \"object\") this._cache.delete(sch.schema)\n delete this.schemas[schemaKeyRef]\n delete this.refs[schemaKeyRef]\n return this\n }\n case \"object\": {\n const cacheKey = schemaKeyRef\n this._cache.delete(cacheKey)\n let id = schemaKeyRef[this.opts.schemaId]\n if (id) {\n id = normalizeId(id)\n delete this.schemas[id]\n delete this.refs[id]\n }\n return this\n }\n default:\n throw new Error(\"ajv.removeSchema: invalid parameter\")\n }\n }\n\n // add \"vocabulary\" - a collection of keywords\n addVocabulary(definitions: Vocabulary): Ajv {\n for (const def of definitions) this.addKeyword(def)\n return this\n }\n\n addKeyword(\n kwdOrDef: string | KeywordDefinition,\n def?: KeywordDefinition // deprecated\n ): Ajv {\n let keyword: string | string[]\n if (typeof kwdOrDef == \"string\") {\n keyword = kwdOrDef\n if (typeof def == \"object\") {\n this.logger.warn(\"these parameters are deprecated, see docs for addKeyword\")\n def.keyword = keyword\n }\n } else if (typeof kwdOrDef == \"object\" && def === undefined) {\n def = kwdOrDef\n keyword = def.keyword\n if (Array.isArray(keyword) && !keyword.length) {\n throw new Error(\"addKeywords: keyword must be string or non-empty array\")\n }\n } else {\n throw new Error(\"invalid addKeywords parameters\")\n }\n\n checkKeyword.call(this, keyword, def)\n if (!def) {\n eachItem(keyword, (kwd) => addRule.call(this, kwd))\n return this\n }\n keywordMetaschema.call(this, def)\n const definition: AddedKeywordDefinition = {\n ...def,\n type: getJSONTypes(def.type),\n schemaType: getJSONTypes(def.schemaType),\n }\n eachItem(\n keyword,\n definition.type.length === 0\n ? (k) => addRule.call(this, k, definition)\n : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))\n )\n return this\n }\n\n getKeyword(keyword: string): AddedKeywordDefinition | boolean {\n const rule = this.RULES.all[keyword]\n return typeof rule == \"object\" ? rule.definition : !!rule\n }\n\n // Remove keyword\n removeKeyword(keyword: string): Ajv {\n // TODO return type should be Ajv\n const {RULES} = this\n delete RULES.keywords[keyword]\n delete RULES.all[keyword]\n for (const group of RULES.rules) {\n const i = group.rules.findIndex((rule) => rule.keyword === keyword)\n if (i >= 0) group.rules.splice(i, 1)\n }\n return this\n }\n\n // Add format\n addFormat(name: string, format: Format): Ajv {\n if (typeof format == \"string\") format = new RegExp(format)\n this.formats[name] = format\n return this\n }\n\n errorsText(\n errors: ErrorObject[] | null | undefined = this.errors, // optional array of validation errors\n {separator = \", \", dataVar = \"data\"}: ErrorsTextOptions = {} // optional options with properties `separator` and `dataVar`\n ): string {\n if (!errors || errors.length === 0) return \"No errors\"\n return errors\n .map((e) => `${dataVar}${e.instancePath} ${e.message}`)\n .reduce((text, msg) => text + separator + msg)\n }\n\n $dataMetaSchema(metaSchema: AnySchemaObject, keywordsJsonPointers: string[]): AnySchemaObject {\n const rules = this.RULES.all\n metaSchema = JSON.parse(JSON.stringify(metaSchema))\n for (const jsonPointer of keywordsJsonPointers) {\n const segments = jsonPointer.split(\"/\").slice(1) // first segment is an empty string\n let keywords = metaSchema\n for (const seg of segments) keywords = keywords[seg] as AnySchemaObject\n\n for (const key in rules) {\n const rule = rules[key]\n if (typeof rule != \"object\") continue\n const {$data} = rule.definition\n const schema = keywords[key] as AnySchemaObject | undefined\n if ($data && schema) keywords[key] = schemaOrData(schema)\n }\n }\n\n return metaSchema\n }\n\n private _removeAllSchemas(schemas: {[Ref in string]?: SchemaEnv | string}, regex?: RegExp): void {\n for (const keyRef in schemas) {\n const sch = schemas[keyRef]\n if (!regex || regex.test(keyRef)) {\n if (typeof sch == \"string\") {\n delete schemas[keyRef]\n } else if (sch && !sch.meta) {\n this._cache.delete(sch.schema)\n delete schemas[keyRef]\n }\n }\n }\n }\n\n _addSchema(\n schema: AnySchema,\n meta?: boolean,\n baseId?: string,\n validateSchema = this.opts.validateSchema,\n addSchema = this.opts.addUsedSchema\n ): SchemaEnv {\n let id: string | undefined\n const {schemaId} = this.opts\n if (typeof schema == \"object\") {\n id = schema[schemaId]\n } else {\n if (this.opts.jtd) throw new Error(\"schema must be object\")\n else if (typeof schema != \"boolean\") throw new Error(\"schema must be object or boolean\")\n }\n let sch = this._cache.get(schema)\n if (sch !== undefined) return sch\n\n baseId = normalizeId(id || baseId)\n const localRefs = getSchemaRefs.call(this, schema, baseId)\n sch = new SchemaEnv({schema, schemaId, meta, baseId, localRefs})\n this._cache.set(sch.schema, sch)\n if (addSchema && !baseId.startsWith(\"#\")) {\n // TODO atm it is allowed to overwrite schemas without id (instead of not adding them)\n if (baseId) this._checkUnique(baseId)\n this.refs[baseId] = sch\n }\n if (validateSchema) this.validateSchema(schema, true)\n return sch\n }\n\n private _checkUnique(id: string): void {\n if (this.schemas[id] || this.refs[id]) {\n throw new Error(`schema with key or id \"${id}\" already exists`)\n }\n }\n\n private _compileSchemaEnv(sch: SchemaEnv): AnyValidateFunction {\n if (sch.meta) this._compileMetaSchema(sch)\n else compileSchema.call(this, sch)\n\n /* istanbul ignore if */\n if (!sch.validate) throw new Error(\"ajv implementation error\")\n return sch.validate\n }\n\n private _compileMetaSchema(sch: SchemaEnv): void {\n const currentOpts = this.opts\n this.opts = this._metaOpts\n try {\n compileSchema.call(this, sch)\n } finally {\n this.opts = currentOpts\n }\n }\n}\n\nexport interface ErrorsTextOptions {\n separator?: string\n dataVar?: string\n}\n\nfunction checkOptions(\n this: Ajv,\n checkOpts: OptionsInfo<RemovedOptions | DeprecatedOptions>,\n options: Options & RemovedOptions,\n msg: string,\n log: \"warn\" | \"error\" = \"error\"\n): void {\n for (const key in checkOpts) {\n const opt = key as keyof typeof checkOpts\n if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`)\n }\n}\n\nfunction getSchEnv(this: Ajv, keyRef: string): SchemaEnv | string | undefined {\n keyRef = normalizeId(keyRef) // TODO tests fail without this line\n return this.schemas[keyRef] || this.refs[keyRef]\n}\n\nfunction addInitialSchemas(this: Ajv): void {\n const optsSchemas = this.opts.schemas\n if (!optsSchemas) return\n if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas)\n else for (const key in optsSchemas) this.addSchema(optsSchemas[key] as AnySchema, key)\n}\n\nfunction addInitialFormats(this: Ajv): void {\n for (const name in this.opts.formats) {\n const format = this.opts.formats[name]\n if (format) this.addFormat(name, format)\n }\n}\n\nfunction addInitialKeywords(\n this: Ajv,\n defs: Vocabulary | {[K in string]?: KeywordDefinition}\n): void {\n if (Array.isArray(defs)) {\n this.addVocabulary(defs)\n return\n }\n this.logger.warn(\"keywords option as map is deprecated, pass array\")\n for (const keyword in defs) {\n const def = defs[keyword] as KeywordDefinition\n if (!def.keyword) def.keyword = keyword\n this.addKeyword(def)\n }\n}\n\nfunction getMetaSchemaOptions(this: Ajv): InstanceOptions {\n const metaOpts = {...this.opts}\n for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]\n return metaOpts\n}\n\nconst noLogs = {log() {}, warn() {}, error() {}}\n\nfunction getLogger(logger?: Partial<Logger> | false): Logger {\n if (logger === false) return noLogs\n if (logger === undefined) return console\n if (logger.log && logger.warn && logger.error) return logger as Logger\n throw new Error(\"logger must implement log, warn and error methods\")\n}\n\nconst KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i\n\nfunction checkKeyword(this: Ajv, keyword: string | string[], def?: KeywordDefinition): void {\n const {RULES} = this\n eachItem(keyword, (kwd) => {\n if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`)\n if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`)\n })\n if (!def) return\n if (def.$data && !(\"code\" in def || \"validate\" in def)) {\n throw new Error('$data keyword must have \"code\" or \"validate\" function')\n }\n}\n\nfunction addRule(\n this: Ajv,\n keyword: string,\n definition?: AddedKeywordDefinition,\n dataType?: JSONType\n): void {\n const post = definition?.post\n if (dataType && post) throw new Error('keyword with \"post\" flag cannot have \"type\"')\n const {RULES} = this\n let ruleGroup = post ? RULES.post : RULES.rules.find(({type: t}) => t === dataType)\n if (!ruleGroup) {\n ruleGroup = {type: dataType, rules: []}\n RULES.rules.push(ruleGroup)\n }\n RULES.keywords[keyword] = true\n if (!definition) return\n\n const rule: Rule = {\n keyword,\n definition: {\n ...definition,\n type: getJSONTypes(definition.type),\n schemaType: getJSONTypes(definition.schemaType),\n },\n }\n if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before)\n else ruleGroup.rules.push(rule)\n RULES.all[keyword] = rule\n definition.implements?.forEach((kwd) => this.addKeyword(kwd))\n}\n\nfunction addBeforeRule(this: Ajv, ruleGroup: RuleGroup, rule: Rule, before: string): void {\n const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before)\n if (i >= 0) {\n ruleGroup.rules.splice(i, 0, rule)\n } else {\n ruleGroup.rules.push(rule)\n this.logger.warn(`rule ${before} is not defined`)\n }\n}\n\nfunction keywordMetaschema(this: Ajv, def: KeywordDefinition): void {\n let {metaSchema} = def\n if (metaSchema === undefined) return\n if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema)\n def.validateSchema = this.compile(metaSchema, true)\n}\n\nconst $dataRef = {\n $ref: \"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\n}\n\nfunction schemaOrData(schema: AnySchema): AnySchemaObject {\n return {anyOf: [schema, $dataRef]}\n}\n","import type {CodeKeywordDefinition} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"id\",\n code() {\n throw new Error('NOT SUPPORTED: keyword \"id\", use \"$id\" for schema ID')\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {callValidateCode} from \"../code\"\nimport {_, nil, stringify, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport {SchemaEnv, resolveRef} from \"../../compile\"\nimport {mergeEvaluated} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"$ref\",\n schemaType: \"string\",\n code(cxt: KeywordCxt): void {\n const {gen, schema: $ref, it} = cxt\n const {baseId, schemaEnv: env, validateName, opts, self} = it\n const {root} = env\n if (($ref === \"#\" || $ref === \"#/\") && baseId === root.baseId) return callRootRef()\n const schOrEnv = resolveRef.call(self, root, baseId, $ref)\n if (schOrEnv === undefined) throw new MissingRefError(it.opts.uriResolver, baseId, $ref)\n if (schOrEnv instanceof SchemaEnv) return callValidate(schOrEnv)\n return inlineRefSchema(schOrEnv)\n\n function callRootRef(): void {\n if (env === root) return callRef(cxt, validateName, env, env.$async)\n const rootName = gen.scopeValue(\"root\", {ref: root})\n return callRef(cxt, _`${rootName}.validate`, root, root.$async)\n }\n\n function callValidate(sch: SchemaEnv): void {\n const v = getValidate(cxt, sch)\n callRef(cxt, v, sch, sch.$async)\n }\n\n function inlineRefSchema(sch: AnySchema): void {\n const schName = gen.scopeValue(\n \"schema\",\n opts.code.source === true ? {ref: sch, code: stringify(sch)} : {ref: sch}\n )\n const valid = gen.name(\"valid\")\n const schCxt = cxt.subschema(\n {\n schema: sch,\n dataTypes: [],\n schemaPath: nil,\n topSchemaRef: schName,\n errSchemaPath: $ref,\n },\n valid\n )\n cxt.mergeEvaluated(schCxt)\n cxt.ok(valid)\n }\n },\n}\n\nexport function getValidate(cxt: KeywordCxt, sch: SchemaEnv): Code {\n const {gen} = cxt\n return sch.validate\n ? gen.scopeValue(\"validate\", {ref: sch.validate})\n : _`${gen.scopeValue(\"wrapper\", {ref: sch})}.validate`\n}\n\nexport function callRef(cxt: KeywordCxt, v: Code, sch?: SchemaEnv, $async?: boolean): void {\n const {gen, it} = cxt\n const {allErrors, schemaEnv: env, opts} = it\n const passCxt = opts.passContext ? N.this : nil\n if ($async) callAsyncRef()\n else callSyncRef()\n\n function callAsyncRef(): void {\n if (!env.$async) throw new Error(\"async schema referenced by sync schema\")\n const valid = gen.let(\"valid\")\n gen.try(\n () => {\n gen.code(_`await ${callValidateCode(cxt, v, passCxt)}`)\n addEvaluatedFrom(v) // TODO will not work with async, it has to be returned with the result\n if (!allErrors) gen.assign(valid, true)\n },\n (e) => {\n gen.if(_`!(${e} instanceof ${it.ValidationError as Name})`, () => gen.throw(e))\n addErrorsFrom(e)\n if (!allErrors) gen.assign(valid, false)\n }\n )\n cxt.ok(valid)\n }\n\n function callSyncRef(): void {\n cxt.result(\n callValidateCode(cxt, v, passCxt),\n () => addEvaluatedFrom(v),\n () => addErrorsFrom(v)\n )\n }\n\n function addErrorsFrom(source: Code): void {\n const errs = _`${source}.errors`\n gen.assign(N.vErrors, _`${N.vErrors} === null ? ${errs} : ${N.vErrors}.concat(${errs})`) // TODO tagged\n gen.assign(N.errors, _`${N.vErrors}.length`)\n }\n\n function addEvaluatedFrom(source: Code): void {\n if (!it.opts.unevaluated) return\n const schEvaluated = sch?.validate?.evaluated\n // TODO refactor\n if (it.props !== true) {\n if (schEvaluated && !schEvaluated.dynamicProps) {\n if (schEvaluated.props !== undefined) {\n it.props = mergeEvaluated.props(gen, schEvaluated.props, it.props)\n }\n } else {\n const props = gen.var(\"props\", _`${source}.evaluated.props`)\n it.props = mergeEvaluated.props(gen, props, it.props, Name)\n }\n }\n if (it.items !== true) {\n if (schEvaluated && !schEvaluated.dynamicItems) {\n if (schEvaluated.items !== undefined) {\n it.items = mergeEvaluated.items(gen, schEvaluated.items, it.items)\n }\n } else {\n const items = gen.var(\"items\", _`${source}.evaluated.items`)\n it.items = mergeEvaluated.items(gen, items, it.items, Name)\n }\n }\n }\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport idKeyword from \"./id\"\nimport refKeyword from \"./ref\"\n\nconst core: Vocabulary = [\n \"$schema\",\n \"$id\",\n \"$defs\",\n \"$vocabulary\",\n {keyword: \"$comment\"},\n \"definitions\",\n idKeyword,\n refKeyword,\n]\n\nexport default core\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators, Code} from \"../../compile/codegen\"\n\nconst ops = operators\n\ntype Kwd = \"maximum\" | \"minimum\" | \"exclusiveMaximum\" | \"exclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n maximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n minimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n exclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n exclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitNumberError = ErrorObject<\n Kwd,\n {limit: number; comparison: Comparison},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`must be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n cxt.fail$data(_`${data} ${KWDs[keyword as Kwd].fail} ${schemaCode} || isNaN(${data})`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type MultipleOfError = ErrorObject<\n \"multipleOf\",\n {multipleOf: number},\n number | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must be multiple of ${schemaCode}`,\n params: ({schemaCode}) => _`{multipleOf: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"multipleOf\",\n type: \"number\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schemaCode, it} = cxt\n // const bdt = bad$DataType(schemaCode, <string>def.schemaType, $data)\n const prec = it.opts.multipleOfPrecision\n const res = gen.let(\"res\")\n const invalid = prec\n ? _`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}`\n : _`${res} !== parseInt(${res})`\n cxt.fail$data(_`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`)\n },\n}\n\nexport default def\n","// https://mathiasbynens.be/notes/javascript-encoding\n// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode\nexport default function ucs2length(str: string): number {\n const len = str.length\n let length = 0\n let pos = 0\n let value: number\n while (pos < len) {\n length++\n value = str.charCodeAt(pos++)\n if (value >= 0xd800 && value <= 0xdbff && pos < len) {\n // high surrogate, and there is a next character\n value = str.charCodeAt(pos)\n if ((value & 0xfc00) === 0xdc00) pos++ // low surrogate\n }\n }\n return length\n}\n\nucs2length.code = 'require(\"ajv/dist/runtime/ucs2length\").default'\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport ucs2length from \"../../runtime/ucs2length\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxLength\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} characters`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxLength\", \"minLength\"],\n type: \"string\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode, it} = cxt\n const op = keyword === \"maxLength\" ? operators.GT : operators.LT\n const len =\n it.opts.unicode === false ? _`${data}.length` : _`${useFunc(cxt.gen, ucs2length)}(${data})`\n cxt.fail$data(_`${len} ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {usePattern} from \"../code\"\nimport {useFunc} from \"../../compile/util\"\nimport {_, str} from \"../../compile/codegen\"\n\nexport type PatternError = ErrorObject<\"pattern\", {pattern: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match pattern \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{pattern: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"pattern\",\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const u = it.opts.unicodeRegExp ? \"u\" : \"\"\n if ($data) {\n const {regExp} = it.opts.code\n const regExpCode = regExp.code === \"new RegExp\" ? _`new RegExp` : useFunc(gen, regExp)\n const valid = gen.let(\"valid\")\n gen.try(\n () => gen.assign(valid, _`${regExpCode}(${schemaCode}, ${u}).test(${data})`),\n () => gen.assign(valid, false)\n )\n cxt.fail$data(_`!${valid}`)\n } else {\n const regExp = usePattern(cxt, schema)\n cxt.fail$data(_`!${regExp}.test(${data})`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxProperties\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} properties`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxProperties\", \"minProperties\"],\n type: \"object\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxProperties\" ? operators.GT : operators.LT\n cxt.fail$data(_`Object.keys(${data}).length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {\n checkReportMissingProp,\n checkMissingProp,\n reportMissingProp,\n propertyInData,\n noPropertyInData,\n} from \"../code\"\nimport {_, str, nil, not, Name, Code} from \"../../compile/codegen\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nexport type RequiredError = ErrorObject<\n \"required\",\n {missingProperty: string},\n string[] | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {missingProperty}}) => str`must have required property '${missingProperty}'`,\n params: ({params: {missingProperty}}) => _`{missingProperty: ${missingProperty}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"required\",\n type: \"object\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, schemaCode, data, $data, it} = cxt\n const {opts} = it\n if (!$data && schema.length === 0) return\n const useLoop = schema.length >= opts.loopRequired\n if (it.allErrors) allErrorsMode()\n else exitOnErrorMode()\n\n if (opts.strictRequired) {\n const props = cxt.parentSchema.properties\n const {definedProperties} = cxt.it\n for (const requiredKey of schema) {\n if (props?.[requiredKey] === undefined && !definedProperties.has(requiredKey)) {\n const schemaPath = it.schemaEnv.baseId + it.errSchemaPath\n const msg = `required property \"${requiredKey}\" is not defined at \"${schemaPath}\" (strictRequired)`\n checkStrictMode(it, msg, it.opts.strictRequired)\n }\n }\n }\n\n function allErrorsMode(): void {\n if (useLoop || $data) {\n cxt.block$data(nil, loopAllRequired)\n } else {\n for (const prop of schema) {\n checkReportMissingProp(cxt, prop)\n }\n }\n }\n\n function exitOnErrorMode(): void {\n const missing = gen.let(\"missing\")\n if (useLoop || $data) {\n const valid = gen.let(\"valid\", true)\n cxt.block$data(valid, () => loopUntilMissing(missing, valid))\n cxt.ok(valid)\n } else {\n gen.if(checkMissingProp(cxt, schema, missing))\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n\n function loopAllRequired(): void {\n gen.forOf(\"prop\", schemaCode as Code, (prop) => {\n cxt.setParams({missingProperty: prop})\n gen.if(noPropertyInData(gen, data, prop, opts.ownProperties), () => cxt.error())\n })\n }\n\n function loopUntilMissing(missing: Name, valid: Name): void {\n cxt.setParams({missingProperty: missing})\n gen.forOf(\n missing,\n schemaCode as Code,\n () => {\n gen.assign(valid, propertyInData(gen, data, missing, opts.ownProperties))\n gen.if(not(valid), () => {\n cxt.error()\n gen.break()\n })\n },\n nil\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, operators} from \"../../compile/codegen\"\n\nconst error: KeywordErrorDefinition = {\n message({keyword, schemaCode}) {\n const comp = keyword === \"maxItems\" ? \"more\" : \"fewer\"\n return str`must NOT have ${comp} than ${schemaCode} items`\n },\n params: ({schemaCode}) => _`{limit: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"maxItems\", \"minItems\"],\n type: \"array\",\n schemaType: \"number\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {keyword, data, schemaCode} = cxt\n const op = keyword === \"maxItems\" ? operators.GT : operators.LT\n cxt.fail$data(_`${data}.length ${op} ${schemaCode}`)\n },\n}\n\nexport default def\n","// https://github.com/ajv-validator/ajv/issues/889\nimport * as equal from \"fast-deep-equal\"\n\ntype Equal = typeof equal & {code: string}\n;(equal as Equal).code = 'require(\"ajv/dist/runtime/equal\").default'\n\nexport default equal as Equal\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkDataTypes, getSchemaTypes, DataType} from \"../../compile/validate/dataType\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type UniqueItemsError = ErrorObject<\n \"uniqueItems\",\n {i: number; j: number},\n boolean | {$data: string}\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {i, j}}) =>\n str`must NOT have duplicate items (items ## ${j} and ${i} are identical)`,\n params: ({params: {i, j}}) => _`{i: ${i}, j: ${j}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"uniqueItems\",\n type: \"array\",\n schemaType: \"boolean\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, parentSchema, schemaCode, it} = cxt\n if (!$data && !schema) return\n const valid = gen.let(\"valid\")\n const itemTypes = parentSchema.items ? getSchemaTypes(parentSchema.items) : []\n cxt.block$data(valid, validateUniqueItems, _`${schemaCode} === false`)\n cxt.ok(valid)\n\n function validateUniqueItems(): void {\n const i = gen.let(\"i\", _`${data}.length`)\n const j = gen.let(\"j\")\n cxt.setParams({i, j})\n gen.assign(valid, true)\n gen.if(_`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j))\n }\n\n function canOptimize(): boolean {\n return itemTypes.length > 0 && !itemTypes.some((t) => t === \"object\" || t === \"array\")\n }\n\n function loopN(i: Name, j: Name): void {\n const item = gen.name(\"item\")\n const wrongType = checkDataTypes(itemTypes, item, it.opts.strictNumbers, DataType.Wrong)\n const indices = gen.const(\"indices\", _`{}`)\n gen.for(_`;${i}--;`, () => {\n gen.let(item, _`${data}[${i}]`)\n gen.if(wrongType, _`continue`)\n if (itemTypes.length > 1) gen.if(_`typeof ${item} == \"string\"`, _`${item} += \"_\"`)\n gen\n .if(_`typeof ${indices}[${item}] == \"number\"`, () => {\n gen.assign(j, _`${indices}[${item}]`)\n cxt.error()\n gen.assign(valid, false).break()\n })\n .code(_`${indices}[${item}] = ${i}`)\n })\n }\n\n function loopN2(i: Name, j: Name): void {\n const eql = useFunc(gen, equal)\n const outer = gen.name(\"outer\")\n gen.label(outer).for(_`;${i}--;`, () =>\n gen.for(_`${j} = ${i}; ${j}--;`, () =>\n gen.if(_`${eql}(${data}[${i}], ${data}[${j}])`, () => {\n cxt.error()\n gen.assign(valid, false).break(outer)\n })\n )\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type ConstError = ErrorObject<\"const\", {allowedValue: any}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to constant\",\n params: ({schemaCode}) => _`{allowedValue: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"const\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schemaCode, schema} = cxt\n if ($data || (schema && typeof schema == \"object\")) {\n cxt.fail$data(_`!${useFunc(gen, equal)}(${data}, ${schemaCode})`)\n } else {\n cxt.fail(_`${schema} !== ${data}`)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, or, Name, Code} from \"../../compile/codegen\"\nimport {useFunc} from \"../../compile/util\"\nimport equal from \"../../runtime/equal\"\n\nexport type EnumError = ErrorObject<\"enum\", {allowedValues: any[]}, any[] | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: \"must be equal to one of the allowed values\",\n params: ({schemaCode}) => _`{allowedValues: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"enum\",\n schemaType: \"array\",\n $data: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n if (!$data && schema.length === 0) throw new Error(\"enum must have non-empty array\")\n const useLoop = schema.length >= it.opts.loopEnum\n let eql: Name | undefined\n const getEql = (): Name => (eql ??= useFunc(gen, equal))\n\n let valid: Code\n if (useLoop || $data) {\n valid = gen.let(\"valid\")\n cxt.block$data(valid, loopEnum)\n } else {\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const vSchema = gen.const(\"vSchema\", schemaCode)\n valid = or(...schema.map((_x: unknown, i: number) => equalCode(vSchema, i)))\n }\n cxt.pass(valid)\n\n function loopEnum(): void {\n gen.assign(valid, false)\n gen.forOf(\"v\", schemaCode as Code, (v) =>\n gen.if(_`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())\n )\n }\n\n function equalCode(vSchema: Name, i: number): Code {\n const sch = schema[i]\n return typeof sch === \"object\" && sch !== null\n ? _`${getEql()}(${data}, ${vSchema}[${i}])`\n : _`${data} === ${sch}`\n }\n },\n}\n\nexport default def\n","import type {ErrorObject, Vocabulary} from \"../../types\"\nimport limitNumber, {LimitNumberError} from \"./limitNumber\"\nimport multipleOf, {MultipleOfError} from \"./multipleOf\"\nimport limitLength from \"./limitLength\"\nimport pattern, {PatternError} from \"./pattern\"\nimport limitProperties from \"./limitProperties\"\nimport required, {RequiredError} from \"./required\"\nimport limitItems from \"./limitItems\"\nimport uniqueItems, {UniqueItemsError} from \"./uniqueItems\"\nimport constKeyword, {ConstError} from \"./const\"\nimport enumKeyword, {EnumError} from \"./enum\"\n\nconst validation: Vocabulary = [\n // number\n limitNumber,\n multipleOf,\n // string\n limitLength,\n pattern,\n // object\n limitProperties,\n required,\n // array\n limitItems,\n uniqueItems,\n // any\n {keyword: \"type\", schemaType: [\"string\", \"array\"]},\n {keyword: \"nullable\", schemaType: \"boolean\"},\n constKeyword,\n enumKeyword,\n]\n\nexport default validation\n\ntype LimitError = ErrorObject<\n \"maxItems\" | \"minItems\" | \"minProperties\" | \"maxProperties\" | \"minLength\" | \"maxLength\",\n {limit: number},\n number | {$data: string}\n>\n\nexport type ValidationKeywordError =\n | LimitError\n | LimitNumberError\n | MultipleOfError\n | PatternError\n | RequiredError\n | UniqueItemsError\n | ConstError\n | EnumError\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type AdditionalItemsError = ErrorObject<\"additionalItems\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"additionalItems\" as const,\n type: \"array\",\n schemaType: [\"boolean\", \"object\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {parentSchema, it} = cxt\n const {items} = parentSchema\n if (!Array.isArray(items)) {\n checkStrictMode(it, '\"additionalItems\" is ignored when \"items\" is not an array of schemas')\n return\n }\n validateAdditionalItems(cxt, items)\n },\n}\n\nexport function validateAdditionalItems(cxt: KeywordCxt, items: AnySchema[]): void {\n const {gen, schema, data, keyword, it} = cxt\n it.items = true\n const len = gen.const(\"len\", _`${data}.length`)\n if (schema === false) {\n cxt.setParams({len: items.length})\n cxt.pass(_`${len} <= ${items.length}`)\n } else if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.var(\"valid\", _`${len} <= ${items.length}`) // TODO var\n gen.if(not(valid), () => validateItems(valid))\n cxt.ok(valid)\n }\n\n function validateItems(valid: Name): void {\n gen.forRange(\"i\", items.length, len, (i) => {\n cxt.subschema({keyword, dataProp: i, dataPropType: Type.Num}, valid)\n if (!it.allErrors) gen.if(not(valid), () => gen.break())\n })\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema, AnySchemaObject} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_} from \"../../compile/codegen\"\nimport {alwaysValidSchema, mergeEvaluated, checkStrictMode} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"array\", \"boolean\"],\n before: \"uniqueItems\",\n code(cxt: KeywordCxt) {\n const {schema, it} = cxt\n if (Array.isArray(schema)) return validateTuple(cxt, \"additionalItems\", schema)\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n cxt.ok(validateArray(cxt))\n },\n}\n\nexport function validateTuple(\n cxt: KeywordCxt,\n extraItems: string,\n schArr: AnySchema[] = cxt.schema\n): void {\n const {gen, parentSchema, data, keyword, it} = cxt\n checkStrictTuple(parentSchema)\n if (it.opts.unevaluated && schArr.length && it.items !== true) {\n it.items = mergeEvaluated.items(gen, schArr.length, it.items)\n }\n const valid = gen.name(\"valid\")\n const len = gen.const(\"len\", _`${data}.length`)\n schArr.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n gen.if(_`${len} > ${i}`, () =>\n cxt.subschema(\n {\n keyword,\n schemaProp: i,\n dataProp: i,\n },\n valid\n )\n )\n cxt.ok(valid)\n })\n\n function checkStrictTuple(sch: AnySchemaObject): void {\n const {opts, errSchemaPath} = it\n const l = schArr.length\n const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false)\n if (opts.strictTuples && !fullTuple) {\n const msg = `\"${keyword}\" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path \"${errSchemaPath}\"`\n checkStrictMode(it, msg, opts.strictTuples)\n }\n }\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {validateTuple} from \"./items\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"prefixItems\",\n type: \"array\",\n schemaType: [\"array\"],\n before: \"uniqueItems\",\n code: (cxt) => validateTuple(cxt, \"items\"),\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {validateArray} from \"../code\"\nimport {validateAdditionalItems} from \"./additionalItems\"\n\nexport type ItemsError = ErrorObject<\"items\", {limit: number}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {len}}) => str`must NOT have more than ${len} items`,\n params: ({params: {len}}) => _`{limit: ${len}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"items\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n error,\n code(cxt: KeywordCxt) {\n const {schema, parentSchema, it} = cxt\n const {prefixItems} = parentSchema\n it.items = true\n if (alwaysValidSchema(it, schema)) return\n if (prefixItems) validateAdditionalItems(cxt, prefixItems)\n else cxt.ok(validateArray(cxt))\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode, Type} from \"../../compile/util\"\n\nexport type ContainsError = ErrorObject<\n \"contains\",\n {minContains: number; maxContains?: number},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {min, max}}) =>\n max === undefined\n ? str`must contain at least ${min} valid item(s)`\n : str`must contain at least ${min} and no more than ${max} valid item(s)`,\n params: ({params: {min, max}}) =>\n max === undefined ? _`{minContains: ${min}}` : _`{minContains: ${min}, maxContains: ${max}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"contains\",\n type: \"array\",\n schemaType: [\"object\", \"boolean\"],\n before: \"uniqueItems\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n let min: number\n let max: number | undefined\n const {minContains, maxContains} = parentSchema\n if (it.opts.next) {\n min = minContains === undefined ? 1 : minContains\n max = maxContains\n } else {\n min = 1\n }\n const len = gen.const(\"len\", _`${data}.length`)\n cxt.setParams({min, max})\n if (max === undefined && min === 0) {\n checkStrictMode(it, `\"minContains\" == 0 without \"maxContains\": \"contains\" keyword ignored`)\n return\n }\n if (max !== undefined && min > max) {\n checkStrictMode(it, `\"minContains\" > \"maxContains\" is always invalid`)\n cxt.fail()\n return\n }\n if (alwaysValidSchema(it, schema)) {\n let cond = _`${len} >= ${min}`\n if (max !== undefined) cond = _`${cond} && ${len} <= ${max}`\n cxt.pass(cond)\n return\n }\n\n it.items = true\n const valid = gen.name(\"valid\")\n if (max === undefined && min === 1) {\n validateItems(valid, () => gen.if(valid, () => gen.break()))\n } else if (min === 0) {\n gen.let(valid, true)\n if (max !== undefined) gen.if(_`${data}.length > 0`, validateItemsWithCount)\n } else {\n gen.let(valid, false)\n validateItemsWithCount()\n }\n cxt.result(valid, () => cxt.reset())\n\n function validateItemsWithCount(): void {\n const schValid = gen.name(\"_valid\")\n const count = gen.let(\"count\", 0)\n validateItems(schValid, () => gen.if(schValid, () => checkLimits(count)))\n }\n\n function validateItems(_valid: Name, block: () => void): void {\n gen.forRange(\"i\", 0, len, (i) => {\n cxt.subschema(\n {\n keyword: \"contains\",\n dataProp: i,\n dataPropType: Type.Num,\n compositeRule: true,\n },\n _valid\n )\n block()\n })\n }\n\n function checkLimits(count: Name): void {\n gen.code(_`${count}++`)\n if (max === undefined) {\n gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true).break())\n } else {\n gen.if(_`${count} > ${max}`, () => gen.assign(valid, false).break())\n if (min === 1) gen.assign(valid, true)\n else gen.if(_`${count} >= ${min}`, () => gen.assign(valid, true))\n }\n }\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n SchemaMap,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {checkReportMissingProp, checkMissingProp, reportMissingProp, propertyInData} from \"../code\"\n\nexport type PropertyDependencies = {[K in string]?: string[]}\n\nexport interface DependenciesErrorParams {\n property: string\n missingProperty: string\n depsCount: number\n deps: string // TODO change to string[]\n}\n\ntype SchemaDependencies = SchemaMap\n\nexport type DependenciesError = ErrorObject<\n \"dependencies\",\n DependenciesErrorParams,\n {[K in string]?: string[] | AnySchema}\n>\n\nexport const error: KeywordErrorDefinition = {\n message: ({params: {property, depsCount, deps}}) => {\n const property_ies = depsCount === 1 ? \"property\" : \"properties\"\n return str`must have ${property_ies} ${deps} when property ${property} is present`\n },\n params: ({params: {property, depsCount, deps, missingProperty}}) =>\n _`{property: ${property},\n missingProperty: ${missingProperty},\n depsCount: ${depsCount},\n deps: ${deps}}`, // TODO change to reference\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"dependencies\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const [propDeps, schDeps] = splitDependencies(cxt)\n validatePropertyDeps(cxt, propDeps)\n validateSchemaDeps(cxt, schDeps)\n },\n}\n\nfunction splitDependencies({schema}: KeywordCxt): [PropertyDependencies, SchemaDependencies] {\n const propertyDeps: PropertyDependencies = {}\n const schemaDeps: SchemaDependencies = {}\n for (const key in schema) {\n if (key === \"__proto__\") continue\n const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps\n deps[key] = schema[key]\n }\n return [propertyDeps, schemaDeps]\n}\n\nexport function validatePropertyDeps(\n cxt: KeywordCxt,\n propertyDeps: {[K in string]?: string[]} = cxt.schema\n): void {\n const {gen, data, it} = cxt\n if (Object.keys(propertyDeps).length === 0) return\n const missing = gen.let(\"missing\")\n for (const prop in propertyDeps) {\n const deps = propertyDeps[prop] as string[]\n if (deps.length === 0) continue\n const hasProperty = propertyInData(gen, data, prop, it.opts.ownProperties)\n cxt.setParams({\n property: prop,\n depsCount: deps.length,\n deps: deps.join(\", \"),\n })\n if (it.allErrors) {\n gen.if(hasProperty, () => {\n for (const depProp of deps) {\n checkReportMissingProp(cxt, depProp)\n }\n })\n } else {\n gen.if(_`${hasProperty} && (${checkMissingProp(cxt, deps, missing)})`)\n reportMissingProp(cxt, missing)\n gen.else()\n }\n }\n}\n\nexport function validateSchemaDeps(cxt: KeywordCxt, schemaDeps: SchemaMap = cxt.schema): void {\n const {gen, data, keyword, it} = cxt\n const valid = gen.name(\"valid\")\n for (const prop in schemaDeps) {\n if (alwaysValidSchema(it, schemaDeps[prop] as AnySchema)) continue\n gen.if(\n propertyInData(gen, data, prop, it.opts.ownProperties),\n () => {\n const schCxt = cxt.subschema({keyword, schemaProp: prop}, valid)\n cxt.mergeValidEvaluated(schCxt, valid)\n },\n () => gen.var(valid, true) // TODO var\n )\n cxt.ok(valid)\n }\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, not} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type PropertyNamesError = ErrorObject<\"propertyNames\", {propertyName: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: \"property name must be valid\",\n params: ({params}) => _`{propertyName: ${params.propertyName}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"propertyNames\",\n type: \"object\",\n schemaType: [\"object\", \"boolean\"],\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, data, it} = cxt\n if (alwaysValidSchema(it, schema)) return\n const valid = gen.name(\"valid\")\n\n gen.forIn(\"key\", data, (key) => {\n cxt.setParams({propertyName: key})\n cxt.subschema(\n {\n keyword: \"propertyNames\",\n data: key,\n dataTypes: [\"string\"],\n propertyName: key,\n compositeRule: true,\n },\n valid\n )\n gen.if(not(valid), () => {\n cxt.error(true)\n if (!it.allErrors) gen.break()\n })\n })\n\n cxt.ok(valid)\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n AddedKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport {allSchemaProperties, usePattern, isOwnProperty} from \"../code\"\nimport {_, nil, or, not, Code, Name} from \"../../compile/codegen\"\nimport N from \"../../compile/names\"\nimport type {SubschemaArgs} from \"../../compile/validate/subschema\"\nimport {alwaysValidSchema, schemaRefOrVal, Type} from \"../../compile/util\"\n\nexport type AdditionalPropertiesError = ErrorObject<\n \"additionalProperties\",\n {additionalProperty: string},\n AnySchema\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must NOT have additional properties\",\n params: ({params}) => _`{additionalProperty: ${params.additionalProperty}}`,\n}\n\nconst def: CodeKeywordDefinition & AddedKeywordDefinition = {\n keyword: \"additionalProperties\",\n type: [\"object\"],\n schemaType: [\"boolean\", \"object\"],\n allowUndefined: true,\n trackErrors: true,\n error,\n code(cxt) {\n const {gen, schema, parentSchema, data, errsCount, it} = cxt\n /* istanbul ignore if */\n if (!errsCount) throw new Error(\"ajv implementation error\")\n const {allErrors, opts} = it\n it.props = true\n if (opts.removeAdditional !== \"all\" && alwaysValidSchema(it, schema)) return\n const props = allSchemaProperties(parentSchema.properties)\n const patProps = allSchemaProperties(parentSchema.patternProperties)\n checkAdditionalProperties()\n cxt.ok(_`${errsCount} === ${N.errors}`)\n\n function checkAdditionalProperties(): void {\n gen.forIn(\"key\", data, (key: Name) => {\n if (!props.length && !patProps.length) additionalPropertyCode(key)\n else gen.if(isAdditional(key), () => additionalPropertyCode(key))\n })\n }\n\n function isAdditional(key: Name): Code {\n let definedProp: Code\n if (props.length > 8) {\n // TODO maybe an option instead of hard-coded 8?\n const propsSchema = schemaRefOrVal(it, parentSchema.properties, \"properties\")\n definedProp = isOwnProperty(gen, propsSchema as Code, key)\n } else if (props.length) {\n definedProp = or(...props.map((p) => _`${key} === ${p}`))\n } else {\n definedProp = nil\n }\n if (patProps.length) {\n definedProp = or(definedProp, ...patProps.map((p) => _`${usePattern(cxt, p)}.test(${key})`))\n }\n return not(definedProp)\n }\n\n function deleteAdditional(key: Name): void {\n gen.code(_`delete ${data}[${key}]`)\n }\n\n function additionalPropertyCode(key: Name): void {\n if (opts.removeAdditional === \"all\" || (opts.removeAdditional && schema === false)) {\n deleteAdditional(key)\n return\n }\n\n if (schema === false) {\n cxt.setParams({additionalProperty: key})\n cxt.error()\n if (!allErrors) gen.break()\n return\n }\n\n if (typeof schema == \"object\" && !alwaysValidSchema(it, schema)) {\n const valid = gen.name(\"valid\")\n if (opts.removeAdditional === \"failing\") {\n applyAdditionalSchema(key, valid, false)\n gen.if(not(valid), () => {\n cxt.reset()\n deleteAdditional(key)\n })\n } else {\n applyAdditionalSchema(key, valid)\n if (!allErrors) gen.if(not(valid), () => gen.break())\n }\n }\n }\n\n function applyAdditionalSchema(key: Name, valid: Name, errors?: false): void {\n const subschema: SubschemaArgs = {\n keyword: \"additionalProperties\",\n dataProp: key,\n dataPropType: Type.Str,\n }\n if (errors === false) {\n Object.assign(subschema, {\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n })\n }\n cxt.subschema(subschema, valid)\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport {KeywordCxt} from \"../../compile/validate\"\nimport {propertyInData, allSchemaProperties} from \"../code\"\nimport {alwaysValidSchema, toHash, mergeEvaluated} from \"../../compile/util\"\nimport apDef from \"./additionalProperties\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"properties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, data, it} = cxt\n if (it.opts.removeAdditional === \"all\" && parentSchema.additionalProperties === undefined) {\n apDef.code(new KeywordCxt(it, apDef, \"additionalProperties\"))\n }\n const allProps = allSchemaProperties(schema)\n for (const prop of allProps) {\n it.definedProperties.add(prop)\n }\n if (it.opts.unevaluated && allProps.length && it.props !== true) {\n it.props = mergeEvaluated.props(gen, toHash(allProps), it.props)\n }\n const properties = allProps.filter((p) => !alwaysValidSchema(it, schema[p]))\n if (properties.length === 0) return\n const valid = gen.name(\"valid\")\n\n for (const prop of properties) {\n if (hasDefault(prop)) {\n applyPropertySchema(prop)\n } else {\n gen.if(propertyInData(gen, data, prop, it.opts.ownProperties))\n applyPropertySchema(prop)\n if (!it.allErrors) gen.else().var(valid, true)\n gen.endIf()\n }\n cxt.it.definedProperties.add(prop)\n cxt.ok(valid)\n }\n\n function hasDefault(prop: string): boolean | undefined {\n return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined\n }\n\n function applyPropertySchema(prop: string): void {\n cxt.subschema(\n {\n keyword: \"properties\",\n schemaProp: prop,\n dataProp: prop,\n },\n valid\n )\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {allSchemaProperties, usePattern} from \"../code\"\nimport {_, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\nimport {evaluatedPropsToName, Type} from \"../../compile/util\"\nimport {AnySchema} from \"../../types\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"patternProperties\",\n type: \"object\",\n schemaType: \"object\",\n code(cxt: KeywordCxt) {\n const {gen, schema, data, parentSchema, it} = cxt\n const {opts} = it\n const patterns = allSchemaProperties(schema)\n const alwaysValidPatterns = patterns.filter((p) =>\n alwaysValidSchema(it, schema[p] as AnySchema)\n )\n\n if (\n patterns.length === 0 ||\n (alwaysValidPatterns.length === patterns.length &&\n (!it.opts.unevaluated || it.props === true))\n ) {\n return\n }\n\n const checkProperties =\n opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties\n const valid = gen.name(\"valid\")\n if (it.props !== true && !(it.props instanceof Name)) {\n it.props = evaluatedPropsToName(gen, it.props)\n }\n const {props} = it\n validatePatternProperties()\n\n function validatePatternProperties(): void {\n for (const pat of patterns) {\n if (checkProperties) checkMatchingProperties(pat)\n if (it.allErrors) {\n validateProperties(pat)\n } else {\n gen.var(valid, true) // TODO var\n validateProperties(pat)\n gen.if(valid)\n }\n }\n }\n\n function checkMatchingProperties(pat: string): void {\n for (const prop in checkProperties) {\n if (new RegExp(pat).test(prop)) {\n checkStrictMode(\n it,\n `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`\n )\n }\n }\n }\n\n function validateProperties(pat: string): void {\n gen.forIn(\"key\", data, (key) => {\n gen.if(_`${usePattern(cxt, pat)}.test(${key})`, () => {\n const alwaysValid = alwaysValidPatterns.includes(pat)\n if (!alwaysValid) {\n cxt.subschema(\n {\n keyword: \"patternProperties\",\n schemaProp: pat,\n dataProp: key,\n dataPropType: Type.Str,\n },\n valid\n )\n }\n\n if (it.opts.unevaluated && props !== true) {\n gen.assign(_`${props}[${key}]`, true)\n } else if (!alwaysValid && !it.allErrors) {\n // can short-circuit if `unevaluatedProperties` is not supported (opts.next === false)\n // or if all properties were evaluated (props === true)\n gen.if(not(valid), () => gen.break())\n }\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nexport type NotKeywordError = ErrorNoParams<\"not\", AnySchema>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"not\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n if (alwaysValidSchema(it, schema)) {\n cxt.fail()\n return\n }\n\n const valid = gen.name(\"valid\")\n cxt.subschema(\n {\n keyword: \"not\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n valid\n )\n\n cxt.failResult(\n valid,\n () => cxt.reset(),\n () => cxt.error()\n )\n },\n error: {message: \"must NOT be valid\"},\n}\n\nexport default def\n","import type {CodeKeywordDefinition, ErrorNoParams, AnySchema} from \"../../types\"\nimport {validateUnion} from \"../code\"\n\nexport type AnyOfError = ErrorNoParams<\"anyOf\", AnySchema[]>\n\nconst def: CodeKeywordDefinition = {\n keyword: \"anyOf\",\n schemaType: \"array\",\n trackErrors: true,\n code: validateUnion,\n error: {message: \"must match a schema in anyOf\"},\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema} from \"../../compile/util\"\nimport {SchemaCxt} from \"../../compile\"\n\nexport type OneOfError = ErrorObject<\n \"oneOf\",\n {passingSchemas: [number, number] | null},\n AnySchema[]\n>\n\nconst error: KeywordErrorDefinition = {\n message: \"must match exactly one schema in oneOf\",\n params: ({params}) => _`{passingSchemas: ${params.passing}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"oneOf\",\n schemaType: \"array\",\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, schema, parentSchema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n if (it.opts.discriminator && parentSchema.discriminator) return\n const schArr: AnySchema[] = schema\n const valid = gen.let(\"valid\", false)\n const passing = gen.let(\"passing\", null)\n const schValid = gen.name(\"_valid\")\n cxt.setParams({passing})\n // TODO possibly fail straight away (with warning or exception) if there are two empty always valid schemas\n\n gen.block(validateOneOf)\n\n cxt.result(\n valid,\n () => cxt.reset(),\n () => cxt.error(true)\n )\n\n function validateOneOf(): void {\n schArr.forEach((sch: AnySchema, i: number) => {\n let schCxt: SchemaCxt | undefined\n if (alwaysValidSchema(it, sch)) {\n gen.var(schValid, true)\n } else {\n schCxt = cxt.subschema(\n {\n keyword: \"oneOf\",\n schemaProp: i,\n compositeRule: true,\n },\n schValid\n )\n }\n\n if (i > 0) {\n gen\n .if(_`${schValid} && ${valid}`)\n .assign(valid, false)\n .assign(passing, _`[${passing}, ${i}]`)\n .else()\n }\n\n gen.if(schValid, () => {\n gen.assign(valid, true)\n gen.assign(passing, i)\n if (schCxt) cxt.mergeEvaluated(schCxt, Name)\n })\n })\n }\n },\n}\n\nexport default def\n","import type {CodeKeywordDefinition, AnySchema} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {alwaysValidSchema} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: \"allOf\",\n schemaType: \"array\",\n code(cxt: KeywordCxt) {\n const {gen, schema, it} = cxt\n /* istanbul ignore if */\n if (!Array.isArray(schema)) throw new Error(\"ajv implementation error\")\n const valid = gen.name(\"valid\")\n schema.forEach((sch: AnySchema, i: number) => {\n if (alwaysValidSchema(it, sch)) return\n const schCxt = cxt.subschema({keyword: \"allOf\", schemaProp: i}, valid)\n cxt.ok(valid)\n cxt.mergeEvaluated(schCxt)\n })\n },\n}\n\nexport default def\n","import type {\n CodeKeywordDefinition,\n ErrorObject,\n KeywordErrorDefinition,\n AnySchema,\n} from \"../../types\"\nimport type {SchemaObjCxt} from \"../../compile\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, not, Name} from \"../../compile/codegen\"\nimport {alwaysValidSchema, checkStrictMode} from \"../../compile/util\"\n\nexport type IfKeywordError = ErrorObject<\"if\", {failingKeyword: string}, AnySchema>\n\nconst error: KeywordErrorDefinition = {\n message: ({params}) => str`must match \"${params.ifClause}\" schema`,\n params: ({params}) => _`{failingKeyword: ${params.ifClause}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"if\",\n schemaType: [\"object\", \"boolean\"],\n trackErrors: true,\n error,\n code(cxt: KeywordCxt) {\n const {gen, parentSchema, it} = cxt\n if (parentSchema.then === undefined && parentSchema.else === undefined) {\n checkStrictMode(it, '\"if\" without \"then\" and \"else\" is ignored')\n }\n const hasThen = hasSchema(it, \"then\")\n const hasElse = hasSchema(it, \"else\")\n if (!hasThen && !hasElse) return\n\n const valid = gen.let(\"valid\", true)\n const schValid = gen.name(\"_valid\")\n validateIf()\n cxt.reset()\n\n if (hasThen && hasElse) {\n const ifClause = gen.let(\"ifClause\")\n cxt.setParams({ifClause})\n gen.if(schValid, validateClause(\"then\", ifClause), validateClause(\"else\", ifClause))\n } else if (hasThen) {\n gen.if(schValid, validateClause(\"then\"))\n } else {\n gen.if(not(schValid), validateClause(\"else\"))\n }\n\n cxt.pass(valid, () => cxt.error(true))\n\n function validateIf(): void {\n const schCxt = cxt.subschema(\n {\n keyword: \"if\",\n compositeRule: true,\n createErrors: false,\n allErrors: false,\n },\n schValid\n )\n cxt.mergeEvaluated(schCxt)\n }\n\n function validateClause(keyword: string, ifClause?: Name): () => void {\n return () => {\n const schCxt = cxt.subschema({keyword}, schValid)\n gen.assign(valid, schValid)\n cxt.mergeValidEvaluated(schCxt, valid)\n if (ifClause) gen.assign(ifClause, _`${keyword}`)\n else cxt.setParams({ifClause: keyword})\n }\n }\n },\n}\n\nfunction hasSchema(it: SchemaObjCxt, keyword: string): boolean {\n const schema = it.schema[keyword]\n return schema !== undefined && !alwaysValidSchema(it, schema)\n}\n\nexport default def\n","import type {CodeKeywordDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {checkStrictMode} from \"../../compile/util\"\n\nconst def: CodeKeywordDefinition = {\n keyword: [\"then\", \"else\"],\n schemaType: [\"object\", \"boolean\"],\n code({keyword, parentSchema, it}: KeywordCxt) {\n if (parentSchema.if === undefined) checkStrictMode(it, `\"${keyword}\" without \"if\" is ignored`)\n },\n}\n\nexport default def\n","import type {ErrorNoParams, Vocabulary} from \"../../types\"\nimport additionalItems, {AdditionalItemsError} from \"./additionalItems\"\nimport prefixItems from \"./prefixItems\"\nimport items from \"./items\"\nimport items2020, {ItemsError} from \"./items2020\"\nimport contains, {ContainsError} from \"./contains\"\nimport dependencies, {DependenciesError} from \"./dependencies\"\nimport propertyNames, {PropertyNamesError} from \"./propertyNames\"\nimport additionalProperties, {AdditionalPropertiesError} from \"./additionalProperties\"\nimport properties from \"./properties\"\nimport patternProperties from \"./patternProperties\"\nimport notKeyword, {NotKeywordError} from \"./not\"\nimport anyOf, {AnyOfError} from \"./anyOf\"\nimport oneOf, {OneOfError} from \"./oneOf\"\nimport allOf from \"./allOf\"\nimport ifKeyword, {IfKeywordError} from \"./if\"\nimport thenElse from \"./thenElse\"\n\nexport default function getApplicator(draft2020 = false): Vocabulary {\n const applicator = [\n // any\n notKeyword,\n anyOf,\n oneOf,\n allOf,\n ifKeyword,\n thenElse,\n // object\n propertyNames,\n additionalProperties,\n dependencies,\n properties,\n patternProperties,\n ]\n // array\n if (draft2020) applicator.push(prefixItems, items2020)\n else applicator.push(additionalItems, items)\n applicator.push(contains)\n return applicator\n}\n\nexport type ApplicatorKeywordError =\n | ErrorNoParams<\"false schema\">\n | AdditionalItemsError\n | ItemsError\n | ContainsError\n | AdditionalPropertiesError\n | DependenciesError\n | IfKeywordError\n | AnyOfError\n | OneOfError\n | NotKeywordError\n | PropertyNamesError\n","import type {\n AddedFormat,\n FormatValidator,\n AsyncFormatValidator,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n ErrorObject,\n} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, str, nil, or, Code, getProperty, regexpCode} from \"../../compile/codegen\"\n\ntype FormatValidate =\n | FormatValidator<string>\n | FormatValidator<number>\n | AsyncFormatValidator<string>\n | AsyncFormatValidator<number>\n | RegExp\n | string\n | true\n\nexport type FormatError = ErrorObject<\"format\", {format: string}, string | {$data: string}>\n\nconst error: KeywordErrorDefinition = {\n message: ({schemaCode}) => str`must match format \"${schemaCode}\"`,\n params: ({schemaCode}) => _`{format: ${schemaCode}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"format\",\n type: [\"number\", \"string\"],\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt: KeywordCxt, ruleType?: string) {\n const {gen, data, $data, schema, schemaCode, it} = cxt\n const {opts, errSchemaPath, schemaEnv, self} = it\n if (!opts.validateFormats) return\n\n if ($data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fDef = gen.const(\"fDef\", _`${fmts}[${schemaCode}]`)\n const fType = gen.let(\"fType\")\n const format = gen.let(\"format\")\n // TODO simplify\n gen.if(\n _`typeof ${fDef} == \"object\" && !(${fDef} instanceof RegExp)`,\n () => gen.assign(fType, _`${fDef}.type || \"string\"`).assign(format, _`${fDef}.validate`),\n () => gen.assign(fType, _`\"string\"`).assign(format, fDef)\n )\n cxt.fail$data(or(unknownFmt(), invalidFmt()))\n\n function unknownFmt(): Code {\n if (opts.strictSchema === false) return nil\n return _`${schemaCode} && !${format}`\n }\n\n function invalidFmt(): Code {\n const callFormat = schemaEnv.$async\n ? _`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))`\n : _`${format}(${data})`\n const validData = _`(typeof ${format} == \"function\" ? ${callFormat} : ${format}.test(${data}))`\n return _`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`\n }\n }\n\n function validateFormat(): void {\n const formatDef: AddedFormat | undefined = self.formats[schema]\n if (!formatDef) {\n unknownFormat()\n return\n }\n if (formatDef === true) return\n const [fmtType, format, fmtRef] = getFormat(formatDef)\n if (fmtType === ruleType) cxt.pass(validCondition())\n\n function unknownFormat(): void {\n if (opts.strictSchema === false) {\n self.logger.warn(unknownMsg())\n return\n }\n throw new Error(unknownMsg())\n\n function unknownMsg(): string {\n return `unknown format \"${schema as string}\" ignored in schema at path \"${errSchemaPath}\"`\n }\n }\n\n function getFormat(fmtDef: AddedFormat): [string, FormatValidate, Code] {\n const code =\n fmtDef instanceof RegExp\n ? regexpCode(fmtDef)\n : opts.code.formats\n ? _`${opts.code.formats}${getProperty(schema)}`\n : undefined\n const fmt = gen.scopeValue(\"formats\", {key: schema, ref: fmtDef, code})\n if (typeof fmtDef == \"object\" && !(fmtDef instanceof RegExp)) {\n return [fmtDef.type || \"string\", fmtDef.validate, _`${fmt}.validate`]\n }\n\n return [\"string\", fmtDef, fmt]\n }\n\n function validCondition(): Code {\n if (typeof formatDef == \"object\" && !(formatDef instanceof RegExp) && formatDef.async) {\n if (!schemaEnv.$async) throw new Error(\"async format in sync schema\")\n return _`await ${fmtRef}(${data})`\n }\n return typeof format == \"function\" ? _`${fmtRef}(${data})` : _`${fmtRef}.test(${data})`\n }\n }\n },\n}\n\nexport default def\n","import type {Vocabulary} from \"../../types\"\nimport formatKeyword from \"./format\"\n\nconst format: Vocabulary = [formatKeyword]\n\nexport default format\n","import type {Vocabulary} from \"../types\"\n\nexport const metadataVocabulary: Vocabulary = [\n \"title\",\n \"description\",\n \"default\",\n \"deprecated\",\n \"readOnly\",\n \"writeOnly\",\n \"examples\",\n]\n\nexport const contentVocabulary: Vocabulary = [\n \"contentMediaType\",\n \"contentEncoding\",\n \"contentSchema\",\n]\n","import type {Vocabulary} from \"../types\"\nimport coreVocabulary from \"./core\"\nimport validationVocabulary from \"./validation\"\nimport getApplicatorVocabulary from \"./applicator\"\nimport formatVocabulary from \"./format\"\nimport {metadataVocabulary, contentVocabulary} from \"./metadata\"\n\nconst draft7Vocabularies: Vocabulary[] = [\n coreVocabulary,\n validationVocabulary,\n getApplicatorVocabulary(),\n formatVocabulary,\n metadataVocabulary,\n contentVocabulary,\n]\n\nexport default draft7Vocabularies\n","import type {ErrorObject} from \"../../types\"\n\nexport enum DiscrError {\n Tag = \"tag\",\n Mapping = \"mapping\",\n}\n\nexport type DiscrErrorObj<E extends DiscrError> = ErrorObject<\n \"discriminator\",\n {error: E; tag: string; tagValue: unknown},\n string\n>\n","import type {CodeKeywordDefinition, AnySchemaObject, KeywordErrorDefinition} from \"../../types\"\nimport type {KeywordCxt} from \"../../compile/validate\"\nimport {_, getProperty, Name} from \"../../compile/codegen\"\nimport {DiscrError, DiscrErrorObj} from \"../discriminator/types\"\nimport {resolveRef, SchemaEnv} from \"../../compile\"\nimport MissingRefError from \"../../compile/ref_error\"\nimport {schemaHasRulesButRef} from \"../../compile/util\"\n\nexport type DiscriminatorError = DiscrErrorObj<DiscrError.Tag> | DiscrErrorObj<DiscrError.Mapping>\n\nconst error: KeywordErrorDefinition = {\n message: ({params: {discrError, tagName}}) =>\n discrError === DiscrError.Tag\n ? `tag \"${tagName}\" must be string`\n : `value of tag \"${tagName}\" must be in oneOf`,\n params: ({params: {discrError, tag, tagName}}) =>\n _`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}`,\n}\n\nconst def: CodeKeywordDefinition = {\n keyword: \"discriminator\",\n type: \"object\",\n schemaType: \"object\",\n error,\n code(cxt: KeywordCxt) {\n const {gen, data, schema, parentSchema, it} = cxt\n const {oneOf} = parentSchema\n if (!it.opts.discriminator) {\n throw new Error(\"discriminator: requires discriminator option\")\n }\n const tagName = schema.propertyName\n if (typeof tagName != \"string\") throw new Error(\"discriminator: requires propertyName\")\n if (schema.mapping) throw new Error(\"discriminator: mapping is not supported\")\n if (!oneOf) throw new Error(\"discriminator: requires oneOf keyword\")\n const valid = gen.let(\"valid\", false)\n const tag = gen.const(\"tag\", _`${data}${getProperty(tagName)}`)\n gen.if(\n _`typeof ${tag} == \"string\"`,\n () => validateMapping(),\n () => cxt.error(false, {discrError: DiscrError.Tag, tag, tagName})\n )\n cxt.ok(valid)\n\n function validateMapping(): void {\n const mapping = getMapping()\n gen.if(false)\n for (const tagValue in mapping) {\n gen.elseIf(_`${tag} === ${tagValue}`)\n gen.assign(valid, applyTagSchema(mapping[tagValue]))\n }\n gen.else()\n cxt.error(false, {discrError: DiscrError.Mapping, tag, tagName})\n gen.endIf()\n }\n\n function applyTagSchema(schemaProp?: number): Name {\n const _valid = gen.name(\"valid\")\n const schCxt = cxt.subschema({keyword: \"oneOf\", schemaProp}, _valid)\n cxt.mergeEvaluated(schCxt, Name)\n return _valid\n }\n\n function getMapping(): {[T in string]?: number} {\n const oneOfMapping: {[T in string]?: number} = {}\n const topRequired = hasRequired(parentSchema)\n let tagRequired = true\n for (let i = 0; i < oneOf.length; i++) {\n let sch = oneOf[i]\n if (sch?.$ref && !schemaHasRulesButRef(sch, it.self.RULES)) {\n const ref = sch.$ref\n sch = resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref)\n if (sch instanceof SchemaEnv) sch = sch.schema\n if (sch === undefined) throw new MissingRefError(it.opts.uriResolver, it.baseId, ref)\n }\n const propSch = sch?.properties?.[tagName]\n if (typeof propSch != \"object\") {\n throw new Error(\n `discriminator: oneOf subschemas (or referenced schemas) must have \"properties/${tagName}\"`\n )\n }\n tagRequired = tagRequired && (topRequired || hasRequired(sch))\n addMappings(propSch, i)\n }\n if (!tagRequired) throw new Error(`discriminator: \"${tagName}\" must be required`)\n return oneOfMapping\n\n function hasRequired({required}: AnySchemaObject): boolean {\n return Array.isArray(required) && required.includes(tagName)\n }\n\n function addMappings(sch: AnySchemaObject, i: number): void {\n if (sch.const) {\n addMapping(sch.const, i)\n } else if (sch.enum) {\n for (const tagValue of sch.enum) {\n addMapping(tagValue, i)\n }\n } else {\n throw new Error(`discriminator: \"properties/${tagName}\" must have \"const\" or \"enum\"`)\n }\n }\n\n function addMapping(tagValue: unknown, i: number): void {\n if (typeof tagValue != \"string\" || tagValue in oneOfMapping) {\n throw new Error(`discriminator: \"${tagName}\" values must be unique strings`)\n }\n oneOfMapping[tagValue] = i\n }\n }\n },\n}\n\nexport default def\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"http://json-schema.org/draft-07/schema#\",\n \"title\": \"Core schema meta-schema\",\n \"definitions\": {\n \"schemaArray\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\"$ref\": \"#\"}\n },\n \"nonNegativeInteger\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"nonNegativeIntegerDefault0\": {\n \"allOf\": [{\"$ref\": \"#/definitions/nonNegativeInteger\"}, {\"default\": 0}]\n },\n \"simpleTypes\": {\n \"enum\": [\"array\", \"boolean\", \"integer\", \"null\", \"number\", \"object\", \"string\"]\n },\n \"stringArray\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"},\n \"uniqueItems\": true,\n \"default\": []\n }\n },\n \"type\": [\"object\", \"boolean\"],\n \"properties\": {\n \"$id\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$schema\": {\n \"type\": \"string\",\n \"format\": \"uri\"\n },\n \"$ref\": {\n \"type\": \"string\",\n \"format\": \"uri-reference\"\n },\n \"$comment\": {\n \"type\": \"string\"\n },\n \"title\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"default\": true,\n \"readOnly\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"examples\": {\n \"type\": \"array\",\n \"items\": true\n },\n \"multipleOf\": {\n \"type\": \"number\",\n \"exclusiveMinimum\": 0\n },\n \"maximum\": {\n \"type\": \"number\"\n },\n \"exclusiveMaximum\": {\n \"type\": \"number\"\n },\n \"minimum\": {\n \"type\": \"number\"\n },\n \"exclusiveMinimum\": {\n \"type\": \"number\"\n },\n \"maxLength\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minLength\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"pattern\": {\n \"type\": \"string\",\n \"format\": \"regex\"\n },\n \"additionalItems\": {\"$ref\": \"#\"},\n \"items\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/schemaArray\"}],\n \"default\": true\n },\n \"maxItems\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minItems\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"uniqueItems\": {\n \"type\": \"boolean\",\n \"default\": false\n },\n \"contains\": {\"$ref\": \"#\"},\n \"maxProperties\": {\"$ref\": \"#/definitions/nonNegativeInteger\"},\n \"minProperties\": {\"$ref\": \"#/definitions/nonNegativeIntegerDefault0\"},\n \"required\": {\"$ref\": \"#/definitions/stringArray\"},\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"definitions\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"properties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"default\": {}\n },\n \"patternProperties\": {\n \"type\": \"object\",\n \"additionalProperties\": {\"$ref\": \"#\"},\n \"propertyNames\": {\"format\": \"regex\"},\n \"default\": {}\n },\n \"dependencies\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"anyOf\": [{\"$ref\": \"#\"}, {\"$ref\": \"#/definitions/stringArray\"}]\n }\n },\n \"propertyNames\": {\"$ref\": \"#\"},\n \"const\": true,\n \"enum\": {\n \"type\": \"array\",\n \"items\": true,\n \"minItems\": 1,\n \"uniqueItems\": true\n },\n \"type\": {\n \"anyOf\": [\n {\"$ref\": \"#/definitions/simpleTypes\"},\n {\n \"type\": \"array\",\n \"items\": {\"$ref\": \"#/definitions/simpleTypes\"},\n \"minItems\": 1,\n \"uniqueItems\": true\n }\n ]\n },\n \"format\": {\"type\": \"string\"},\n \"contentMediaType\": {\"type\": \"string\"},\n \"contentEncoding\": {\"type\": \"string\"},\n \"if\": {\"$ref\": \"#\"},\n \"then\": {\"$ref\": \"#\"},\n \"else\": {\"$ref\": \"#\"},\n \"allOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"anyOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"oneOf\": {\"$ref\": \"#/definitions/schemaArray\"},\n \"not\": {\"$ref\": \"#\"}\n },\n \"default\": true\n}\n","import type {AnySchemaObject} from \"./types\"\nimport AjvCore from \"./core\"\nimport draft7Vocabularies from \"./vocabularies/draft7\"\nimport discriminator from \"./vocabularies/discriminator\"\nimport * as draft7MetaSchema from \"./refs/json-schema-draft-07.json\"\n\nconst META_SUPPORT_DATA = [\"/properties\"]\n\nconst META_SCHEMA_ID = \"http://json-schema.org/draft-07/schema\"\n\nexport class Ajv extends AjvCore {\n _addVocabularies(): void {\n super._addVocabularies()\n draft7Vocabularies.forEach((v) => this.addVocabulary(v))\n if (this.opts.discriminator) this.addKeyword(discriminator)\n }\n\n _addDefaultMetaSchema(): void {\n super._addDefaultMetaSchema()\n if (!this.opts.meta) return\n const metaSchema = this.opts.$data\n ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA)\n : draft7MetaSchema\n this.addMetaSchema(metaSchema, META_SCHEMA_ID, false)\n this.refs[\"http://json-schema.org/schema\"] = META_SCHEMA_ID\n }\n\n defaultMeta(): string | AnySchemaObject | undefined {\n return (this.opts.defaultMeta =\n super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined))\n }\n}\n\nmodule.exports = exports = Ajv\nmodule.exports.Ajv = Ajv\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default Ajv\n\nexport {\n Format,\n FormatDefinition,\n AsyncFormatDefinition,\n KeywordDefinition,\n KeywordErrorDefinition,\n CodeKeywordDefinition,\n MacroKeywordDefinition,\n FuncKeywordDefinition,\n Vocabulary,\n Schema,\n SchemaObject,\n AnySchemaObject,\n AsyncSchema,\n AnySchema,\n ValidateFunction,\n AsyncValidateFunction,\n SchemaValidateFunction,\n ErrorObject,\n ErrorNoParams,\n} from \"./types\"\n\nexport {Plugin, Options, CodeOptions, InstanceOptions, Logger, ErrorsTextOptions} from \"./core\"\nexport {SchemaCxt, SchemaObjCxt} from \"./compile\"\nexport {KeywordCxt} from \"./compile/validate\"\nexport {DefinedError} from \"./vocabularies/errors\"\nexport {JSONType} from \"./compile/rules\"\nexport {JSONSchemaType} from \"./types/json-schema\"\nexport {_, str, stringify, nil, Name, Code, CodeGen, CodeGenOptions} from \"./compile/codegen\"\nexport {default as ValidationError} from \"./runtime/validation_error\"\nexport {default as MissingRefError} from \"./compile/ref_error\"\n","import type {Format, FormatDefinition} from \"ajv\"\nimport type {FormatValidator, FormatCompare} from \"ajv/dist/types\"\n\nexport type FormatMode = \"fast\" | \"full\"\n\nexport type FormatName =\n | \"date\"\n | \"time\"\n | \"date-time\"\n | \"iso-time\"\n | \"iso-date-time\"\n | \"duration\"\n | \"uri\"\n | \"uri-reference\"\n | \"uri-template\"\n | \"url\"\n | \"email\"\n | \"hostname\"\n | \"ipv4\"\n | \"ipv6\"\n | \"regex\"\n | \"uuid\"\n | \"json-pointer\"\n | \"json-pointer-uri-fragment\"\n | \"relative-json-pointer\"\n | \"byte\"\n | \"int32\"\n | \"int64\"\n | \"float\"\n | \"double\"\n | \"password\"\n | \"binary\"\n\nexport type DefinedFormats = {\n [key in FormatName]: Format\n}\n\nfunction fmtDef(\n validate: RegExp | FormatValidator<string>,\n compare: FormatCompare<string>\n): FormatDefinition<string> {\n return {validate, compare}\n}\n\nexport const fullFormats: DefinedFormats = {\n // date: http://tools.ietf.org/html/rfc3339#section-5.6\n date: fmtDef(date, compareDate),\n // date-time: http://tools.ietf.org/html/rfc3339#section-5.6\n time: fmtDef(getTime(true), compareTime),\n \"date-time\": fmtDef(getDateTime(true), compareDateTime),\n \"iso-time\": fmtDef(getTime(), compareIsoTime),\n \"iso-date-time\": fmtDef(getDateTime(), compareIsoDateTime),\n // duration: https://tools.ietf.org/html/rfc3339#appendix-A\n duration: /^P(?!$)((\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?|(\\d+W)?)$/,\n uri,\n \"uri-reference\":\n /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,\n // uri-template: https://tools.ietf.org/html/rfc6570\n \"uri-template\":\n /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i,\n // For the source: https://gist.github.com/dperini/729294\n // For test cases: https://mathiasbynens.be/demo/url-regex\n url: /^(?:https?|ftp):\\/\\/(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)(?:\\.(?:[a-z0-9\\u{00a1}-\\u{ffff}]+-)*[a-z0-9\\u{00a1}-\\u{ffff}]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu,\n email:\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,\n hostname:\n /^(?=.{1,253}\\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\\.?$/i,\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n ipv4: /^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/,\n ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))$/i,\n regex,\n // uuid: http://tools.ietf.org/html/rfc4122\n uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,\n // JSON-pointer: https://tools.ietf.org/html/rfc6901\n // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\n \"json-pointer\": /^(?:\\/(?:[^~/]|~0|~1)*)*$/,\n \"json-pointer-uri-fragment\": /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,\n // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\n \"relative-json-pointer\": /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/,\n // the following formats are used by the openapi specification: https://spec.openapis.org/oas/v3.0.0#data-types\n // byte: https://github.com/miguelmota/is-base64\n byte,\n // signed 32 bit integer\n int32: {type: \"number\", validate: validateInt32},\n // signed 64 bit integer\n int64: {type: \"number\", validate: validateInt64},\n // C-type float\n float: {type: \"number\", validate: validateNumber},\n // C-type double\n double: {type: \"number\", validate: validateNumber},\n // hint to the UI to hide input strings\n password: true,\n // unchecked string payload\n binary: true,\n}\n\nexport const fastFormats: DefinedFormats = {\n ...fullFormats,\n date: fmtDef(/^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d$/, compareDate),\n time: fmtDef(\n /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n compareTime\n ),\n \"date-time\": fmtDef(\n /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\dt(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)$/i,\n compareDateTime\n ),\n \"iso-time\": fmtDef(\n /^(?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n compareIsoTime\n ),\n \"iso-date-time\": fmtDef(\n /^\\d\\d\\d\\d-[0-1]\\d-[0-3]\\d[t\\s](?:[0-2]\\d:[0-5]\\d:[0-5]\\d|23:59:60)(?:\\.\\d+)?(?:z|[+-]\\d\\d(?::?\\d\\d)?)?$/i,\n compareIsoDateTime\n ),\n // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\n uri: /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/)?[^\\s]*$/i,\n \"uri-reference\": /^(?:(?:[a-z][a-z0-9+\\-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i,\n // email (sources from jsen validator):\n // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'wilful violation')\n email:\n /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,\n}\n\nexport const formatNames = Object.keys(fullFormats) as FormatName[]\n\nfunction isLeapYear(year: number): boolean {\n // https://tools.ietf.org/html/rfc3339#appendix-C\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)\n}\n\nconst DATE = /^(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)$/\nconst DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction date(str: string): boolean {\n // full-date from http://tools.ietf.org/html/rfc3339#section-5.6\n const matches: string[] | null = DATE.exec(str)\n if (!matches) return false\n const year: number = +matches[1]\n const month: number = +matches[2]\n const day: number = +matches[3]\n return (\n month >= 1 &&\n month <= 12 &&\n day >= 1 &&\n day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month])\n )\n}\n\nfunction compareDate(d1: string, d2: string): number | undefined {\n if (!(d1 && d2)) return undefined\n if (d1 > d2) return 1\n if (d1 < d2) return -1\n return 0\n}\n\nconst TIME = /^(\\d\\d):(\\d\\d):(\\d\\d(?:\\.\\d+)?)(z|([+-])(\\d\\d)(?::?(\\d\\d))?)?$/i\n\nfunction getTime(strictTimeZone?: boolean): (str: string) => boolean {\n return function time(str: string): boolean {\n const matches: string[] | null = TIME.exec(str)\n if (!matches) return false\n const hr: number = +matches[1]\n const min: number = +matches[2]\n const sec: number = +matches[3]\n const tz: string | undefined = matches[4]\n const tzSign: number = matches[5] === \"-\" ? -1 : 1\n const tzH: number = +(matches[6] || 0)\n const tzM: number = +(matches[7] || 0)\n if (tzH > 23 || tzM > 59 || (strictTimeZone && !tz)) return false\n if (hr <= 23 && min <= 59 && sec < 60) return true\n // leap second\n const utcMin = min - tzM * tzSign\n const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0)\n return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61\n }\n}\n\nfunction compareTime(s1: string, s2: string): number | undefined {\n if (!(s1 && s2)) return undefined\n const t1 = new Date(\"2020-01-01T\" + s1).valueOf()\n const t2 = new Date(\"2020-01-01T\" + s2).valueOf()\n if (!(t1 && t2)) return undefined\n return t1 - t2\n}\n\nfunction compareIsoTime(t1: string, t2: string): number | undefined {\n if (!(t1 && t2)) return undefined\n const a1 = TIME.exec(t1)\n const a2 = TIME.exec(t2)\n if (!(a1 && a2)) return undefined\n t1 = a1[1] + a1[2] + a1[3]\n t2 = a2[1] + a2[2] + a2[3]\n if (t1 > t2) return 1\n if (t1 < t2) return -1\n return 0\n}\n\nconst DATE_TIME_SEPARATOR = /t|\\s/i\nfunction getDateTime(strictTimeZone?: boolean): (str: string) => boolean {\n const time = getTime(strictTimeZone)\n\n return function date_time(str: string): boolean {\n // http://tools.ietf.org/html/rfc3339#section-5.6\n const dateTime: string[] = str.split(DATE_TIME_SEPARATOR)\n return dateTime.length === 2 && date(dateTime[0]) && time(dateTime[1])\n }\n}\n\nfunction compareDateTime(dt1: string, dt2: string): number | undefined {\n if (!(dt1 && dt2)) return undefined\n const d1 = new Date(dt1).valueOf()\n const d2 = new Date(dt2).valueOf()\n if (!(d1 && d2)) return undefined\n return d1 - d2\n}\n\nfunction compareIsoDateTime(dt1: string, dt2: string): number | undefined {\n if (!(dt1 && dt2)) return undefined\n const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR)\n const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR)\n const res = compareDate(d1, d2)\n if (res === undefined) return undefined\n return res || compareTime(t1, t2)\n}\n\nconst NOT_URI_FRAGMENT = /\\/|:/\nconst URI =\n /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i\n\nfunction uri(str: string): boolean {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return NOT_URI_FRAGMENT.test(str) && URI.test(str)\n}\n\nconst BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm\n\nfunction byte(str: string): boolean {\n BYTE.lastIndex = 0\n return BYTE.test(str)\n}\n\nconst MIN_INT32 = -(2 ** 31)\nconst MAX_INT32 = 2 ** 31 - 1\n\nfunction validateInt32(value: number): boolean {\n return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32\n}\n\nfunction validateInt64(value: number): boolean {\n // JSON and javascript max Int is 2**53, so any int that passes isInteger is valid for Int64\n return Number.isInteger(value)\n}\n\nfunction validateNumber(): boolean {\n return true\n}\n\nconst Z_ANCHOR = /[^\\\\]\\\\Z/\nfunction regex(str: string): boolean {\n if (Z_ANCHOR.test(str)) return false\n try {\n new RegExp(str)\n return true\n } catch (e) {\n return false\n }\n}\n","import type Ajv from \"ajv\"\nimport type {\n Plugin,\n CodeKeywordDefinition,\n KeywordErrorDefinition,\n Code,\n Name,\n ErrorObject,\n} from \"ajv\"\nimport type {AddedFormat} from \"ajv/dist/types\"\nimport type {Rule} from \"ajv/dist/compile/rules\"\nimport {KeywordCxt} from \"ajv\"\nimport {_, str, or, getProperty, operators} from \"ajv/dist/compile/codegen\"\n\ntype Kwd = \"formatMaximum\" | \"formatMinimum\" | \"formatExclusiveMaximum\" | \"formatExclusiveMinimum\"\n\ntype Comparison = \"<=\" | \">=\" | \"<\" | \">\"\n\nconst ops = operators\n\nconst KWDs: {[K in Kwd]: {okStr: Comparison; ok: Code; fail: Code}} = {\n formatMaximum: {okStr: \"<=\", ok: ops.LTE, fail: ops.GT},\n formatMinimum: {okStr: \">=\", ok: ops.GTE, fail: ops.LT},\n formatExclusiveMaximum: {okStr: \"<\", ok: ops.LT, fail: ops.GTE},\n formatExclusiveMinimum: {okStr: \">\", ok: ops.GT, fail: ops.LTE},\n}\n\nexport type LimitFormatError = ErrorObject<Kwd, {limit: string; comparison: Comparison}>\n\nconst error: KeywordErrorDefinition = {\n message: ({keyword, schemaCode}) => str`should be ${KWDs[keyword as Kwd].okStr} ${schemaCode}`,\n params: ({keyword, schemaCode}) =>\n _`{comparison: ${KWDs[keyword as Kwd].okStr}, limit: ${schemaCode}}`,\n}\n\nexport const formatLimitDefinition: CodeKeywordDefinition = {\n keyword: Object.keys(KWDs),\n type: \"string\",\n schemaType: \"string\",\n $data: true,\n error,\n code(cxt) {\n const {gen, data, schemaCode, keyword, it} = cxt\n const {opts, self} = it\n if (!opts.validateFormats) return\n\n const fCxt = new KeywordCxt(it, (self.RULES.all.format as Rule).definition, \"format\")\n if (fCxt.$data) validate$DataFormat()\n else validateFormat()\n\n function validate$DataFormat(): void {\n const fmts = gen.scopeValue(\"formats\", {\n ref: self.formats,\n code: opts.code.formats,\n })\n const fmt = gen.const(\"fmt\", _`${fmts}[${fCxt.schemaCode}]`)\n cxt.fail$data(\n or(\n _`typeof ${fmt} != \"object\"`,\n _`${fmt} instanceof RegExp`,\n _`typeof ${fmt}.compare != \"function\"`,\n compareCode(fmt)\n )\n )\n }\n\n function validateFormat(): void {\n const format = fCxt.schema as string\n const fmtDef: AddedFormat | undefined = self.formats[format]\n if (!fmtDef || fmtDef === true) return\n if (\n typeof fmtDef != \"object\" ||\n fmtDef instanceof RegExp ||\n typeof fmtDef.compare != \"function\"\n ) {\n throw new Error(`\"${keyword}\": format \"${format}\" does not define \"compare\" function`)\n }\n const fmt = gen.scopeValue(\"formats\", {\n key: format,\n ref: fmtDef,\n code: opts.code.formats ? _`${opts.code.formats}${getProperty(format)}` : undefined,\n })\n\n cxt.fail$data(compareCode(fmt))\n }\n\n function compareCode(fmt: Name): Code {\n return _`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword as Kwd].fail} 0`\n }\n },\n dependencies: [\"format\"],\n}\n\nconst formatLimitPlugin: Plugin<undefined> = (ajv: Ajv): Ajv => {\n ajv.addKeyword(formatLimitDefinition)\n return ajv\n}\n\nexport default formatLimitPlugin\n","import {\n DefinedFormats,\n FormatMode,\n FormatName,\n formatNames,\n fastFormats,\n fullFormats,\n} from \"./formats\"\nimport formatLimit from \"./limit\"\nimport type Ajv from \"ajv\"\nimport type {Plugin, Format} from \"ajv\"\nimport {_, Name} from \"ajv/dist/compile/codegen\"\n\nexport {FormatMode, FormatName} from \"./formats\"\nexport {LimitFormatError} from \"./limit\"\nexport interface FormatOptions {\n mode?: FormatMode\n formats?: FormatName[]\n keywords?: boolean\n}\n\nexport type FormatsPluginOptions = FormatName[] | FormatOptions\n\nexport interface FormatsPlugin extends Plugin<FormatsPluginOptions> {\n get: (format: FormatName, mode?: FormatMode) => Format\n}\n\nconst fullName = new Name(\"fullFormats\")\nconst fastName = new Name(\"fastFormats\")\n\nconst formatsPlugin: FormatsPlugin = (\n ajv: Ajv,\n opts: FormatsPluginOptions = {keywords: true}\n): Ajv => {\n if (Array.isArray(opts)) {\n addFormats(ajv, opts, fullFormats, fullName)\n return ajv\n }\n const [formats, exportName] =\n opts.mode === \"fast\" ? [fastFormats, fastName] : [fullFormats, fullName]\n const list = opts.formats || formatNames\n addFormats(ajv, list, formats, exportName)\n if (opts.keywords) formatLimit(ajv)\n return ajv\n}\n\nformatsPlugin.get = (name: FormatName, mode: FormatMode = \"full\"): Format => {\n const formats = mode === \"fast\" ? fastFormats : fullFormats\n const f = formats[name]\n if (!f) throw new Error(`Unknown format \"${name}\"`)\n return f\n}\n\nfunction addFormats(ajv: Ajv, list: FormatName[], fs: DefinedFormats, exportName: Name): void {\n ajv.opts.code.formats ??= _`require(\"ajv-formats/dist/formats\").${exportName}`\n for (const f of list) ajv.addFormat(f, fs[f])\n}\n\nmodule.exports = exports = formatsPlugin\nObject.defineProperty(exports, \"__esModule\", {value: true})\n\nexport default formatsPlugin\n","// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2, constants as h2constants } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n constructor(message, options) {\n super(message, options);\n this.name = \"RequestError\";\n }\n};\nvar toRequestError = (e) => {\n if (e instanceof RequestError) {\n return e;\n }\n return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n constructor(input, options) {\n if (typeof input === \"object\" && getRequestCache in input) {\n input = input[getRequestCache]();\n }\n if (typeof options?.body?.getReader !== \"undefined\") {\n ;\n options.duplex ??= \"half\";\n }\n super(input, options);\n }\n};\nvar newHeadersFromIncoming = (incoming) => {\n const headerRecord = [];\n const rawHeaders = incoming.rawHeaders;\n for (let i = 0; i < rawHeaders.length; i += 2) {\n const { [i]: key, [i + 1]: value } = rawHeaders;\n if (key.charCodeAt(0) !== /*:*/\n 58) {\n headerRecord.push([key, value]);\n }\n }\n return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n const init = {\n method,\n headers,\n signal: abortController.signal\n };\n if (method === \"TRACE\") {\n init.method = \"GET\";\n const req = new Request(url, init);\n Object.defineProperty(req, \"method\", {\n get() {\n return \"TRACE\";\n }\n });\n return req;\n }\n if (!(method === \"GET\" || method === \"HEAD\")) {\n if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n init.body = new ReadableStream({\n start(controller) {\n controller.enqueue(incoming.rawBody);\n controller.close();\n }\n });\n } else if (incoming[wrapBodyStream]) {\n let reader;\n init.body = new ReadableStream({\n async pull(controller) {\n try {\n reader ||= Readable.toWeb(incoming).getReader();\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n }\n });\n } else {\n init.body = Readable.toWeb(incoming);\n }\n }\n return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n get method() {\n return this[incomingKey].method || \"GET\";\n },\n get url() {\n return this[urlKey];\n },\n get headers() {\n return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n },\n [getAbortController]() {\n this[getRequestCache]();\n return this[abortControllerKey];\n },\n [getRequestCache]() {\n this[abortControllerKey] ||= new AbortController();\n return this[requestCache] ||= newRequestFromIncoming(\n this.method,\n this[urlKey],\n this.headers,\n this[incomingKey],\n this[abortControllerKey]\n );\n }\n};\n[\n \"body\",\n \"bodyUsed\",\n \"cache\",\n \"credentials\",\n \"destination\",\n \"integrity\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"signal\",\n \"keepalive\"\n].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n get() {\n return this[getRequestCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n value: function() {\n return this[getRequestCache]()[k]();\n }\n });\n});\nObject.defineProperty(requestPrototype, Symbol.for(\"nodejs.util.inspect.custom\"), {\n value: function(depth, options, inspectFn) {\n const props = {\n method: this.method,\n url: this.url,\n headers: this.headers,\n nativeRequest: this[requestCache]\n };\n return `Request (lightweight) ${inspectFn(props, { ...options, depth: depth == null ? null : depth - 1 })}`;\n }\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n const req = Object.create(requestPrototype);\n req[incomingKey] = incoming;\n const incomingUrl = incoming.url || \"\";\n if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n if (incoming instanceof Http2ServerRequest) {\n throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n }\n try {\n const url2 = new URL(incomingUrl);\n req[urlKey] = url2.href;\n } catch (e) {\n throw new RequestError(\"Invalid absolute URL\", { cause: e });\n }\n return req;\n }\n const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n if (!host) {\n throw new RequestError(\"Missing host header\");\n }\n let scheme;\n if (incoming instanceof Http2ServerRequest) {\n scheme = incoming.scheme;\n if (!(scheme === \"http\" || scheme === \"https\")) {\n throw new RequestError(\"Unsupported scheme\");\n }\n } else {\n scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n }\n const url = new URL(`${scheme}://${host}${incomingUrl}`);\n if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n throw new RequestError(\"Invalid host header\");\n }\n req[urlKey] = url.href;\n return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n #body;\n #init;\n [getResponseCache]() {\n delete this[cacheKey];\n return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n }\n constructor(body, init) {\n let headers;\n this.#body = body;\n if (init instanceof _Response) {\n const cachedGlobalResponse = init[responseCache];\n if (cachedGlobalResponse) {\n this.#init = cachedGlobalResponse;\n this[getResponseCache]();\n return;\n } else {\n this.#init = init.#init;\n headers = new Headers(init.#init.headers);\n }\n } else {\n this.#init = init;\n }\n if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n ;\n this[cacheKey] = [init?.status || 200, body, headers || init?.headers];\n }\n }\n get headers() {\n const cache = this[cacheKey];\n if (cache) {\n if (!(cache[2] instanceof Headers)) {\n cache[2] = new Headers(\n cache[2] || { \"content-type\": \"text/plain; charset=UTF-8\" }\n );\n }\n return cache[2];\n }\n return this[getResponseCache]().headers;\n }\n get status() {\n return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n }\n get ok() {\n const status = this.status;\n return status >= 200 && status < 300;\n }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n get() {\n return this[getResponseCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n value: function() {\n return this[getResponseCache]()[k]();\n }\n });\n});\nObject.defineProperty(Response2.prototype, Symbol.for(\"nodejs.util.inspect.custom\"), {\n value: function(depth, options, inspectFn) {\n const props = {\n status: this.status,\n headers: this.headers,\n ok: this.ok,\n nativeResponse: this[responseCache]\n };\n return `Response (lightweight) ${inspectFn(props, { ...options, depth: depth == null ? null : depth - 1 })}`;\n }\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n const cancel = (error) => {\n reader.cancel(error).catch(() => {\n });\n };\n writable.on(\"close\", cancel);\n writable.on(\"error\", cancel);\n (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n return reader.closed.finally(() => {\n writable.off(\"close\", cancel);\n writable.off(\"error\", cancel);\n });\n function handleStreamError(error) {\n if (error) {\n writable.destroy(error);\n }\n }\n function onDrain() {\n reader.read().then(flow, handleStreamError);\n }\n function flow({ done, value }) {\n try {\n if (done) {\n writable.end();\n } else if (!writable.write(value)) {\n writable.once(\"drain\", onDrain);\n } else {\n return reader.read().then(flow, handleStreamError);\n }\n } catch (e) {\n handleStreamError(e);\n }\n }\n}\nfunction writeFromReadableStream(stream, writable) {\n if (stream.locked) {\n throw new TypeError(\"ReadableStream is locked.\");\n } else if (writable.destroyed) {\n return;\n }\n return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n const res = {};\n if (!(headers instanceof Headers)) {\n headers = new Headers(headers ?? void 0);\n }\n const cookies = [];\n for (const [k, v] of headers) {\n if (k === \"set-cookie\") {\n cookies.push(v);\n } else {\n res[k] = v;\n }\n }\n if (cookies.length > 0) {\n res[\"set-cookie\"] = cookies;\n }\n res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nif (typeof global.crypto === \"undefined\") {\n global.crypto = crypto;\n}\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar incomingDraining = Symbol(\"incomingDraining\");\nvar DRAIN_TIMEOUT_MS = 500;\nvar MAX_DRAIN_BYTES = 64 * 1024 * 1024;\nvar drainIncoming = (incoming) => {\n const incomingWithDrainState = incoming;\n if (incoming.destroyed || incomingWithDrainState[incomingDraining]) {\n return;\n }\n incomingWithDrainState[incomingDraining] = true;\n if (incoming instanceof Http2ServerRequest2) {\n try {\n ;\n incoming.stream?.close?.(h2constants.NGHTTP2_NO_ERROR);\n } catch {\n }\n return;\n }\n let bytesRead = 0;\n const cleanup = () => {\n clearTimeout(timer);\n incoming.off(\"data\", onData);\n incoming.off(\"end\", cleanup);\n incoming.off(\"error\", cleanup);\n };\n const forceClose = () => {\n cleanup();\n const socket = incoming.socket;\n if (socket && !socket.destroyed) {\n socket.destroySoon();\n }\n };\n const timer = setTimeout(forceClose, DRAIN_TIMEOUT_MS);\n timer.unref?.();\n const onData = (chunk) => {\n bytesRead += chunk.length;\n if (bytesRead > MAX_DRAIN_BYTES) {\n forceClose();\n }\n };\n incoming.on(\"data\", onData);\n incoming.on(\"end\", cleanup);\n incoming.on(\"error\", cleanup);\n incoming.resume();\n};\nvar handleRequestError = () => new Response(null, {\n status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n console.info(\"The user aborted a request.\");\n } else {\n console.error(e);\n if (!outgoing.headersSent) {\n outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n outgoing.end(`Error: ${err.message}`);\n outgoing.destroy(err);\n }\n};\nvar flushHeaders = (outgoing) => {\n if (\"flushHeaders\" in outgoing && outgoing.writable) {\n outgoing.flushHeaders();\n }\n};\nvar responseViaCache = async (res, outgoing) => {\n let [status, body, header] = res[cacheKey];\n let hasContentLength = false;\n if (!header) {\n header = { \"content-type\": \"text/plain; charset=UTF-8\" };\n } else if (header instanceof Headers) {\n hasContentLength = header.has(\"content-length\");\n header = buildOutgoingHttpHeaders(header);\n } else if (Array.isArray(header)) {\n const headerObj = new Headers(header);\n hasContentLength = headerObj.has(\"content-length\");\n header = buildOutgoingHttpHeaders(headerObj);\n } else {\n for (const key in header) {\n if (key.length === 14 && key.toLowerCase() === \"content-length\") {\n hasContentLength = true;\n break;\n }\n }\n }\n if (!hasContentLength) {\n if (typeof body === \"string\") {\n header[\"Content-Length\"] = Buffer.byteLength(body);\n } else if (body instanceof Uint8Array) {\n header[\"Content-Length\"] = body.byteLength;\n } else if (body instanceof Blob) {\n header[\"Content-Length\"] = body.size;\n }\n }\n outgoing.writeHead(status, header);\n if (typeof body === \"string\" || body instanceof Uint8Array) {\n outgoing.end(body);\n } else if (body instanceof Blob) {\n outgoing.end(new Uint8Array(await body.arrayBuffer()));\n } else {\n flushHeaders(outgoing);\n await writeFromReadableStream(body, outgoing)?.catch(\n (e) => handleResponseError(e, outgoing)\n );\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n if (isPromise(res)) {\n if (options.errorHandler) {\n try {\n res = await res;\n } catch (err) {\n const errRes = await options.errorHandler(err);\n if (!errRes) {\n return;\n }\n res = errRes;\n }\n } else {\n res = await res.catch(handleFetchError);\n }\n }\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n if (res.body) {\n const reader = res.body.getReader();\n const values = [];\n let done = false;\n let currentReadPromise = void 0;\n if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n let maxReadCount = 2;\n for (let i = 0; i < maxReadCount; i++) {\n currentReadPromise ||= reader.read();\n const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n console.error(e);\n done = true;\n });\n if (!chunk) {\n if (i === 1) {\n await new Promise((resolve) => setTimeout(resolve));\n maxReadCount = 3;\n continue;\n }\n break;\n }\n currentReadPromise = void 0;\n if (chunk.value) {\n values.push(chunk.value);\n }\n if (chunk.done) {\n done = true;\n break;\n }\n }\n if (done && !(\"content-length\" in resHeaderRecord)) {\n resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n }\n }\n outgoing.writeHead(res.status, resHeaderRecord);\n values.forEach((value) => {\n ;\n outgoing.write(value);\n });\n if (done) {\n outgoing.end();\n } else {\n if (values.length === 0) {\n flushHeaders(outgoing);\n }\n await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n }\n } else if (resHeaderRecord[X_ALREADY_SENT]) {\n } else {\n outgoing.writeHead(res.status, resHeaderRecord);\n outgoing.end();\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n Object.defineProperty(global, \"Request\", {\n value: Request\n });\n Object.defineProperty(global, \"Response\", {\n value: Response2\n });\n }\n return async (incoming, outgoing) => {\n let res, req;\n try {\n req = newRequest(incoming, options.hostname);\n let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n if (!incomingEnded) {\n ;\n incoming[wrapBodyStream] = true;\n incoming.on(\"end\", () => {\n incomingEnded = true;\n });\n if (incoming instanceof Http2ServerRequest2) {\n ;\n outgoing[outgoingEnded] = () => {\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n drainIncoming(incoming);\n });\n }\n });\n }\n };\n }\n outgoing.on(\"finish\", () => {\n if (!incomingEnded) {\n drainIncoming(incoming);\n }\n });\n }\n outgoing.on(\"close\", () => {\n const abortController = req[abortControllerKey];\n if (abortController) {\n if (incoming.errored) {\n req[abortControllerKey].abort(incoming.errored.toString());\n } else if (!outgoing.writableFinished) {\n req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n }\n }\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n drainIncoming(incoming);\n });\n }\n });\n }\n });\n res = fetchCallback(req, { incoming, outgoing });\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n } catch (e) {\n if (!res) {\n if (options.errorHandler) {\n res = await options.errorHandler(req ? e : toRequestError(e));\n if (!res) {\n return;\n }\n } else if (!req) {\n res = handleRequestError();\n } else {\n res = handleFetchError(e);\n }\n } else {\n return handleResponseError(e, outgoing);\n }\n }\n try {\n return await responseViaResponseObject(res, outgoing, options);\n } catch (e) {\n return handleResponseError(e, outgoing);\n }\n };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n const fetchCallback = options.fetch;\n const requestListener = getRequestListener(fetchCallback, {\n hostname: options.hostname,\n overrideGlobalObjects: options.overrideGlobalObjects,\n autoCleanupIncoming: options.autoCleanupIncoming\n });\n const createServer = options.createServer || createServerHTTP;\n const server = createServer(options.serverOptions || {}, requestListener);\n return server;\n};\nvar serve = (options, listeningListener) => {\n const server = createAdaptorServer(options);\n server.listen(options?.port ?? 3e3, options.hostname, () => {\n const serverInfo = server.address();\n listeningListener && listeningListener(serverInfo);\n });\n return server;\n};\nexport {\n RequestError,\n createAdaptorServer,\n getRequestListener,\n serve\n};\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n var _a;\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod ?? {},\n enumerable: false,\n });\n (_a = inst._zod).traits ?? (_a.traits = new Set());\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n for (const k in _.prototype) {\n if (!(k in inst))\n Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n }\n inst._zod.constr = _;\n inst._zod.def = def;\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 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();\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 stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\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}\nexport function defineLazy(object, key, getter) {\n const set = false;\n Object.defineProperty(object, key, {\n get() {\n if (!set) {\n const value = getter();\n object[key] = value;\n return value;\n }\n throw new Error(\"cached value already set\");\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 assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\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 const captureStackTrace = Error.captureStackTrace\n ? Error.captureStackTrace\n : (..._args) => { };\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\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 // 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 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 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 newShape = {};\n const currDef = 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 // pick key\n newShape[key] = currDef.shape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function omit(schema, mask) {\n const newShape = { ...schema._zod.def.shape };\n const currDef = 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 return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\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 def = {\n ...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 checks: [], // delete existing checks\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n return clone(a, {\n ...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 catchall: b._zod.def.catchall,\n checks: [], // delete existing checks\n });\n}\nexport function partial(Class, schema, mask) {\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 return clone(schema, {\n ...schema._zod.def,\n shape,\n checks: [],\n });\n}\nexport function required(Class, schema, mask) {\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 return clone(schema, {\n ...schema._zod.def,\n shape,\n // optional: [],\n checks: [],\n });\n}\nexport function aborted(x, startIndex = 0) {\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true)\n return true;\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 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 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// 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 Object.defineProperty(inst, \"message\", {\n get() {\n return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n },\n enumerable: true,\n // configurable: false,\n });\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) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\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) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\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 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);\n","export 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 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)$/;\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 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\nexport const _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})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\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 =\n// /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\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)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\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)\n opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\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+)?/i;\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","// 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: 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: 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 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 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 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 inst,\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 inst,\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 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 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 });\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: 0,\n patch: 0,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { 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 //\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 inst._zod.run = (payload, ctx) => {\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 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 const orig = payload.value;\n const url = new URL(orig);\n const href = url.href;\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: regexes.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 // payload.value = url.href;\n if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n payload.value = href.slice(0, -1);\n }\n else {\n payload.value = href;\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.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv4`;\n });\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.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv6`;\n });\n inst._zod.check = (payload) => {\n try {\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 $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 [address, prefix] = payload.value.split(\"/\");\n try {\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 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 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.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64\";\n });\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.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64url\";\n });\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 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(\"$ZodNumber\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checksp\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(\"$ZodBigInt\", (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 handleObjectResult(result, final, key) {\n // if(isOptional)\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n if (result.issues.length) {\n // validation failed against value schema\n if (input[key] === undefined) {\n // if input was undefined, ignore the error\n if (key in input) {\n final.value[key] = undefined;\n }\n else {\n final.value[key] = result.value;\n }\n }\n else {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n }\n else if (result.value === undefined) {\n // validation returned `undefined`\n if (key in input)\n final.value[key] = undefined;\n }\n else {\n // non-undefined value\n final.value[key] = result.value;\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 _normalized = util.cached(() => {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!(def.shape[k] instanceof $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 shape: def.shape,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n });\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 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 if (normalized.optionalKeys.has(key)) {\n const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n const k = util.esc(key);\n doc.write(`\n if (${id}.issues.length) {\n if (input[${k}] === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n payload.issues = payload.issues.concat(\n ${id}.issues.map((iss) => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}],\n }))\n );\n }\n } else if (${id}.value === undefined) {\n if (${k} in input) newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n `);\n }\n else {\n const id = ids[key];\n // const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n doc.write(`\n if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n })));`);\n doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\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 const proms = [];\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 }\n else {\n payload.value = {};\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n // do not add omitted optional keys\n // if (!(key in input)) {\n // if (optionalKeys.has(key)) continue;\n // payload.issues.push({\n // code: \"invalid_type\",\n // path: [key],\n // expected: \"nonoptional\",\n // note: `Missing required key: \"${key}\"`,\n // input,\n // inst,\n // });\n // }\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n if (r instanceof Promise) {\n proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n }\n else if (isOptional) {\n handleOptionalObjectResult(r, payload, key, input);\n }\n else {\n handleObjectResult(r, payload, key);\n }\n }\n }\n if (!catchall) {\n // return payload;\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n const unrecognized = [];\n // iterate over input keys\n const keySet = value.keySet;\n const _catchall = catchall._zod;\n const t = _catchall.def.type;\n for (const key of Object.keys(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) => handleObjectResult(r, payload, key)));\n }\n else {\n handleObjectResult(r, payload, key);\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 };\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 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 inst._zod.parse = (payload, ctx) => {\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});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\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 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 if (left.issues.length) {\n result.issues.push(...left.issues);\n }\n if (right.issues.length) {\n result.issues.push(...right.issues);\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 const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\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 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 input,\n inst,\n origin: \"array\",\n ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\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 if (def.keyType._zod.values) {\n const values = def.keyType._zod.values;\n payload.value = {};\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\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 (!values.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 const 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 if (keyResult.issues.length) {\n payload.issues.push({\n origin: \"record\",\n code: \"invalid_key\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n payload.value[keyResult.value] = keyResult.value;\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 origin: \"map\",\n code: \"invalid_key\",\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 inst._zod.values = new Set(values);\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 (inst._zod.values.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 inst._zod.values = new Set(def.values);\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (inst._zod.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 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 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});\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 return def.innerType._zod.run(payload, ctx);\n }\n if (payload.value === undefined) {\n return payload;\n }\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 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 (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault always returns the default value immediately.\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 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 (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 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 inst._zod.optin = \"optional\";\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 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 inst._zod.parse = (payload, ctx) => {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def, ctx));\n }\n return handlePipeResult(left, def, ctx);\n };\n});\nfunction handlePipeResult(left, def, ctx) {\n if (util.aborted(left)) {\n return left;\n }\n return def.out._zod.run({ value: left.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 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 (part instanceof $ZodType) {\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: \"template_literal\",\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: \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\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 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);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","import * as util from \"../core/util.js\";\nexport const 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 (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) {\n return data.constructor.name;\n }\n }\n }\n return t;\n};\nconst error = () => {\n const Sizable = {\n string: { unit: \"characters\", verb: \"to have\" },\n file: { unit: \"bytes\", verb: \"to have\" },\n array: { unit: \"items\", verb: \"to have\" },\n set: { unit: \"items\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const Nouns = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\":\n return `Invalid input: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${Nouns[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Invalid key in ${issue.origin}`;\n case \"invalid_union\":\n return \"Invalid input\";\n case \"invalid_element\":\n return `Invalid value in ${issue.origin}`;\n default:\n return `Invalid input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new Map();\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 if (this._idmap.has(meta.id)) {\n throw new Error(`ID ${meta.id} already exists in the registry`);\n }\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new Map();\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 return { ...pm, ...this._map.get(schema) };\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}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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}\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};\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}\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}\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}\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}\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\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}\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}\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}\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}\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}\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\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}\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}\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\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}\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, };\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}\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, };\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\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}\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\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}\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\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}\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}\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}\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\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}\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\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>;\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}\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\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/** @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}\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}\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\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// export function _refine<T>(\n// Class: util.SchemaClass<schemas.$ZodCustom>,\n// fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n// _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n// return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\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}\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 _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n const tx = new _Transform({\n type: \"transform\",\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: tx,\n });\n return {};\n }\n },\n error: params.error,\n });\n // params.error;\n const innerPipe = new _Pipe({\n type: \"pipe\",\n in: new _String({ type: \"string\", error: params.error }),\n out: tx,\n error: params.error,\n });\n const outerPipe = new _Pipe({\n type: \"pipe\",\n in: innerPipe,\n out: new _Boolean({\n type: \"boolean\",\n error: params.error,\n }),\n error: params.error,\n });\n return outerPipe;\n}\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 { $ZodRegistry, globalRegistry } from \"./registries.js\";\nimport { getEnumValues } from \"./util.js\";\nexport class JSONSchemaGenerator {\n constructor(params) {\n this.counter = 0;\n this.metadataRegistry = params?.metadata ?? globalRegistry;\n this.target = params?.target ?? \"draft-2020-12\";\n this.unrepresentable = params?.unrepresentable ?? \"throw\";\n this.override = params?.override ?? (() => { });\n this.io = params?.io ?? \"output\";\n this.seen = new Map();\n }\n process(schema, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n const formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n };\n // check for schema in seens\n const seen = this.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 this.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 const parent = schema._zod.parent;\n if (parent) {\n // schema was cloned from another schema\n result.ref = parent;\n this.process(parent, params);\n this.seen.get(parent).isParent = true;\n }\n else {\n const _json = result.schema;\n switch (def.type) {\n case \"string\": {\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 }\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 result.schema.allOf = [\n ...regexes.map((regex) => ({\n ...(this.target === \"draft-7\" ? { type: \"string\" } : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n break;\n }\n case \"number\": {\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 json.exclusiveMinimum = exclusiveMinimum;\n if (typeof minimum === \"number\") {\n json.minimum = minimum;\n if (typeof exclusiveMinimum === \"number\") {\n if (exclusiveMinimum >= minimum)\n delete json.minimum;\n else\n delete json.exclusiveMinimum;\n }\n }\n if (typeof exclusiveMaximum === \"number\")\n json.exclusiveMaximum = exclusiveMaximum;\n if (typeof maximum === \"number\") {\n json.maximum = maximum;\n if (typeof exclusiveMaximum === \"number\") {\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 break;\n }\n case \"boolean\": {\n const json = _json;\n json.type = \"boolean\";\n break;\n }\n case \"bigint\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"symbol\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"null\": {\n _json.type = \"null\";\n break;\n }\n case \"any\": {\n break;\n }\n case \"unknown\": {\n break;\n }\n case \"undefined\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"void\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"never\": {\n _json.not = {};\n break;\n }\n case \"date\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"array\": {\n const json = _json;\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 = this.process(def.element, { ...params, path: [...params.path, \"items\"] });\n break;\n }\n case \"object\": {\n const json = _json;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape; // params.shapeCache.get(schema)!;\n for (const key in shape) {\n json.properties[key] = this.process(shape[key], {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n // const optionalKeys = new Set(def.optional);\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (this.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 (this.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = this.process(def.catchall, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n break;\n }\n case \"union\": {\n const json = _json;\n json.anyOf = def.options.map((x, i) => this.process(x, {\n ...params,\n path: [...params.path, \"anyOf\", i],\n }));\n break;\n }\n case \"intersection\": {\n const json = _json;\n const a = this.process(def.left, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = this.process(def.right, {\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 break;\n }\n case \"tuple\": {\n const json = _json;\n json.type = \"array\";\n const prefixItems = def.items.map((x, i) => this.process(x, { ...params, path: [...params.path, \"prefixItems\", i] }));\n if (this.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n }\n else {\n json.items = prefixItems;\n }\n if (def.rest) {\n const rest = this.process(def.rest, {\n ...params,\n path: [...params.path, \"items\"],\n });\n if (this.target === \"draft-2020-12\") {\n json.items = rest;\n }\n else {\n json.additionalItems = rest;\n }\n }\n // additionalItems\n if (def.rest) {\n json.items = this.process(def.rest, {\n ...params,\n path: [...params.path, \"items\"],\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 break;\n }\n case \"record\": {\n const json = _json;\n json.type = \"object\";\n json.propertyNames = this.process(def.keyType, { ...params, path: [...params.path, \"propertyNames\"] });\n json.additionalProperties = this.process(def.valueType, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n break;\n }\n case \"map\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"set\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"enum\": {\n const json = _json;\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 break;\n }\n case \"literal\": {\n const json = _json;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (this.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 (this.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 json.const = val;\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 = \"string\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n break;\n }\n case \"file\": {\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 json.anyOf = mime.map((m) => {\n const mFile = { ...file, contentMediaType: m };\n return mFile;\n });\n }\n }\n else {\n Object.assign(json, file);\n }\n // if (this.unrepresentable === \"throw\") {\n // throw new Error(\"File cannot be represented in JSON Schema\");\n // }\n break;\n }\n case \"transform\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"nullable\": {\n const inner = this.process(def.innerType, params);\n _json.anyOf = [inner, { type: \"null\" }];\n break;\n }\n case \"nonoptional\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n break;\n }\n case \"success\": {\n const json = _json;\n json.type = \"boolean\";\n break;\n }\n case \"default\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n _json.default = JSON.parse(JSON.stringify(def.defaultValue));\n break;\n }\n case \"prefault\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n if (this.io === \"input\")\n _json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n break;\n }\n case \"catch\": {\n // use conditionals\n this.process(def.innerType, params);\n result.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 break;\n }\n case \"nan\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n break;\n }\n case \"template_literal\": {\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 break;\n }\n case \"pipe\": {\n const innerType = this.io === \"input\" ? (def.in._zod.def.type === \"transform\" ? def.out : def.in) : def.out;\n this.process(innerType, params);\n result.ref = innerType;\n break;\n }\n case \"readonly\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n _json.readOnly = true;\n break;\n }\n // passthrough types\n case \"promise\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n break;\n }\n case \"optional\": {\n this.process(def.innerType, params);\n result.ref = def.innerType;\n break;\n }\n case \"lazy\": {\n const innerType = schema._zod.innerType;\n this.process(innerType, params);\n result.ref = innerType;\n break;\n }\n case \"custom\": {\n if (this.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n break;\n }\n default: {\n def;\n }\n }\n }\n }\n // metadata\n const meta = this.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (this.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 (this.io === \"input\" && result.schema._prefault)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from this.seen in case it was overwritten\n const _result = this.seen.get(schema);\n return _result.schema;\n }\n emit(schema, _params) {\n const params = {\n cycles: _params?.cycles ?? \"ref\",\n reused: _params?.reused ?? \"inline\",\n // unrepresentable: _params?.unrepresentable ?? \"throw\",\n // uri: _params?.uri ?? ((id) => `${id}`),\n external: _params?.external ?? undefined,\n };\n // iterate over seen map;\n const root = this.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // initialize result with root schema fields\n // Object.assign(result, seen.cached);\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 = this.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (params.external) {\n const externalId = params.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${this.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = params.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${this.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${this.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 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 (params.cycles === \"throw\") {\n for (const entry of this.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 this.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 (params.external) {\n const ext = params.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 = this.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 (params.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n // flatten _refs\n const flattenRef = (zodSchema, params) => {\n const seen = this.seen.get(zodSchema);\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n // already seen\n if (seen.ref === null) {\n return;\n }\n // flatten ref if defined\n const ref = seen.ref;\n seen.ref = null; // prevent recursion\n if (ref) {\n flattenRef(ref, params);\n // merge referenced schema into current\n const refSchema = this.seen.get(ref).schema;\n if (refSchema.$ref && params.target === \"draft-7\") {\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n Object.assign(schema, _cached); // prevent overwriting any fields in the original schema\n }\n }\n // execute overrides\n if (!seen.isParent)\n this.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...this.seen.entries()].reverse()) {\n flattenRef(entry[0], { target: this.target });\n }\n const result = {};\n if (this.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (this.target === \"draft-7\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else {\n console.warn(`Invalid target: ${this.target}`);\n }\n if (params.external?.uri) {\n const id = params.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = params.external.uri(id);\n }\n Object.assign(result, root.def);\n // build defs object\n const defs = params.external?.defs ?? {};\n for (const entry of this.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 (params.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (this.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 .emit() is functionally independent\n // though the seen map is shared\n return JSON.parse(JSON.stringify(result));\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n }\n}\nexport function toJSONSchema(input, _params) {\n if (input instanceof $ZodRegistry) {\n const gen = new JSONSchemaGenerator(_params);\n const defs = {};\n for (const entry of input._idmap.entries()) {\n const [_, schema] = entry;\n gen.process(schema);\n }\n const schemas = {};\n const external = {\n registry: input,\n uri: _params?.uri,\n defs,\n };\n for (const entry of input._idmap.entries()) {\n const [key, schema] = entry;\n schemas[key] = gen.emit(schema, {\n ..._params,\n external,\n });\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = gen.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n const gen = new JSONSchemaGenerator(_params);\n gen.process(input);\n return gen.emit(input, _params);\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 schema = _schema;\n const def = schema._zod.def;\n switch (def.type) {\n case \"string\":\n case \"number\":\n case \"bigint\":\n case \"boolean\":\n case \"date\":\n case \"symbol\":\n case \"undefined\":\n case \"null\":\n case \"any\":\n case \"unknown\":\n case \"never\":\n case \"void\":\n case \"literal\":\n case \"enum\":\n case \"nan\":\n case \"file\":\n case \"template_literal\":\n return false;\n case \"array\": {\n return isTransforming(def.element, ctx);\n }\n case \"object\": {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n case \"union\": {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n case \"intersection\": {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n case \"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 case \"record\": {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n case \"map\": {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n case \"set\": {\n return isTransforming(def.valueType, ctx);\n }\n // inner types\n case \"promise\":\n case \"optional\":\n case \"nonoptional\":\n case \"nullable\":\n case \"readonly\":\n return isTransforming(def.innerType, ctx);\n case \"lazy\":\n return isTransforming(def.getter(), ctx);\n case \"default\": {\n return isTransforming(def.innerType, ctx);\n }\n case \"prefault\": {\n return isTransforming(def.innerType, ctx);\n }\n case \"custom\": {\n return false;\n }\n case \"transform\": {\n return true;\n }\n case \"pipe\": {\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n case \"success\": {\n return false;\n }\n case \"catch\": {\n return false;\n }\n default:\n def;\n }\n throw new Error(`Unknown schema type: ${def.type}`);\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\";\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) => inst.issues.push(issue),\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => inst.issues.push(...issues),\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","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.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 inst.def = def;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone({\n ...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.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 // 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.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 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 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});\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 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 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 const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\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});\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.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});\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});\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});\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});\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});\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});\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});\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.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.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 literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\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.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.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.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 get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\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 get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\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.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 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});\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.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.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 return new ZodRecord({\n type: \"record\",\n keyType: union([keyType, never()]),\n valueType: valueType,\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.keyType = def.keyType;\n inst.valueType = def.valueType;\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.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.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.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.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.parse = (payload, _ctx) => {\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 ?? (_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.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\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.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.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() : 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.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() : 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.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.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.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});\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.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 ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\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});\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.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.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\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 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);\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\nfunction _instanceof(cls, params = {\n error: `Input not instance of ${cls.name}`,\n}) {\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 return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Pipe: ZodPipe,\n Boolean: ZodBoolean,\n String: ZodString,\n Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\n","export * as core from \"../core/index.js\";\nexport * from \"./schemas.js\";\nexport * from \"./checks.js\";\nexport * from \"./errors.js\";\nexport * from \"./parse.js\";\nexport * from \"./compat.js\";\n// zod-specified\nimport { config } from \"../core/index.js\";\nimport en from \"../locales/en.js\";\nconfig(en());\nexport { globalRegistry, registry, config, function, $output, $input, $brand, clone, regexes, treeifyError, prettifyError, formatError, flattenError, toJSONSchema, TimePrecision, NEVER, } from \"../core/index.js\";\nexport * as locales from \"../locales/index.js\";\n// iso\n// must be exported from top-level\n// https://github.com/colinhacks/zod/issues/4491\nexport { ZodISODateTime, ZodISODate, ZodISOTime, ZodISODuration } from \"./iso.js\";\nexport * as iso from \"./iso.js\";\nexport * as coerce from \"./coerce.js\";\n",null,null,null,"export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\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 // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\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(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[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// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\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}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(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 { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\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 { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodMiniType = /*@__PURE__*/ core.$constructor(\"ZodMiniType\", (inst, def) => {\n if (!inst._zod)\n throw new Error(\"Uninitialized schema in ZodMiniType.\");\n core.$ZodType.init(inst, def);\n inst.def = def;\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.check = (...checks) => {\n return inst.clone({\n ...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.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});\nexport const ZodMiniString = /*@__PURE__*/ core.$constructor(\"ZodMiniString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function string(params) {\n return core._string(ZodMiniString, params);\n}\nexport const ZodMiniStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n ZodMiniString.init(inst, def);\n});\nexport const ZodMiniEmail = /*@__PURE__*/ core.$constructor(\"ZodMiniEmail\", (inst, def) => {\n core.$ZodEmail.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodMiniEmail, params);\n}\nexport const ZodMiniGUID = /*@__PURE__*/ core.$constructor(\"ZodMiniGUID\", (inst, def) => {\n core.$ZodGUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodMiniGUID, params);\n}\nexport const ZodMiniUUID = /*@__PURE__*/ core.$constructor(\"ZodMiniUUID\", (inst, def) => {\n core.$ZodUUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodMiniUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodMiniUUID, params);\n}\n// ZodMiniUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodMiniUUID, params);\n}\nexport const ZodMiniURL = /*@__PURE__*/ core.$constructor(\"ZodMiniURL\", (inst, def) => {\n core.$ZodURL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodMiniURL, params);\n}\nexport const ZodMiniEmoji = /*@__PURE__*/ core.$constructor(\"ZodMiniEmoji\", (inst, def) => {\n core.$ZodEmoji.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodMiniEmoji, params);\n}\nexport const ZodMiniNanoID = /*@__PURE__*/ core.$constructor(\"ZodMiniNanoID\", (inst, def) => {\n core.$ZodNanoID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodMiniNanoID, params);\n}\nexport const ZodMiniCUID = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID\", (inst, def) => {\n core.$ZodCUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodMiniCUID, params);\n}\nexport const ZodMiniCUID2 = /*@__PURE__*/ core.$constructor(\"ZodMiniCUID2\", (inst, def) => {\n core.$ZodCUID2.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodMiniCUID2, params);\n}\nexport const ZodMiniULID = /*@__PURE__*/ core.$constructor(\"ZodMiniULID\", (inst, def) => {\n core.$ZodULID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodMiniULID, params);\n}\nexport const ZodMiniXID = /*@__PURE__*/ core.$constructor(\"ZodMiniXID\", (inst, def) => {\n core.$ZodXID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodMiniXID, params);\n}\nexport const ZodMiniKSUID = /*@__PURE__*/ core.$constructor(\"ZodMiniKSUID\", (inst, def) => {\n core.$ZodKSUID.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodMiniKSUID, params);\n}\nexport const ZodMiniIPv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv4\", (inst, def) => {\n core.$ZodIPv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodMiniIPv4, params);\n}\nexport const ZodMiniIPv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniIPv6\", (inst, def) => {\n core.$ZodIPv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodMiniIPv6, params);\n}\nexport const ZodMiniCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodMiniCIDRv4, params);\n}\nexport const ZodMiniCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodMiniCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodMiniCIDRv6, params);\n}\nexport const ZodMiniBase64 = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64\", (inst, def) => {\n core.$ZodBase64.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodMiniBase64, params);\n}\nexport const ZodMiniBase64URL = /*@__PURE__*/ core.$constructor(\"ZodMiniBase64URL\", (inst, def) => {\n core.$ZodBase64URL.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodMiniBase64URL, params);\n}\nexport const ZodMiniE164 = /*@__PURE__*/ core.$constructor(\"ZodMiniE164\", (inst, def) => {\n core.$ZodE164.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodMiniE164, params);\n}\nexport const ZodMiniJWT = /*@__PURE__*/ core.$constructor(\"ZodMiniJWT\", (inst, def) => {\n core.$ZodJWT.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodMiniJWT, params);\n}\nexport const ZodMiniCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniCustomStringFormat\", (inst, def) => {\n core.$ZodCustomStringFormat.init(inst, def);\n ZodMiniStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodMiniCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodMiniNumber = /*@__PURE__*/ core.$constructor(\"ZodMiniNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function number(params) {\n return core._number(ZodMiniNumber, params);\n}\nexport const ZodMiniNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodMiniNumber.init(inst, def);\n});\n// int\nexport function int(params) {\n return core._int(ZodMiniNumberFormat, params);\n}\n// float32\nexport function float32(params) {\n return core._float32(ZodMiniNumberFormat, params);\n}\n// float64\nexport function float64(params) {\n return core._float64(ZodMiniNumberFormat, params);\n}\n// int32\nexport function int32(params) {\n return core._int32(ZodMiniNumberFormat, params);\n}\n// uint32\nexport function uint32(params) {\n return core._uint32(ZodMiniNumberFormat, params);\n}\nexport const ZodMiniBoolean = /*@__PURE__*/ core.$constructor(\"ZodMiniBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function boolean(params) {\n return core._boolean(ZodMiniBoolean, params);\n}\nexport const ZodMiniBigInt = /*@__PURE__*/ core.$constructor(\"ZodMiniBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function bigint(params) {\n return core._bigint(ZodMiniBigInt, params);\n}\nexport const ZodMiniBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodMiniBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodMiniBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodMiniBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodMiniBigIntFormat, params);\n}\nexport const ZodMiniSymbol = /*@__PURE__*/ core.$constructor(\"ZodMiniSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function symbol(params) {\n return core._symbol(ZodMiniSymbol, params);\n}\nexport const ZodMiniUndefined = /*@__PURE__*/ core.$constructor(\"ZodMiniUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nfunction _undefined(params) {\n return core._undefined(ZodMiniUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodMiniNull = /*@__PURE__*/ core.$constructor(\"ZodMiniNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nfunction _null(params) {\n return core._null(ZodMiniNull, params);\n}\nexport { _null as null };\nexport const ZodMiniAny = /*@__PURE__*/ core.$constructor(\"ZodMiniAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function any() {\n return core._any(ZodMiniAny);\n}\nexport const ZodMiniUnknown = /*@__PURE__*/ core.$constructor(\"ZodMiniUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function unknown() {\n return core._unknown(ZodMiniUnknown);\n}\nexport const ZodMiniNever = /*@__PURE__*/ core.$constructor(\"ZodMiniNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function never(params) {\n return core._never(ZodMiniNever, params);\n}\nexport const ZodMiniVoid = /*@__PURE__*/ core.$constructor(\"ZodMiniVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nfunction _void(params) {\n return core._void(ZodMiniVoid, params);\n}\nexport { _void as void };\nexport const ZodMiniDate = /*@__PURE__*/ core.$constructor(\"ZodMiniDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function date(params) {\n return core._date(ZodMiniDate, params);\n}\nexport const ZodMiniArray = /*@__PURE__*/ core.$constructor(\"ZodMiniArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function array(element, params) {\n return new ZodMiniArray({\n type: \"array\",\n element: element,\n ...util.normalizeParams(params),\n });\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return literal(Object.keys(shape));\n}\nexport const ZodMiniObject = /*@__PURE__*/ core.$constructor(\"ZodMiniObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodMiniType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n ...util.normalizeParams(params),\n };\n return new ZodMiniObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n // shape: shape as core.$ZodLooseShape,\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodMiniObject({\n type: \"object\",\n // shape: shape as core.$ZodLooseShape,\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n // get optional() {\n // return util.optionalKeys(shape);\n // },\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\n// object methods\nexport function extend(schema, shape) {\n return util.extend(schema, shape);\n}\nexport function merge(schema, shape) {\n return util.extend(schema, shape);\n}\nexport function pick(schema, mask) {\n return util.pick(schema, mask);\n}\n// .omit\nexport function omit(schema, mask) {\n return util.omit(schema, mask);\n}\nexport function partial(schema, mask) {\n return util.partial(ZodMiniOptional, schema, mask);\n}\nexport function required(schema, mask) {\n return util.required(ZodMiniNonOptional, schema, mask);\n}\nexport function catchall(inst, catchall) {\n return inst.clone({ ...inst._zod.def, catchall: catchall });\n}\nexport const ZodMiniUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function union(options, params) {\n return new ZodMiniUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodMiniDiscriminatedUnion\", (inst, def) => {\n core.$ZodDiscriminatedUnion.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n return new ZodMiniDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniIntersection = /*@__PURE__*/ core.$constructor(\"ZodMiniIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function intersection(left, right) {\n return new ZodMiniIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodMiniTuple = /*@__PURE__*/ core.$constructor(\"ZodMiniTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodMiniType.init(inst, def);\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 ZodMiniTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniRecord = /*@__PURE__*/ core.$constructor(\"ZodMiniRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function record(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function partialRecord(keyType, valueType, params) {\n return new ZodMiniRecord({\n type: \"record\",\n keyType: union([keyType, never()]),\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniMap = /*@__PURE__*/ core.$constructor(\"ZodMiniMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function map(keyType, valueType, params) {\n return new ZodMiniMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSet = /*@__PURE__*/ core.$constructor(\"ZodMiniSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function set(valueType, params) {\n return new ZodMiniSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniEnum = /*@__PURE__*/ core.$constructor(\"ZodMiniEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodMiniEnum({\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 ZodMiniEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function literal(value, params) {\n return new ZodMiniLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniFile = /*@__PURE__*/ core.$constructor(\"ZodMiniFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function file(params) {\n return core._file(ZodMiniFile, params);\n}\nexport const ZodMiniTransform = /*@__PURE__*/ core.$constructor(\"ZodMiniTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function transform(fn) {\n return new ZodMiniTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodMiniOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function optional(innerType) {\n return new ZodMiniOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodMiniNullable = /*@__PURE__*/ core.$constructor(\"ZodMiniNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function nullable(innerType) {\n return new ZodMiniNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodMiniDefault = /*@__PURE__*/ core.$constructor(\"ZodMiniDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function _default(innerType, defaultValue) {\n return new ZodMiniDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodMiniPrefault = /*@__PURE__*/ core.$constructor(\"ZodMiniPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodMiniPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodMiniNonOptional = /*@__PURE__*/ core.$constructor(\"ZodMiniNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function nonoptional(innerType, params) {\n return new ZodMiniNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniSuccess = /*@__PURE__*/ core.$constructor(\"ZodMiniSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function success(innerType) {\n return new ZodMiniSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCatch = /*@__PURE__*/ core.$constructor(\"ZodMiniCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nfunction _catch(innerType, catchValue) {\n return new ZodMiniCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodMiniNaN = /*@__PURE__*/ core.$constructor(\"ZodMiniNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function nan(params) {\n return core._nan(ZodMiniNaN, params);\n}\nexport const ZodMiniPipe = /*@__PURE__*/ core.$constructor(\"ZodMiniPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function pipe(in_, out) {\n return new ZodMiniPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n });\n}\nexport const ZodMiniReadonly = /*@__PURE__*/ core.$constructor(\"ZodMiniReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function readonly(innerType) {\n return new ZodMiniReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodMiniTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodMiniTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n return new ZodMiniTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMiniLazy = /*@__PURE__*/ core.$constructor(\"ZodMiniLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// export function lazy<T extends object>(getter: () => T): T {\n// return util.createTransparentProxy<T>(getter);\n// }\nfunction _lazy(getter) {\n return new ZodMiniLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport { _lazy as lazy };\nexport const ZodMiniPromise = /*@__PURE__*/ core.$constructor(\"ZodMiniPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodMiniType.init(inst, def);\n});\nexport function promise(innerType) {\n return new ZodMiniPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodMiniCustom = /*@__PURE__*/ core.$constructor(\"ZodMiniCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodMiniType.init(inst, def);\n});\n// custom checks\nexport function check(fn, params) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// ZodCustom\n// custom schema\nexport function custom(fn, _params) {\n return core._custom(ZodMiniCustom, fn ?? (() => true), _params);\n}\n// refine\nexport function refine(fn, _params = {}) {\n return core._refine(ZodMiniCustom, fn, _params);\n}\n// instanceof\nclass Class {\n constructor(..._args) { }\n}\nfunction _instanceof(cls, params = {\n error: `Input not instance of ${cls.name}`,\n}) {\n const inst = custom((data) => data instanceof cls, params);\n inst._zod.bag.Class = cls;\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Pipe: ZodMiniPipe,\n Boolean: ZodMiniBoolean,\n String: ZodMiniString,\n Transform: ZodMiniTransform,\n}, ...args);\nexport function json() {\n const jsonSchema = _lazy(() => {\n return union([string(), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n",null,null,"export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n","export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n","import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n","export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n 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])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n","import { ZodFirstPartyTypeKind, } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n","export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n","export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n return ((_) => undefined)(typeName);\n }\n};\n","import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n",null,null,null,null,null,null,null,null,null,null,"export class ApiError extends Error {\n httpStatus: number;\n body?: unknown;\n\n constructor(httpStatus: number, message: string, body?: unknown) {\n super(message);\n this.name = 'ApiError';\n this.httpStatus = httpStatus;\n this.body = body;\n }\n}\n\n/**\n * O token do `beplus-mcp login` venceu e a renovação não deu (refresh revogado,\n * credencial apagada ou rede fora). Só um login novo resolve; como o servidor\n * relê o disco a cada chamada, não precisa reiniciar o agente.\n */\nexport class LoginExpiredError extends ApiError {\n constructor() {\n super(\n 401,\n 'O acesso pelo navegador expirou e não deu para renovar sozinho. Rode `beplus-mcp login` de novo e autorize; ' +\n 'não precisa reiniciar o agente, a próxima chamada já usa o login novo.'\n );\n this.name = 'LoginExpiredError';\n }\n}\n\n/**\n * Turn any thrown error into a clear, actionable message for the agent/user.\n * Never echoes the token. Used as the text of an `isError` tool result.\n */\nexport function apiErrorToUserMessage(err: unknown): string {\n if (err instanceof LoginExpiredError) return err.message;\n if (err instanceof ApiError) {\n const detail = err.message || '';\n switch (err.httpStatus) {\n case 401:\n return 'Token inválido ou expirado. Gere um novo Personal Access Token no painel BePlus e atualize BEPLUS_API_TOKEN no config do MCP.';\n case 402:\n return `Diamantes insuficientes. ${detail} Recarregue ou escolha um modelo/resolução mais barato (use estimate_cost / list_models).`;\n case 403:\n return `Sem permissão para esta ação. ${detail}`;\n case 404:\n return `Não encontrado. ${detail}`;\n case 408:\n return detail || 'Tempo esgotado ao falar com a API BePlus.';\n case 409:\n return detail;\n case 429:\n return `Limite atingido. ${detail} Aguarde alguns segundos e tente novamente (reduza gerações em paralelo).`;\n case 400:\n case 422:\n return `Parâmetros inválidos: ${detail}. Use list_models para ver modelos/params válidos.`;\n case 0:\n return detail || 'Falha de rede ao falar com a API BePlus. Confira BEPLUS_API_URL.';\n default:\n if (err.httpStatus >= 500) return `Erro no servidor BePlus: ${detail}`;\n return detail || `Erro HTTP ${err.httpStatus}`;\n }\n }\n if (err instanceof Error) return err.message;\n return String(err);\n}\n","import { chmod, mkdir, open, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { dirname, join } from 'node:path';\n\n/**\n * Credencial obtida pelo `beplus-mcp login`, guardada em disco.\n *\n * O transporte stdio não faz OAuth (a spec do MCP manda ler credencial do\n * ambiente), então o login acontece fora dele e deixa o token aqui.\n */\n\nexport interface StoredCredentials {\n accessToken: string;\n refreshToken?: string;\n /** Epoch em ms. Serve para renovar antes de tentar uma chamada que falharia. */\n expiresAt?: number;\n apiUrl: string;\n clientId: string;\n}\n\n/** XDG, com fallback para `~/.config`. Portável e sem dependência nativa. */\nexport function credentialsPath(): string {\n const base = process.env.XDG_CONFIG_HOME?.trim() || join(homedir(), '.config');\n return join(base, 'beplus-mcp', 'credentials.json');\n}\n\nexport async function readCredentials(): Promise<StoredCredentials | null> {\n try {\n const raw = await readFile(credentialsPath(), 'utf8');\n const parsed = JSON.parse(raw) as Partial<StoredCredentials>;\n if (!parsed.accessToken || !parsed.apiUrl) return null;\n return parsed as StoredCredentials;\n } catch {\n // Arquivo ausente ou corrompido é o mesmo caso: não há credencial.\n return null;\n }\n}\n\n/**\n * Grava com 0600. O `chmod` vem depois do write porque o `mode` do writeFile é\n * mascarado pelo umask do processo, e um umask frouxo deixaria o token legível\n * para outros usuários da máquina.\n *\n * Atômico (temporário + rename): o servidor relê este arquivo a cada chamada, e\n * um leitor que pegasse o arquivo pela metade leria \"sem credencial\".\n */\nexport async function writeCredentials(creds: StoredCredentials): Promise<string> {\n const path = credentialsPath();\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n const tmp = `${path}.${process.pid}.tmp`;\n await writeFile(tmp, `${JSON.stringify(creds, null, 2)}\\n`, { mode: 0o600 });\n await chmod(tmp, 0o600);\n await rename(tmp, path);\n return path;\n}\n\nexport async function clearCredentials(): Promise<boolean> {\n try {\n await unlink(credentialsPath());\n return true;\n } catch {\n return false;\n }\n}\n\n/** Margem para não usar um token que expira no meio da chamada. */\nconst RENEW_MARGIN_MS = 60_000;\n\nexport function isExpired(creds: StoredCredentials): boolean {\n return typeof creds.expiresAt === 'number' && creds.expiresAt - RENEW_MARGIN_MS <= Date.now();\n}\n\n/**\n * Tempos da trava de renovação. A renovação faz no máximo duas chamadas de 10 s\n * (descoberta + token), então uma trava com mais de 30 s é de processo que\n * morreu no meio. Mutável só para os testes.\n */\nexport const credentialsLock = {\n staleMs: 30_000,\n waitMs: 35_000,\n pollMs: 100,\n};\n\n/**\n * Roda `fn` com a trava de arquivo das credenciais (`credentials.json.lock`).\n *\n * Por que existe: o backend consome o refresh token a cada uso e, se o MESMO\n * refresh chega duas vezes, revoga a família inteira (services/oauth.ts,\n * `refreshAccessToken`). Duas sessões do agente renovando juntas deslogariam\n * todo mundo. Com a trava, a segunda espera, relê o disco e usa o token que a\n * primeira acabou de gravar.\n */\nexport async function withCredentialsLock<T>(fn: () => Promise<T>): Promise<T> {\n const path = credentialsPath();\n const lock = `${path}.lock`;\n await mkdir(dirname(path), { recursive: true, mode: 0o700 });\n const started = Date.now();\n for (;;) {\n try {\n const fh = await open(lock, 'wx', 0o600);\n await fh.writeFile(String(process.pid));\n await fh.close();\n break;\n } catch (e) {\n if ((e as NodeJS.ErrnoException).code !== 'EEXIST') throw e;\n try {\n const age = Date.now() - (await stat(lock)).mtimeMs;\n if (age > credentialsLock.staleMs) {\n await unlink(lock).catch(() => {});\n continue;\n }\n } catch {\n continue; // a trava sumiu entre o open e o stat: tenta de novo\n }\n if (Date.now() - started > credentialsLock.waitMs) {\n throw new Error('Outro processo do beplus-mcp está renovando o login há tempo demais. Tente de novo em instantes.');\n }\n await new Promise((r) => setTimeout(r, credentialsLock.pollMs));\n }\n }\n try {\n return await fn();\n } finally {\n await unlink(lock).catch(() => {});\n }\n}\n","import crypto from 'node:crypto';\nimport { createServer } from 'node:http';\nimport { spawn } from 'node:child_process';\nimport { readCredentials, writeCredentials, isExpired, withCredentialsLock, type StoredCredentials } from './credentials';\n\n/**\n * Cliente OAuth do `beplus-mcp login`. Servidor efêmero em loopback, sem stdin:\n * o navegador devolve o código direto na porta, e o comando funciona chamado por\n * um agente, que não tem terminal.\n */\n\nconst CALLBACK_TIMEOUT_MS = 5 * 60_000;\n/** Descoberta e troca de token. Menor que a trava de renovação (credentials.ts). */\nconst REQUEST_TIMEOUT_MS = 10_000;\n\ninterface AuthServerMetadata {\n issuer: string;\n authorization_endpoint: string;\n token_endpoint: string;\n registration_endpoint: string;\n}\n\nasync function json<T>(url: string, init?: RequestInit): Promise<T> {\n let res: Response;\n try {\n res = await fetch(url, { ...init, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) });\n } catch {\n // \"fetch failed\" sozinho nao diz o que fazer. O host quase sempre e o erro.\n throw new Error(`Nao consegui falar com ${new URL(url).origin}. Confira a rede e o BEPLUS_API_URL.`);\n }\n const text = await res.text();\n let body: unknown;\n try {\n body = text ? JSON.parse(text) : undefined;\n } catch {\n /* resposta fora de JSON cai no erro abaixo */\n }\n if (!res.ok) {\n const msg =\n (body as { message?: string; error_description?: string; error?: string } | undefined)?.message ??\n (body as { error_description?: string } | undefined)?.error_description ??\n (body as { error?: string } | undefined)?.error ??\n `HTTP ${res.status}`;\n throw new Error(`${msg} (${url})`);\n }\n return body as T;\n}\n\n/**\n * Descobre os endpoints em vez de cravá-los: se o backend mudar de prefixo, o\n * login continua funcionando sem publicar versão nova do pacote.\n */\nasync function discover(apiUrl: string): Promise<AuthServerMetadata> {\n const meta = await json<AuthServerMetadata>(`${apiUrl}/.well-known/oauth-authorization-server`);\n if (!meta.authorization_endpoint || !meta.token_endpoint || !meta.registration_endpoint) {\n throw new Error('O servidor respondeu a descoberta sem os endpoints obrigatorios.');\n }\n return meta;\n}\n\nfunction pkce() {\n const verifier = crypto.randomBytes(32).toString('base64url');\n return { verifier, challenge: crypto.createHash('sha256').update(verifier).digest('base64url') };\n}\n\n/** Falha em silêncio de propósito: o comando já imprime a URL para colar. */\nfunction openBrowser(url: string): void {\n try {\n if (process.platform === 'win32') {\n /**\n * O `cmd` lê `&` como separador de comandos, e a URL do OAuth é cheia\n * deles. Sem escapar, o navegador recebia só até o primeiro `&` — ou\n * seja, `authorize?response_type=code` sozinho — e o login morria em\n * \"client_id é obrigatório\" antes de qualquer tela. `^` é o escape do\n * cmd, e `windowsVerbatimArguments` é o que impede o Node de reempacotar\n * o argumento e desfazer o escape.\n */\n spawn('cmd.exe', ['/c', 'start', '\"\"', '/b', url.replace(/&/g, '^&')], {\n stdio: 'ignore',\n detached: true,\n windowsVerbatimArguments: true,\n }).unref();\n return;\n }\n const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';\n spawn(cmd, [url], { stdio: 'ignore', detached: true }).unref();\n } catch {\n /* sem browser: a pessoa cola a URL */\n }\n}\n\nconst PAGINA_OK = `<!doctype html><meta charset=\"utf-8\"><title>Pronto</title>\n<body style=\"margin:0;min-height:100vh;display:grid;place-items:center;font:16px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#0e1433;color:#f7f6f2\">\n<div style=\"text-align:center;padding:24px\"><h1 style=\"font-size:22px;margin:0 0 8px\">Tudo certo</h1>\n<p style=\"margin:0;opacity:.7\">Pode fechar esta aba e voltar para o seu agente.</p></div>`;\n\nconst PAGINA_ERRO = `<!doctype html><meta charset=\"utf-8\"><title>Nao deu</title>\n<body style=\"margin:0;min-height:100vh;display:grid;place-items:center;font:16px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#0e1433;color:#f7f6f2\">\n<div style=\"text-align:center;padding:24px\"><h1 style=\"font-size:22px;margin:0 0 8px\">Nao foi dessa vez</h1>\n<p style=\"margin:0;opacity:.7\">Volte ao terminal para ver o motivo.</p></div>`;\n\ninterface CallbackResult {\n code: string;\n state: string;\n}\n\n/**\n * Sobe o loopback e devolve a porta junto com a promessa do código. A porta tem\n * que ser conhecida ANTES de registrar o cliente, porque ela entra no\n * `redirect_uri` registrado.\n */\nfunction listenForCallback(expectedState: string): Promise<{ port: number; code: Promise<CallbackResult> }> {\n return new Promise((resolvePort, rejectPort) => {\n let settle: (r: CallbackResult) => void;\n let fail: (e: Error) => void;\n const code = new Promise<CallbackResult>((res, rej) => {\n settle = res;\n fail = rej;\n });\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://127.0.0.1');\n if (url.pathname !== '/callback') {\n res.writeHead(404).end();\n return;\n }\n const erro = url.searchParams.get('error');\n const recebido = url.searchParams.get('code');\n const state = url.searchParams.get('state') ?? '';\n\n const ok = !erro && recebido && state === expectedState;\n res.writeHead(ok ? 200 : 400, { 'content-type': 'text/html; charset=utf-8' });\n res.end(ok ? PAGINA_OK : PAGINA_ERRO);\n server.close();\n\n if (erro) return fail(new Error(url.searchParams.get('error_description') || erro));\n // `state` diferente significa que a resposta nao pertence a este pedido.\n if (!recebido || state !== expectedState) return fail(new Error('Resposta de autorizacao invalida.'));\n settle({ code: recebido, state });\n });\n\n server.on('error', rejectPort);\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n if (!addr || typeof addr === 'string') return rejectPort(new Error('Nao consegui abrir a porta local.'));\n const timer = setTimeout(() => {\n server.close();\n fail(new Error('Tempo esgotado esperando a autorizacao no navegador.'));\n }, CALLBACK_TIMEOUT_MS);\n void code.finally(() => clearTimeout(timer));\n resolvePort({ port: addr.port, code });\n });\n });\n}\n\ninterface TokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n}\n\nfunction toStored(t: TokenResponse, apiUrl: string, clientId: string): StoredCredentials {\n return {\n accessToken: t.access_token,\n refreshToken: t.refresh_token,\n expiresAt: t.expires_in ? Date.now() + t.expires_in * 1000 : undefined,\n apiUrl,\n clientId,\n };\n}\n\nexport interface LoginResult {\n path: string;\n authorizeUrl: string;\n}\n\nexport async function login(apiUrl: string, onUrl: (url: string) => void): Promise<LoginResult> {\n const meta = await discover(apiUrl);\n const state = crypto.randomBytes(24).toString('base64url');\n const { verifier, challenge } = pkce();\n\n const { port, code } = await listenForCallback(state);\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n\n const client = await json<{ client_id: string }>(meta.registration_endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n client_name: 'beplus-mcp (CLI)',\n redirect_uris: [redirectUri],\n token_endpoint_auth_method: 'none',\n grant_types: ['authorization_code', 'refresh_token'],\n }),\n });\n\n const authorizeUrl = new URL(meta.authorization_endpoint);\n authorizeUrl.searchParams.set('response_type', 'code');\n authorizeUrl.searchParams.set('client_id', client.client_id);\n authorizeUrl.searchParams.set('redirect_uri', redirectUri);\n authorizeUrl.searchParams.set('code_challenge', challenge);\n authorizeUrl.searchParams.set('code_challenge_method', 'S256');\n authorizeUrl.searchParams.set('state', state);\n\n onUrl(authorizeUrl.toString());\n openBrowser(authorizeUrl.toString());\n\n const { code: authCode } = await code;\n\n const token = await json<TokenResponse>(meta.token_endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code: authCode,\n code_verifier: verifier,\n client_id: client.client_id,\n redirect_uri: redirectUri,\n }),\n });\n\n const path = await writeCredentials(toStored(token, apiUrl, client.client_id));\n return { path, authorizeUrl: authorizeUrl.toString() };\n}\n\nconst sameApi = (a: string, b: string) => a.replace(/\\/+$/, '') === b.replace(/\\/+$/, '');\n\nasync function refreshGrant(apiUrl: string, creds: StoredCredentials): Promise<StoredCredentials> {\n const meta = await discover(apiUrl);\n const token = await json<TokenResponse>(meta.token_endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n refresh_token: creds.refreshToken,\n client_id: creds.clientId,\n }),\n });\n return toStored(token, apiUrl, creds.clientId);\n}\n\n/**\n * Renova o token do `login`, sob a trava de arquivo das credenciais.\n *\n * `rejected` é o token que acabou de falhar (401) ou venceu. Dentro da trava o\n * disco é relido: se outro processo já trocou o token, usa o dele e não gasta o\n * refresh (reusar refresh derruba a família inteira no backend). Devolve o token\n * bom, ou null quando não há como renovar (sem credencial, sem refresh, refresh\n * revogado): aí só um `beplus-mcp login` novo resolve.\n */\nexport async function renewFromDisk(apiUrl: string, rejected: string): Promise<string | null> {\n try {\n return await withCredentialsLock(async () => {\n const creds = await readCredentials();\n // Credencial de outra instalação (API diferente) não vale aqui.\n if (!creds || !sameApi(creds.apiUrl, apiUrl)) return null;\n if (creds.accessToken !== rejected && !isExpired(creds)) return creds.accessToken;\n if (!creds.refreshToken) return null;\n const fresh = await refreshGrant(apiUrl, creds);\n await writeCredentials(fresh);\n return fresh.accessToken;\n });\n } catch {\n // Refresh queimado, revogado ou rede fora: quem chama pede login de novo.\n return null;\n }\n}\n\n/**\n * Token para o servidor MCP usar na subida. Renova quando expirou, e devolve\n * null quando não há credencial: quem chama decide se isso é erro.\n */\nexport async function tokenFromDisk(apiUrl: string): Promise<string | null> {\n const creds = await readCredentials();\n if (!creds || !sameApi(creds.apiUrl, apiUrl)) return null;\n if (!isExpired(creds)) return creds.accessToken;\n if (!creds.refreshToken) return null;\n // Melhor pedir login de novo do que subir um servidor que falha em toda chamada.\n return renewFromDisk(apiUrl, creds.accessToken);\n}\n","import { ApiError, LoginExpiredError } from './api/errors';\nimport type { Config } from './config';\nimport { isExpired, readCredentials } from './credentials';\nimport { renewFromDisk } from './oauth';\n\n/**\n * De onde sai o token de cada chamada.\n *\n * PAT (env) é fixo e nunca renova. O token do `beplus-mcp login` vence em ~1 h:\n * antes ele só renovava ao subir o servidor, e o agente precisava abrir um MCP\n * novo a cada lote. Agora cada chamada relê o disco (outro processo, ou um\n * `login` novo, pode ter trocado o token) e, no 401, renova uma vez e repete.\n */\nexport interface TokenProvider {\n /** true quando dá para renovar (token do `login`). */\n readonly renewable: boolean;\n /** Token para esta chamada. */\n current(): Promise<string>;\n /** Depois de um 401 com `rejected`: o token novo, ou null se não deu para renovar. */\n refresh(rejected: string): Promise<string | null>;\n}\n\nexport function staticToken(token: string): TokenProvider {\n return { renewable: false, current: async () => token, refresh: async () => null };\n}\n\n/** Token do `beplus-mcp login`, relido do disco a cada chamada. */\nexport class LoginToken implements TokenProvider {\n readonly renewable = true;\n /** Token cuja renovação antecipada acabou de falhar: o 401 dele não tenta de novo. */\n private failedFor: string | null = null;\n\n constructor(private apiUrl: string, private last: string) {}\n\n async current(): Promise<string> {\n const creds = await readCredentials();\n // Sem arquivo (logout) ou de outra API: segue com o último token bom; o 401 cuida do resto.\n if (!creds || creds.apiUrl.replace(/\\/+$/, '') !== this.apiUrl.replace(/\\/+$/, '')) return this.last;\n if (isExpired(creds) && creds.refreshToken) {\n const fresh = await renewFromDisk(this.apiUrl, creds.accessToken);\n if (fresh) return (this.last = fresh);\n this.failedFor = creds.accessToken;\n }\n return (this.last = creds.accessToken);\n }\n\n async refresh(rejected: string): Promise<string | null> {\n if (rejected === this.failedFor) return null;\n const fresh = await renewFromDisk(this.apiUrl, rejected);\n if (fresh) this.last = fresh;\n return fresh;\n }\n}\n\nexport function tokenProvider(cfg: Config): TokenProvider {\n return cfg.auth ?? staticToken(cfg.token);\n}\n\ntype AuthedInit = Omit<RequestInit, 'headers' | 'signal'> & {\n headers?: Record<string, string>;\n timeoutMs: number;\n};\n\n/**\n * `fetch` com `Authorization`. No 401 com token renovável: renova (uma vez) e\n * repete com timeout próprio, para a espera da trava não comer o da repetição.\n * Se a renovação falha, lança `LoginExpiredError`. Se a repetição com token novo\n * ainda volta 401, devolve essa resposta: aí não é validade, é a rota (ex.:\n * \"só vale nas rotas do IA Lab\"), e a mensagem do servidor é que explica.\n *\n * Erros de rede e de tempo saem como `ApiError` 0/408 com `what` na mensagem.\n */\nexport async function fetchWithAuth(cfg: Config, url: string | URL, init: AuthedInit, what: string): Promise<Response> {\n const auth = tokenProvider(cfg);\n const send = async (token: string) => {\n const { timeoutMs, headers, ...rest } = init;\n try {\n return await fetch(url, {\n ...rest,\n headers: { ...headers, Authorization: `Bearer ${token}` },\n signal: AbortSignal.timeout(timeoutMs),\n });\n } catch (e) {\n const name = (e as { name?: string })?.name;\n if (name === 'TimeoutError' || name === 'AbortError') {\n throw new ApiError(408, `Tempo esgotado ao falar com a API BePlus (${what}).`);\n }\n throw new ApiError(0, `Falha de rede ao falar com a API BePlus (${what}). Confira BEPLUS_API_URL.`);\n }\n };\n\n const token = await auth.current();\n const res = await send(token);\n if (res.status !== 401 || !auth.renewable) return res;\n await res.body?.cancel().catch(() => {});\n const fresh = await auth.refresh(token);\n if (!fresh) throw new LoginExpiredError();\n return send(fresh);\n}\n","import type { Config } from '../config';\nimport { ApiError } from './errors';\nimport { fetchWithAuth } from '../auth';\nimport type {\n MusicToolName,\n MusicToolState,\n StartGenerationResponse,\n GenerationStatus,\n TtsResponse,\n TtsVoicesResponse,\n CustomVoicesResponse,\n DesignVoiceResponse,\n MeResponse,\n BalanceResponse,\n ModelsResponse,\n CostResponse,\n ListGenerationsResponse,\n ReadProvenanceResponse,\n AnalyzeMediaResponse,\n ProjectInfo,\n ProjectsResponse,\n ActiveProjectResponse,\n ClientInfo,\n ClientsResponse,\n ActiveClientResponse,\n SearchCallsResponse,\n GetCallResponse,\n} from './types';\n\ninterface RequestOpts {\n body?: unknown;\n query?: Record<string, string | number | undefined | null>;\n timeoutMs?: number;\n /** Base da rota. Padrão: `cfg.apiBase` (/api/v1/mcp). */\n base?: string;\n}\n\nexport class BeplusClient {\n constructor(private cfg: Config) {}\n\n /** Público para os módulos de rota própria (ex.: Canvas) reaproveitarem auth, timeout e erros. */\n async request<T>(method: string, path: string, opts: RequestOpts = {}): Promise<T> {\n const url = new URL(`${opts.base ?? this.cfg.apiBase}${path}`);\n if (opts.query) {\n for (const [k, v] of Object.entries(opts.query)) {\n if (v !== undefined && v !== null && v !== '') url.searchParams.set(k, String(v));\n }\n }\n\n const res = await fetchWithAuth(\n this.cfg,\n url,\n {\n method,\n headers: opts.body ? { 'Content-Type': 'application/json' } : {},\n body: opts.body ? JSON.stringify(opts.body) : undefined,\n timeoutMs: opts.timeoutMs ?? 30_000,\n },\n path\n );\n\n let text: string;\n try {\n text = await res.text();\n } catch {\n // O timeout do fetchWithAuth vale até o fim do corpo.\n throw new ApiError(408, `Tempo esgotado ao falar com a API BePlus (${path}).`);\n }\n let json: any;\n if (text) {\n try {\n json = JSON.parse(text);\n } catch {\n /* non-JSON body */\n }\n }\n\n if (!res.ok) {\n const message =\n json?.message ||\n (Array.isArray(json?.error?.formatted) ? json.error.formatted.join(', ') : undefined) ||\n res.statusText ||\n `HTTP ${res.status}`;\n throw new ApiError(res.status, message, json);\n }\n\n // Backend Controller wraps every payload as { result, success: true }.\n return (json && typeof json === 'object' && 'result' in json ? json.result : json) as T;\n }\n\n startGeneration(body: {\n model: string;\n input: Record<string, unknown>;\n mode?: string;\n /** Projeto: uuid OU code curto (ex.: \"VRAO-26\"). Ausente → projeto ativo. */\n project?: string;\n /** 'personal' = \"sem projeto, cobra de mim\". Incompatível com `project`. */\n billing?: 'personal';\n }): Promise<StartGenerationResponse> {\n return this.request('POST', '/generations', { body });\n }\n\n listProjects(): Promise<ProjectsResponse> {\n return this.request('GET', '/projects');\n }\n\n createProject(body: {\n name: string;\n description?: string | null;\n /** Cliente dono: ref (uuid/code) OU nome (cria se não existir). Obrigatório. */\n client: string;\n color?: string;\n set_active?: boolean;\n }): Promise<{ project: ProjectInfo; is_active: boolean }> {\n return this.request('POST', '/projects', { body });\n }\n\n getActiveProject(): Promise<ActiveProjectResponse> {\n return this.request('GET', '/projects/active');\n }\n\n setActiveProject(project: string | null): Promise<ActiveProjectResponse> {\n return this.request('PUT', '/projects/active', { body: { project } });\n }\n\n // ---------------------------- clients ----------------------------\n listClients(): Promise<ClientsResponse> {\n return this.request('GET', '/clients');\n }\n\n createClient(body: { name: string }): Promise<{ client: ClientInfo }> {\n return this.request('POST', '/clients', { body });\n }\n\n setActiveClient(client: string | null): Promise<ActiveClientResponse> {\n return this.request('PUT', '/clients/active', { body: { client } });\n }\n\n getStatus(id: string): Promise<GenerationStatus> {\n return this.request('GET', `/generations/${id}`, { timeoutMs: 15_000 });\n }\n\n cancel(id: string): Promise<{ cancelled: boolean; generation_id: string }> {\n return this.request('DELETE', `/generations/${id}`);\n }\n\n listGenerations(query: {\n limit?: number;\n offset?: number;\n /** Filtra só favoritadas (\"like\"). */\n favorite?: boolean;\n /** Filtra só com plano aprovado. */\n approved?: boolean;\n }): Promise<ListGenerationsResponse> {\n return this.request('GET', '/generations', {\n query: {\n limit: query.limit,\n offset: query.offset,\n // Only send when true — the backend treats truthy as \"constrain\".\n favorite: query.favorite ? 'true' : undefined,\n approved: query.approved ? 'true' : undefined,\n },\n });\n }\n\n tts(body: Record<string, unknown>): Promise<TtsResponse> {\n return this.request('POST', '/tts', { body, timeoutMs: body.model === 'seed-audio-1.0' ? 180_000 : 90_000 });\n }\n\n ttsVoices(query: Record<string, string | number | undefined>): Promise<TtsVoicesResponse> {\n return this.request('GET', '/tts/voices', { query, timeoutMs: 20_000 });\n }\n\n customVoices(): Promise<CustomVoicesResponse> {\n return this.request('GET', '/tts/custom-voices', { timeoutMs: 20_000 });\n }\n\n // Leva ~30 s no Google; 90 s cobre a espera com folga.\n designVoice(body: Record<string, unknown>): Promise<DesignVoiceResponse> {\n return this.request('POST', '/tts/custom-voices/design', { body, timeoutMs: 90_000 });\n }\n\n deleteCustomVoice(id: string): Promise<{ deleted: boolean }> {\n return this.request('DELETE', `/tts/custom-voices/${encodeURIComponent(id)}`, { timeoutMs: 30_000 });\n }\n\n // request() já desembrulha `result`; o estado vem em `{ state }`.\n async startMusicTool(generationId: string, body: { clip_id: string; tool: MusicToolName }): Promise<MusicToolState | null> {\n const r = await this.request<{ state?: MusicToolState | null }>(\n 'POST',\n `/generations/${encodeURIComponent(generationId)}/music-tools`,\n { body, timeoutMs: 60_000 },\n );\n return r?.state ?? null;\n }\n\n async getMusicTool(generationId: string, clipId: string, tool: MusicToolName): Promise<MusicToolState | null> {\n const r = await this.request<{ state?: MusicToolState | null }>(\n 'GET',\n `/generations/${encodeURIComponent(generationId)}/music-tools`,\n { query: { clip_id: clipId, tool }, timeoutMs: 20_000 },\n );\n return r?.state ?? null;\n }\n\n models(): Promise<ModelsResponse> {\n return this.request('GET', '/models');\n }\n\n calculateCost(query: Record<string, string | number | undefined>): Promise<CostResponse> {\n return this.request('GET', '/calculate-cost', { query });\n }\n\n /** `billing: 'personal'` pula o budget do projeto ativo no preview do saldo. */\n balance(billing?: 'personal'): Promise<BalanceResponse> {\n return this.request('GET', '/balance', { query: { billing } });\n }\n\n me(billing?: 'personal'): Promise<MeResponse> {\n return this.request('GET', '/me', { query: { billing } });\n }\n\n readProvenance(body: { url?: string; image_base64?: string }): Promise<ReadProvenanceResponse> {\n return this.request('POST', '/read-provenance', { body, timeoutMs: 30_000 });\n }\n\n analyzeMedia(body: {\n prompt: string;\n media_urls?: string[];\n model?: string;\n project?: string;\n /** 'personal' = \"sem projeto, cobra de mim\". Incompatível com `project`. */\n billing?: 'personal';\n }): Promise<AnalyzeMediaResponse> {\n // Generous timeout: large video/audio is uploaded to the Gemini Files API\n // and may take a while to process before the model answers.\n return this.request('POST', '/analyze-media', { body, timeoutMs: 300_000 });\n }\n\n searchCalls(query: {\n query?: string;\n project?: string;\n client?: string;\n company?: string;\n visibility?: string;\n speaker?: string;\n mine?: boolean;\n limit?: number;\n }): Promise<SearchCallsResponse> {\n return this.request('GET', '/calls', {\n query: {\n query: query.query,\n project: query.project,\n client: query.client,\n company: query.company,\n visibility: query.visibility,\n speaker: query.speaker,\n mine: query.mine ? 'true' : undefined,\n limit: query.limit,\n },\n });\n }\n\n getCall(id: string): Promise<GetCallResponse> {\n return this.request('GET', `/calls/${id}`);\n }\n}\n","import type { BeplusClient } from '../api/client';\n\n/**\n * Nota injetada nas descrições das tools de geração. Faz o agente PERGUNTAR\n * antes de tentar gerar quando a conta é de equipe e não há projeto ativo —\n * em vez de chamar a tool às cegas e só descobrir no erro.\n */\nexport const TEAM_GATING_NOTE =\n ' ⚠️ DESTINO DA GERAÇÃO: toda imagem/vídeo vai para o CLIENTE + PROJETO ATIVOS. ' +\n 'ANTES de gerar, SEMPRE confirme com o usuário em qual cliente e projeto trabalhar — ' +\n 'MESMO que já exista um projeto ativo, ele pode ter ficado de uma sessão anterior (NÃO confie no ativo herdado). ' +\n 'Fluxo: chame list_clients e list_projects, mostre o ativo atual + as opções, e peça pro usuário escolher/confirmar ' +\n '(set_active_client + set_active_project, ou passe `project` na tool). Pode criar novos com create_client / create_project. ' +\n 'Só gere depois que o usuário confirmar o cliente+projeto de destino — nunca gere no ativo herdado sem confirmar.';\n\n/** Reconhece o erro de gating de equipe vindo do backend (texto da mensagem). */\nexport function isTeamGatingError(msg?: string): boolean {\n return !!msg && /cliente e um projeto|selecione um cliente|sem cliente vinculado|antes de gerar/i.test(msg);\n}\n\n/** Reconhece o bloqueio por budget esgotado do cliente/projeto (HTTP 400/402). */\nexport function isBudgetBlockedError(msg?: string): boolean {\n return !!msg && /budget/i.test(msg);\n}\n\n/** Guidance anexada ao erro quando o pote do budget acabou. */\nexport const BUDGET_BLOCKED_GUIDANCE =\n '💡 O pote deste projeto/cliente acabou. Um admin pode recarregar em Admin → IA Lab → Projetos/Clientes. ' +\n 'Alternativa: trocar o projeto ativo com `set_active_project`.';\n\n/**\n * Monta a mensagem guiada quando a geração é bloqueada por falta de\n * cliente/projeto: explica a regra e JÁ devolve a lista de clientes e projetos\n * pra o agente apresentar e o usuário escolher.\n */\nexport async function buildPickProjectMessage(client: BeplusClient): Promise<string> {\n let clientsTxt = ' (não foi possível listar clientes)';\n let projectsTxt = ' (não foi possível listar projetos)';\n try {\n const { clients } = await client.listClients();\n clientsTxt = clients.length\n ? clients.map((c) => ` • ${c.code} — ${c.name}`).join('\\n')\n : ' (nenhum cliente ainda — crie com create_client)';\n } catch {\n /* mantém fallback */\n }\n try {\n const { projects } = await client.listProjects();\n projectsTxt = projects.length\n ? projects\n .map(\n (p) =>\n ` • ${p.code} — ${p.name}` +\n (p.client_name ? ` (cliente: ${p.client_name})` : ' (⚠️ sem cliente — vincule um antes)'),\n )\n .join('\\n')\n : ' (nenhum projeto ainda — crie com create_project)';\n } catch {\n /* mantém fallback */\n }\n return (\n '⚠️ Esta conta é de EQUIPE: gerar exige um CLIENTE e um PROJETO ativos. Nada foi gerado ainda.\\n' +\n 'Pergunte ao usuário em qual cliente/projeto vincular ANTES de gerar.\\n\\n' +\n `Clientes disponíveis:\\n${clientsTxt}\\n\\nProjetos disponíveis:\\n${projectsTxt}\\n\\n` +\n 'Para prosseguir: set_active_client + set_active_project (ou passe `project=<code>` no generate). ' +\n 'Se o projeto escolhido estiver sem cliente, vincule um primeiro (no admin/IA Lab).'\n );\n}\n","import type { BeplusClient } from './api/client';\nimport type { GenerationStatus } from './api/types';\n\nexport interface PollResult {\n /** True if the generation reached a terminal state within the budget. */\n settled: boolean;\n status: GenerationStatus;\n}\n\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\n/**\n * Poll a generation until it completes/fails or the time budget runs out.\n * On timeout returns settled=false with the last status (the work is still\n * running on the backend and was already charged — the caller tells the user\n * to follow up with check_generation).\n *\n * Backoff: 1.5s → ×1.4 → cap 5s, with ±250ms jitter.\n */\nexport async function pollUntilDone(\n client: BeplusClient,\n generationId: string,\n budgetMs: number,\n jitterSeed = 0\n): Promise<PollResult> {\n const start = Date.now();\n let interval = 1500;\n let last: GenerationStatus | undefined;\n let tick = 0;\n\n while (Date.now() - start < budgetMs) {\n const status = await client.getStatus(generationId);\n last = status;\n\n if (status.status === 'completed' || status.status === 'failed') {\n return { settled: true, status };\n }\n\n // Deterministic jitter (no Math.random — keeps behavior reproducible).\n const jitter = ((jitterSeed + tick) % 5) * 100 - 250;\n await sleep(Math.max(500, interval + jitter));\n interval = Math.min(Math.round(interval * 1.4), 5000);\n tick += 1;\n }\n\n if (!last) last = await client.getStatus(generationId);\n return { settled: last.status === 'completed' || last.status === 'failed', status: last };\n}\n","import { readFile, stat } from 'node:fs/promises';\nimport { refuseLocalPath, safeFetch } from './remote';\nimport { basename, extname, isAbsolute, resolve } from 'node:path';\nimport { homedir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\nimport { ApiError } from './api/errors';\nimport { fetchWithAuth } from './auth';\nimport type { Config } from './config';\n\n/**\n * Reference inputs (image-to-image, first/last frame, reference videos/audios)\n * must reach the IA-Lab as PUBLIC URLs — the providers fetch them server-side.\n * The MCP previously only accepted URLs, so a local file path (the most natural\n * thing to pass from a chat) failed. This module transparently uploads any local\n * path to R2 via the platform's own `POST /api/v1/files/upload` (PAT-authed,\n * returns a public storage.beplus.academy URL) and swaps it in.\n *\n * O mesmo upload serve o `canvas_upload_media` (arquivo local OU URL para o\n * board): um caminho só, com o teto e a lista de formatos da rota.\n */\n\nconst MIME_BY_EXT: Record<string, string> = {\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.jpeg': 'image/jpeg',\n '.webp': 'image/webp',\n '.gif': 'image/gif',\n '.avif': 'image/avif',\n '.heic': 'image/heic',\n '.heif': 'image/heif',\n '.bmp': 'image/bmp',\n '.tif': 'image/tiff',\n '.tiff': 'image/tiff',\n '.svg': 'image/svg+xml',\n '.mp4': 'video/mp4',\n '.mov': 'video/quicktime',\n '.webm': 'video/webm',\n '.m4v': 'video/x-m4v',\n '.mkv': 'video/x-matroska',\n '.mpeg': 'video/mpeg',\n '.mpg': 'video/mpeg',\n '.avi': 'video/x-msvideo',\n '.3gp': 'video/3gpp',\n '.mp3': 'audio/mpeg',\n '.wav': 'audio/wav',\n '.m4a': 'audio/mp4',\n '.aac': 'audio/aac',\n '.ogg': 'audio/ogg',\n '.oga': 'audio/ogg',\n '.opus': 'audio/opus',\n '.flac': 'audio/flac',\n '.aiff': 'audio/aiff',\n '.aif': 'audio/aiff',\n '.pdf': 'application/pdf',\n '.md': 'text/markdown',\n '.txt': 'text/plain',\n};\n\n/**\n * Extensões que `POST /api/v1/files/upload` aceita (`generationFileFilter` em\n * academy-backend src/utils/fileUpload.ts). Fora da lista o multer descarta o\n * arquivo em silêncio e a API responde 422 \"No file uploaded\": melhor barrar\n * antes, dizendo o motivo.\n */\nexport const UPLOAD_EXTENSIONS = [\n 'jpg', 'jpeg', 'png', 'gif', 'webp', 'avif', 'heic', 'heif', 'bmp', 'tif', 'tiff',\n 'mp4', 'webm', 'mov', 'm4v', 'mkv', 'mpeg', 'mpg', 'avi', 'flv', 'wmv', '3gp', '3gpp',\n 'mp3', 'wav', 'ogg', 'oga', 'aac', 'flac', 'm4a', 'opus', 'wma', 'aiff', 'aif',\n 'pdf', 'md', 'txt', 'markdown',\n];\n\n/**\n * Teto efetivo: 95 MB. O multer da rota aceita 300 MB, mas api.beplus.academy\n * passa pelo proxy da Cloudflare, que corta corpo acima de 100 MB antes de o\n * Express ver o pedido (comentário de `CANVAS_EXPORT_MAX_BYTES` no mesmo\n * fileUpload.ts). Os 5 MB de folga cobrem o envelope do multipart.\n */\nexport const MAX_UPLOAD_BYTES = 95 * 1024 * 1024;\nconst UPLOAD_TIMEOUT_MS = 120_000;\nconst DOWNLOAD_TIMEOUT_MS = 120_000;\n\n/** Onde a rota de arquivos publica (R2). URL daqui já está na plataforma. */\nexport const BEPLUS_STORAGE_HOST = 'storage.beplus.academy';\n\nexport function isRemoteRef(ref: string): boolean {\n return /^https?:\\/\\//i.test(ref);\n}\n\n/** Resolve a local-file reference to an absolute path (file://, ~, absolute, relative). */\nexport function toLocalPath(ref: string): string {\n refuseLocalPath(ref);\n if (ref.startsWith('file://')) return fileURLToPath(ref);\n if (ref === '~') return homedir();\n if (ref.startsWith('~/')) return resolve(homedir(), ref.slice(2));\n return isAbsolute(ref) ? ref : resolve(process.cwd(), ref);\n}\n\nexport function mimeForName(name: string): string {\n return MIME_BY_EXT[extname(name).toLowerCase()] ?? 'application/octet-stream';\n}\n\nconst extOf = (name: string) => extname(name).slice(1).toLowerCase();\n\n/** \"143,2\": megabytes com uma casa, vírgula decimal. */\nexport function mb(bytes: number): string {\n return (bytes / 1024 / 1024).toFixed(1).replace('.', ',');\n}\n\nfunction tooLarge(name: string, bytes: number | null): ApiError {\n const size = bytes === null ? 'passa' : `tem ${mb(bytes)} MB,`;\n return new ApiError(\n 413,\n `\"${name}\" ${size} acima do teto de 95 MB para subir pela API (o proxy da Cloudflare corta ` +\n 'corpo acima de 100 MB antes de chegar no servidor). Comprima ou corte o arquivo ' +\n '(ex.: ffmpeg -i entrada.mp4 -crf 26 saida.mp4) e tente de novo.'\n );\n}\n\nexport interface LoadedFile {\n buf: Buffer;\n /** Nome com extensão aceita pela rota (é ela que o multer confere). */\n name: string;\n mime: string;\n /** Caminho no disco, quando veio de arquivo local. */\n localPath?: string;\n}\n\n/** Lê um arquivo local, conferindo o teto ANTES de carregar os bytes. */\nexport async function loadLocal(ref: string, maxBytes = MAX_UPLOAD_BYTES): Promise<LoadedFile> {\n const abs = toLocalPath(ref);\n const name = basename(abs);\n let size: number;\n try {\n size = (await stat(abs)).size;\n } catch {\n throw new ApiError(\n 0,\n `Arquivo local não encontrado: \"${ref}\". Passe um caminho válido ou uma URL pública (http/https).`,\n );\n }\n if (size > maxBytes) throw maxBytes === MAX_UPLOAD_BYTES ? tooLarge(name, size) : new ApiError(413, `O arquivo deve ter até ${mb(maxBytes)} MB.`);\n return { buf: await readFile(abs), name, mime: mimeForName(abs), localPath: abs };\n}\n\n/**\n * Baixa uma URL com o mesmo teto: recusa pelo `content-length` quando o servidor\n * informa, e corta a leitura no byte 95 MB + 1 quando não informa.\n */\nexport async function loadRemote(url: string, maxBytes = MAX_UPLOAD_BYTES): Promise<LoadedFile> {\n const u = new URL(url);\n let name = decodeURIComponent(basename(u.pathname)) || 'arquivo';\n let res: Response;\n try {\n res = await safeFetch(url, { signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) });\n } catch (e) {\n if (e instanceof ApiError) throw e;\n throw new ApiError(0, `Não consegui baixar ${url} (rede ou tempo esgotado).`);\n }\n if (!res.ok) {\n await res.body?.cancel().catch(() => {});\n throw new ApiError(res.status, `Não consegui baixar ${url}: a origem respondeu HTTP ${res.status}.`);\n }\n const declared = Number(res.headers.get('content-length') ?? NaN);\n if (Number.isFinite(declared) && declared > maxBytes) {\n await res.body?.cancel().catch(() => {});\n throw maxBytes === MAX_UPLOAD_BYTES ? tooLarge(name, declared) : new ApiError(413, `O arquivo deve ter até ${mb(maxBytes)} MB.`);\n }\n const chunks: Buffer[] = [];\n let total = 0;\n try {\n const reader = res.body?.getReader();\n if (reader) {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n total += value.byteLength;\n if (total > maxBytes) {\n await reader.cancel().catch(() => {});\n throw maxBytes === MAX_UPLOAD_BYTES ? tooLarge(name, null) : new ApiError(413, `O arquivo deve ter até ${mb(maxBytes)} MB.`);\n }\n chunks.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength));\n }\n }\n } catch (e) {\n if (e instanceof ApiError) throw e;\n throw new ApiError(0, `O download de ${url} caiu no meio (rede ou tempo esgotado).`);\n }\n const buf = Buffer.concat(chunks);\n\n // O multer confere a extensão do nome: URL sem extensão ganha a do content-type.\n const typed = (res.headers.get('content-type') ?? '').split(';')[0].trim().toLowerCase();\n let mime = mimeForName(name);\n if (mime === 'application/octet-stream' && typed) {\n const ext = Object.entries(MIME_BY_EXT).find(([, m]) => m === typed)?.[0];\n if (ext) {\n name = `${name.replace(/\\.$/, '')}${ext}`;\n mime = typed;\n }\n }\n return { buf, name, mime };\n}\n\n/**\n * Sobe bytes pela rota de arquivos e devolve a URL pública. Passa pelo\n * `fetchWithAuth`: no login pelo navegador, token vencido é renovado e o envio\n * repete uma vez.\n */\nexport async function uploadBytes(cfg: Config, file: { buf: Buffer; name: string; mime: string }): Promise<string> {\n const { buf, name, mime } = file;\n if (!UPLOAD_EXTENSIONS.includes(extOf(name))) {\n throw new ApiError(\n 422,\n `\"${name}\" não sobe pela rota de arquivos da BePlus: a extensão não está na lista aceita ` +\n `(${UPLOAD_EXTENSIONS.join(', ')}). Converta para um desses formatos.`,\n );\n }\n if (buf.byteLength > MAX_UPLOAD_BYTES) throw tooLarge(name, buf.byteLength);\n\n const form = new FormData();\n form.append('file', new Blob([buf], { type: mime }), name);\n\n const res = await fetchWithAuth(\n cfg,\n `${cfg.baseUrl}/api/v1/files/upload`,\n { method: 'POST', body: form, timeoutMs: UPLOAD_TIMEOUT_MS },\n `upload de \"${name}\"`,\n );\n\n let json: any;\n try {\n const text = await res.text();\n json = text ? JSON.parse(text) : undefined;\n } catch {\n /* corpo fora de JSON (ex.: 413 da borda da Cloudflare, em HTML) */\n }\n\n if (!res.ok) {\n const message = json?.message || res.statusText || `HTTP ${res.status}`;\n if (res.status === 413) throw tooLarge(name, buf.byteLength);\n if (res.status === 403) {\n throw new ApiError(\n 403,\n `Sem permissão para subir \"${name}\" (${message}). No login pelo navegador, subir arquivo exige ` +\n 'a permissão ialab:spend: rode `beplus-mcp login` e autorize.',\n json,\n );\n }\n if (res.status === 422) {\n throw new ApiError(422, `O servidor não aceitou \"${name}\" (${message}). Confira o formato do arquivo.`, json);\n }\n throw new ApiError(res.status, `Upload de \"${name}\" falhou: ${message}`, json);\n }\n\n const fileUrl: string | undefined = json?.result?.file_url ?? json?.file_url;\n if (!fileUrl) {\n throw new ApiError(0, `O upload de \"${name}\" não retornou uma URL pública.`);\n }\n return fileUrl;\n}\n\n/** Upload one local file to R2 and return its public URL. */\nasync function uploadFile(cfg: Config, ref: string): Promise<string> {\n return uploadBytes(cfg, await loadLocal(ref));\n}\n\n/** Public URL → passthrough; local path → upload to R2 and return the public URL. */\nexport async function resolveRef(cfg: Config, ref: string | undefined): Promise<string | undefined> {\n if (!ref) return ref;\n return isRemoteRef(ref) ? ref : uploadFile(cfg, ref);\n}\n\n/** Same as {@link resolveRef} for an array; locals upload in parallel. */\nexport async function resolveRefs(\n cfg: Config,\n refs: string[] | undefined,\n): Promise<string[] | undefined> {\n if (!refs || refs.length === 0) return refs;\n return Promise.all(refs.map((r) => (isRemoteRef(r) ? Promise.resolve(r) : uploadFile(cfg, r))));\n}\n","/**\n * Modo remoto: o mesmo servidor MCP rodando dentro da API (conector por URL), e não no computador da pessoa.\n * Ali o processo não pode ler o próprio disco nem baixar endereço da rede interna a pedido de quem chama.\n */\nimport { lookup } from 'node:dns/promises';\nimport { isIP } from 'node:net';\nimport { ApiError } from './api/errors';\n\nlet remote = false;\n\n/** Liga uma vez no processo do servidor remoto; vale para todas as ferramentas, sem depender de cada uma lembrar. */\nexport function enableRemoteMode(): void {\n remote = true;\n}\n\nexport function isRemoteMode(): boolean {\n return remote;\n}\n\nexport function refuseLocalPath(ref: string): void {\n if (!remote) return;\n throw new ApiError(\n 0,\n `\"${ref}\" é um caminho de arquivo, e esta conexão roda no servidor da BePlus, que não enxerga o seu computador. ` +\n 'Mande uma URL pública (http/https) ou suba o arquivo pela plataforma e use o link dele.',\n );\n}\n\nconst MAX_REDIRECTS = 5;\n\nfunction v4Private(ip: string): boolean {\n const [a, b] = ip.split('.').map(Number) as [number, number];\n return (\n a === 0 || a === 10 || a === 127 || (a === 169 && b === 254) || (a === 172 && b >= 16 && b <= 31) ||\n (a === 192 && b === 168) || (a === 100 && b >= 64 && b <= 127) || a >= 224\n );\n}\n\nfunction privateAddress(ip: string): boolean {\n if (isIP(ip) === 4) return v4Private(ip);\n const v6 = ip.toLowerCase();\n // IPv4 dentro de IPv6: o parser de URL entrega \"::ffff:7f00:1\" mesmo quando se escreveu \"::ffff:127.0.0.1\"\n const dotted = /^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/.exec(v6);\n if (dotted) return v4Private(dotted[1]!);\n const hex = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(v6);\n if (hex) {\n const hi = parseInt(hex[1]!, 16);\n const lo = parseInt(hex[2]!, 16);\n return v4Private(`${hi >> 8}.${hi & 255}.${lo >> 8}.${lo & 255}`);\n }\n return v6 === '::' || v6 === '::1' || /^f[cd]/.test(v6) || /^fe[89ab]/.test(v6) || /^ff/.test(v6);\n}\n\nasync function assertPublic(url: URL): Promise<void> {\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new ApiError(0, `Só baixo endereço http ou https: ${url.href}`);\n }\n const host = url.hostname.replace(/^\\[|\\]$/g, '').toLowerCase();\n if (host === 'localhost' || host.endsWith('.localhost') || host.endsWith('.internal') || host.endsWith('.local')) {\n throw new ApiError(0, `Endereço interno não é aceito: ${url.host}`);\n }\n const addrs = isIP(host) ? [{ address: host }] : await lookup(host, { all: true }).catch(() => []);\n if (addrs.length === 0) throw new ApiError(0, `Não encontrei o endereço ${url.host}.`);\n if (addrs.some((a) => privateAddress(a.address))) {\n throw new ApiError(0, `Endereço de rede privada não é aceito: ${url.host}`);\n }\n}\n\n/**\n * fetch de URL que veio de quem chama. Fora do modo remoto é o fetch normal. No remoto, confere o destino\n * e segue cada redirecionamento à mão, conferindo de novo: um 302 para a rede interna é o desvio clássico.\n */\nexport async function safeFetch(input: string, init: RequestInit = {}): Promise<Response> {\n if (!remote) return fetch(input, init);\n let url = new URL(input);\n for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {\n await assertPublic(url);\n const res = await fetch(url, { ...init, redirect: 'manual' });\n const location = res.headers.get('location');\n if (res.status >= 300 && res.status < 400 && location) {\n await res.body?.cancel().catch(() => {});\n url = new URL(location, url);\n continue;\n }\n return res;\n }\n throw new ApiError(0, `Redirecionamentos demais ao baixar ${input}.`);\n}\n","/**\n * stderr-only logger. stdout is the JSON-RPC channel for stdio transport — a\n * single stray byte there corrupts the protocol. NEVER log the PAT here.\n */\nfunction fmt(a: unknown): string {\n return typeof a === 'string' ? a : JSON.stringify(a);\n}\n\nexport function logInfo(...args: unknown[]): void {\n process.stderr.write(`[beplus] ${args.map(fmt).join(' ')}\\n`);\n}\n\nexport function logError(...args: unknown[]): void {\n process.stderr.write(`[beplus][error] ${args.map(fmt).join(' ')}\\n`);\n}\n","import type { Config } from './config';\nimport type {\n AnalyzeModelInfo,\n BudgetSnapshot,\n GenerationStatus,\n StartGenerationResponse,\n WeeklyAllowance,\n} from './api/types';\nimport { logError } from './log';\n\n/** 'YYYY-MM-DD' → 'dd/mm'. */\nfunction fmtResetDate(iso: string): string {\n const [, m, d] = iso.split('-');\n return d && m ? `${d}/${m}` : iso;\n}\n\n/**\n * Linha(s) do crédito semanal da equipe (estilo plano) — mostra o % usado,\n * quanto resta, e avisa nos thresholds. Vazio quando a feature está desligada.\n */\nexport function weeklyAllowanceLine(wa: WeeklyAllowance | undefined): string {\n if (!wa || !wa.enabled) return '';\n if (wa.unlimited) return '♾️ Limite semanal: ilimitado (sua conta é isenta).';\n const pct = wa.percentUsed;\n const icon = pct >= 100 ? '🛑' : pct >= wa.warnThresholdPercent ? '⚠️' : '📊';\n let line = `${icon} Limite semanal: ${pct}% usado · ${wa.remaining} de ${wa.quota} restantes`;\n if (pct >= 100) {\n line += `\\n🛑 Limite semanal atingido — reseta em ${fmtResetDate(wa.periodEnd)}.`;\n } else if (pct >= wa.warnThresholdPercent) {\n line += `\\n⚠️ Seu limite semanal está acabando — reseta em ${fmtResetDate(wa.periodEnd)}.`;\n }\n return line;\n}\n\n/**\n * Linha do budget compartilhado do cliente/projeto (pote em 💎-eq) — mostra\n * quanto resta do pote e avisa nos thresholds. Vazio quando não há budget\n * aplicável ou a feature está desligada.\n */\nexport function budgetLine(b: BudgetSnapshot | undefined): string {\n if (!b || !b.enabled) return '';\n const scope = b.scope === 'client' ? 'cliente' : 'projeto';\n const pct = b.percentUsed;\n const exhausted = pct >= 100 || b.remainingDiamonds <= 0;\n const icon = exhausted ? '🛑' : pct >= 80 ? '⚠️' : '🧾';\n let line = `${icon} Budget do ${scope}: ${b.remainingDiamonds} de ${b.quotaDiamonds}💎 restantes (${pct}% usado)`;\n if (exhausted) line += ' — peça a um admin para recarregar';\n return line;\n}\n\n// ── Catálogo de análise multimodal (analyze_media) ───────────────────────────\n\n// As chaves são as que o backend manda em `tier` (economy/mid/top). O rótulo em\n// PT-BR do próprio backend (`tierLabel`) tem preferência sobre estes textos.\nconst TIER_ORDER = ['economy', 'mid', 'top'] as const;\n\nconst TIER_LABEL: Record<string, string> = {\n economy: '💚 Econômico (rápido e barato)',\n mid: '💛 Médio (equilíbrio)',\n top: '❤️ Top (mais capaz, mais caro)',\n};\n\n/** Backend antigo mandava o rótulo PT-BR no lugar da chave: continua ordenando. */\nconst TIER_ALIAS: Record<string, string> = {\n economico: 'economy',\n medio: 'mid',\n};\n\n/** Tira acento e caixa: o backend pode mandar \"econômico\" ou \"economico\". */\nfunction normalizeTier(tier: string | undefined): string {\n if (!tier) return '';\n const normalized = tier\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .trim()\n .toLowerCase();\n return TIER_ALIAS[normalized] ?? normalized;\n}\n\n/** Preço sempre com 2 casas: 0.3 sozinho passa por \"30 centavos\" numa leitura rápida. */\nfunction usd(value: number): string {\n return `$${value.toFixed(2)}`;\n}\n\nfunction acceptsLine(accepts: AnalyzeModelInfo['accepts']): string {\n const parts: string[] = [];\n if (accepts.images > 0) parts.push(`imagem (até ${accepts.images})`);\n if (accepts.videos > 0) parts.push(`vídeo (até ${accepts.videos})`);\n if (accepts.audios > 0) parts.push(`áudio (até ${accepts.audios})`);\n if (accepts.pdfs > 0) parts.push(`PDF (até ${accepts.pdfs})`);\n return parts.length ? parts.join(', ') : 'só texto';\n}\n\nfunction analyzeModelLine(m: AnalyzeModelInfo): string {\n const provider = m.provider ? ` · ${m.provider}` : '';\n return (\n ` • ${m.model} · ${m.label}${provider}\\n` +\n ` ${usd(m.inputCostPerMillion)} entrada / ${usd(m.outputCostPerMillion)} saída por 1M tokens · aceita ${acceptsLine(m.accepts)}`\n );\n}\n\n/**\n * Catálogo do analyze_media agrupado por faixa de preço, na ordem barato → top.\n * A ordem do backend é preservada dentro de cada faixa, e uma faixa desconhecida\n * (ou ausente) vira um grupo próprio no fim, em vez de sumir da lista.\n */\nexport function analyzeCatalogBlock(models: AnalyzeModelInfo[] | undefined): string {\n if (!models?.length) return '';\n\n const groups = new Map<string, AnalyzeModelInfo[]>();\n for (const m of models) {\n const key = normalizeTier(typeof m.tier === 'string' ? m.tier : undefined);\n const bucket = groups.get(key);\n if (bucket) bucket.push(m);\n else groups.set(key, [m]);\n }\n\n const known = TIER_ORDER.filter((t) => groups.has(t));\n const unknown = [...groups.keys()].filter((k) => !TIER_ORDER.includes(k as (typeof TIER_ORDER)[number]));\n // Backend sem faixa nenhuma: lista simples, sem um título \"Outros\" que não informa nada.\n const untiered = groups.size === 1 && groups.has('');\n const sections = [...known, ...unknown].map((key) => {\n const bucket = groups.get(key)!;\n const lines = bucket.map(analyzeModelLine).join('\\n');\n if (untiered) return lines;\n // Faixa que este pacote ainda não conhece: usa o rótulo PT-BR que o backend\n // manda, para um tier novo não sair com a chave crua em inglês na tela.\n const fallback = bucket[0]?.tierLabel?.trim();\n const heading =\n TIER_LABEL[key] ?? (fallback || (key ? `Faixa ${key}` : 'Sem faixa definida'));\n return `${heading}:\\n${lines}`;\n });\n\n // A dica de vídeo sai dos dados, nunca de uma lista fixa: modelo novo no\n // backend entra aqui sem republicar o pacote.\n const videoAliases = models.filter((m) => m.accepts.videos > 0).map((m) => m.model);\n const videoHint =\n videoAliases.length && videoAliases.length < models.length\n ? `\\nVídeo e áudio só em: ${videoAliases.join(', ')}.`\n : '';\n\n return (\n '\\n\\nAnálise multimodal (tool analyze_media · prompt + mídia → texto):\\n' +\n sections.join('\\n') +\n '\\nPasse o apelido em `model`.' +\n videoHint\n );\n}\n\nexport type ContentBlock =\n | { type: 'text'; text: string }\n | { type: 'image'; data: string; mimeType: string };\n\nexport interface ToolResult {\n // Index signature to satisfy the SDK's CallToolResult shape.\n [x: string]: unknown;\n content: ContentBlock[];\n isError?: boolean;\n}\n\nexport function textResult(s: string): ToolResult {\n return { content: [{ type: 'text', text: s }] };\n}\n\nexport function errorResult(s: string): ToolResult {\n return { content: [{ type: 'text', text: s }], isError: true };\n}\n\n/** Drop undefined/null keys so we never send empty params to the backend. */\nexport function compact<T extends Record<string, unknown>>(obj: T): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n if (v !== undefined && v !== null) out[k] = v;\n }\n return out;\n}\n\n/**\n * `project` a mandar pra API (A5, 24/set/2026): `billing: 'personal'` pula\n * TANTO o argumento explícito QUANTO o projeto ativo salvo localmente\n * (`cfg.activeProject`) — sem isto o cliente mandaria `billing: 'personal'`\n * E `project: <ativo>` juntos, e a API rejeitaria com `billing_conflict`\n * mesmo quando o usuário pediu \"pessoal\" de propósito. Compartilhado por\n * generate_image/generate_video/midjourney_action/generate_music/upscale.\n */\nexport function resolveProjectArg(\n project: string | undefined,\n billing: 'personal' | undefined,\n activeProject: string | null | undefined,\n): string | undefined {\n if (billing === 'personal') return undefined;\n return project ?? activeProject ?? undefined;\n}\n\n/** Rótulo de quem pagou, para o custo nunca ser lido como débito na conta pessoal. */\nconst CHARGED_FROM_LABEL: Record<string, string> = {\n budget: 'do budget do projeto',\n weekly_allowance: 'do crédito semanal da equipe',\n unlimited: 'sem consumo (limite livre)',\n free: 'sem custo (modo relaxed)',\n};\n\nexport function costFooter(start: StartGenerationResponse, cfg: Config): string {\n const parts: string[] = [];\n const paidElsewhere = CHARGED_FROM_LABEL[start.charged_from ?? ''];\n if (typeof start.diamond_cost === 'number') {\n parts.push(`Custo: ${start.diamond_cost} 💎${paidElsewhere ? ` (${paidElsewhere})` : ''}`);\n }\n // O saldo pessoal só entra quando foi ELE que pagou. Mostrá-lo ao lado de uma\n // cobrança de budget fazia parecer que o pote não estava sendo usado.\n if (!paidElsewhere && typeof start.new_balance === 'number') {\n parts.push(`Saldo: ${start.new_balance} 💎`);\n }\n let footer = parts.join(' · ');\n if (\n cfg.costWarnThreshold &&\n typeof start.diamond_cost === 'number' &&\n start.diamond_cost > cfg.costWarnThreshold\n ) {\n footer = `⚠ Custo alto (${start.diamond_cost} 💎)\\n${footer}`;\n }\n // Anuncia em qual projeto a geração foi vinculada (espelha o seletor da web).\n // Quando a geração cobrou do budget do cliente/projeto, a linha do pote entra\n // logo após a do projeto (a allowance segue intocada — o backend só a envia\n // quando cobrou do crédito semanal).\n const budget = budgetLine(start.budget);\n if (start.project_code) {\n let proj = `📁 Projeto: ${start.project_code}${start.project_name ? ` — ${start.project_name}` : ''}`;\n if (budget) proj = `${proj}\\n${budget}`;\n footer = footer ? `${proj}\\n${footer}` : proj;\n } else if (budget) {\n footer = footer ? `${budget}\\n${footer}` : budget;\n }\n // Crédito semanal da equipe (quando ligado) — subiu com esta geração.\n const wa = weeklyAllowanceLine(start.weekly_allowance);\n if (wa) footer = footer ? `${footer}\\n${wa}` : wa;\n return footer;\n}\n\nexport function outputUrls(status: GenerationStatus): string[] {\n return (status.output?.urls ?? []).filter((u): u is string => typeof u === 'string' && u.length > 0);\n}\n\nfunction mimeFromUrl(url: string): string {\n const u = url.toLowerCase();\n if (u.includes('.webp')) return 'image/webp';\n if (u.includes('.jpg') || u.includes('.jpeg')) return 'image/jpeg';\n return 'image/png';\n}\n\n/**\n * Fetch generated images and return them as inline content blocks so the user\n * sees the picture immediately. Capped in count and size to avoid bloating the\n * JSON-RPC payload (4K images can be several MB). Falls back to URL-only when\n * disabled or when an image is too large.\n */\nexport async function buildImageBlocks(urls: string[], cfg: Config): Promise<ContentBlock[]> {\n if (!cfg.inlineImages) return [];\n const blocks: ContentBlock[] = [];\n\n for (const url of urls.slice(0, cfg.inlineImageMax)) {\n try {\n const res = await fetch(url);\n if (!res.ok) continue;\n const mimeType = res.headers.get('content-type') || mimeFromUrl(url);\n if (!mimeType.startsWith('image/')) continue; // skip videos/audio — URL only\n const buf = Buffer.from(await res.arrayBuffer());\n if (buf.byteLength > cfg.inlineImageMaxBytes) continue; // too big — URL only\n blocks.push({ type: 'image', data: buf.toString('base64'), mimeType });\n } catch (e) {\n logError('failed to inline image', url, (e as Error)?.message ?? 'unknown');\n }\n }\n\n return blocks;\n}\n","// Mirrors the backend catalog. `list_models` is the runtime source of truth —\n// if the backend adds/blocks a model these enums may lag, so the tools also\n// surface the backend's validation errors verbatim.\n\nexport const IMAGE_MODELS = [\n 'google/nano-banana-2.1',\n 'google/nano-banana-2',\n 'google/nano-banana-pro',\n 'openai/gpt-image-2',\n 'openai/gpt-image-1',\n 'bytedance/seedream-5.0-lite',\n 'bytedance/seedream-5.0-pro',\n 'bytedance/seedream-5.0-pro-layers',\n 'midjourney',\n] as const;\n\n/**\n * Presets de `size` do Seedream 5.0. NÃO são simétricos entre os dois modelos —\n * o Lite vai a 4K e o Pro trava em 2K (provado por probe ao vivo, não é engano).\n * O handler de generate_image valida por modelo e devolve erro claro.\n */\nexport const SEEDREAM_SIZES = ['1K', '1.5K', '2K', '3K', '4K'] as const;\nexport const SEEDREAM_LITE_SIZES = ['2K', '3K', '4K'] as const;\n// Probe 27/set/2026: 1.5K existe no Pro; 3K e 4K a API recusa.\nexport const SEEDREAM_PRO_SIZES = ['1K', '1.5K', '2K'] as const;\n/** Seedream Pro: limites de área do `size` livre (LARGURAxALTURA), iguais aos da API. */\nexport const SEEDREAM_PRO_PIXELS = { min: 921_600, max: 4_624_220 } as const;\nexport const SEEDREAM_PRO_MAX_IMAGES = 4;\n/** Camadas: a base segue a imagem enviada ('auto') ou um preset do Pro. Tamanho livre não existe. */\nexport const SEEDREAM_LAYERS_SIZES = ['auto', '1K', '1.5K', '2K'] as const;\n\nexport const VIDEO_MODELS = [\n 'bytedance/seedance-2.5',\n 'bytedance/seedance-2.0',\n 'bytedance/seedance-2.0-fast',\n 'bytedance/seedance-2.0-mini',\n 'kwaivgi/kling-v2.5-turbo-pro',\n 'kwaivgi/kling-v2.6',\n 'kwaivgi/kling-v2.6-motion-control',\n 'kwaivgi/kling-v3-video',\n 'kwaivgi/kling-v3-omni-video',\n] as const;\n\n/**\n * Upscale (Topaz via fal). Recebem uma mídia de ENTRADA e devolvem a mesma em\n * resolução maior — não geram nada do zero, então não entram em IMAGE/VIDEO_MODELS.\n * Vídeo: no máximo 30s e saída até 1080p, e restrito à equipe no backend.\n */\nexport const UPSCALE_MODELS = [\n 'topaz/upscale/image/generative',\n 'topaz/upscale/video/generative',\n] as const;\n\nexport const UPSCALE_IMAGE_VARIANTS = [\n 'Wonder 3.5', 'Wonder 3', 'Wonder 2', 'Wonder',\n 'Recover 3', 'Standard MAX', 'Redefine', 'Recovery V2', 'Recovery',\n] as const;\n\nexport const UPSCALE_VIDEO_VARIANTS = [\n 'Starlight Precise 2.6', 'Starlight HQ', 'Starlight Mini',\n 'Starlight Sharp', 'Starlight Fast 2',\n] as const;\n\n// v6 (09/set/2026) aposentou v3.5 a v5.5: o provedor serve os ids antigos com v6.\nexport const MUSIC_MODELS = [\n 'suno/v6',\n 'suno/v6-wild',\n 'suno/v6-mini',\n 'suno/v5-5',\n 'suno/v4-5',\n] as const;\n\nexport const MUSIC_TASK_TYPES = ['create', 'extend', 'cover', 'upload_extend', 'upload_cover', 'sample'] as const;\n\nexport const MUSIC_TOOLS = ['wav', 'midi', 'stems-basic', 'stems-full', 'bpm', 'lyrics-timeline'] as const;\n\n/** vocal_gender é aceito por todos os modelos Suno (desde o v6). */\nexport const VOCAL_GENDERS = ['f', 'm'] as const;\n\nexport const TTS_MODELS = [\n 'seed-audio-1.0',\n 'gemini-3.8-flash-lite-tts',\n 'gemini-3.8-flash-tts',\n 'gemini-3.1-flash-tts-preview',\n 'gemini-2.5-pro-preview-tts',\n] as const;\n\n/** Só os modelos 3.8 aceitam voz da biblioteca, tags vocais e estilo por locutor. */\nexport const TTS_MODELS_38: readonly string[] = ['gemini-3.8-flash-lite-tts', 'gemini-3.8-flash-tts'];\n\n/** Id de voz da biblioteca (ex.: pt-br-advisor-10). As 30 clássicas são capitalizadas e não casam. */\n/** Voz própria do usuário (provider id), só nos modelos 3.8 e fora do diálogo. */\nexport const CUSTOM_VOICE_ID = /^voice_[a-z0-9]{6,64}$/;\nexport const LIBRARY_VOICE_ID = /^[a-z]{2,3}-[a-z0-9]{2,4}-[a-z0-9-]{1,60}$/;\n\nexport const VOICES = [\n 'Zephyr', 'Puck', 'Charon', 'Kore', 'Fenrir', 'Leda', 'Orus', 'Aoede',\n 'Callirrhoe', 'Autonoe', 'Enceladus', 'Iapetus', 'Umbriel', 'Algieba',\n 'Despina', 'Erinome', 'Algenib', 'Rasalgethi', 'Laomedeia', 'Achernar',\n 'Alnilam', 'Schedar', 'Gacrux', 'Pulcherrima', 'Achird', 'Zubenelgenubi',\n 'Vindemiatrix', 'Sadachbia', 'Sadaltager', 'Sulafat',\n] as const;\n\nexport const ASPECT_RATIOS = ['1:1', '16:9', '9:16', '4:3', '3:4', '3:2', '2:3', '4:5', '5:4', '21:9'] as const;\n\n/**\n * Vídeo aceita tudo o que a imagem aceita, mais `adaptive` — a proporção sai\n * dos próprios inputs. Os quatro seedance aceitam o mesmo subconjunto de 7\n * (sem 3:2/2:3/4:5/5:4); no 2.5 o `adaptive` ainda é OBRIGATÓRIO quando há\n * primeiro/último frame, porque qualquer outro valor derruba a task DEPOIS da\n * fila. O handler de generate_video corta por modelo, porque outros provedores\n * aceitam subconjuntos diferentes deste enum.\n */\nexport const VIDEO_ASPECT_RATIOS = [...ASPECT_RATIOS, 'adaptive'] as const;\nexport const IMAGE_RESOLUTIONS = ['1K', '2K', '4K'] as const;\nexport const VIDEO_RESOLUTIONS = ['480p', '720p', '1080p', '4K'] as const;\n\nexport const DEFAULTS = {\n imageModel: 'google/nano-banana-2.1',\n imageAspect: '1:1',\n imageResolution: '1K',\n videoModel: 'bytedance/seedance-2.0-fast',\n videoAspect: '16:9',\n videoResolution: '720p',\n videoDuration: 5,\n ttsModel: 'gemini-3.8-flash-lite-tts',\n voice: 'Kore',\n musicModel: 'suno/v6',\n} as const;\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage, ApiError } from '../api/errors';\nimport {\n TEAM_GATING_NOTE,\n isTeamGatingError,\n buildPickProjectMessage,\n isBudgetBlockedError,\n BUDGET_BLOCKED_GUIDANCE,\n} from './team-gating';\nimport { pollUntilDone } from '../poll';\nimport { compact, costFooter, errorResult, outputUrls, resolveProjectArg, textResult, type ToolResult } from '../format';\nimport { MUSIC_MODELS, MUSIC_TASK_TYPES, MUSIC_TOOLS, VOCAL_GENDERS, DEFAULTS } from '../schemas/enums';\nimport { resolveRef } from '../media';\nimport type { GenerationStatus, MusicClipInfo, MusicToolName, MusicToolState } from '../api/types';\n\nconst MUSIC_BUDGET_MS = 150_000;\nconst TOOL_POLL_MS = 5_000;\nconst TOOL_BUDGET_MS = 240_000;\nconst sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));\n\ntype MusicTaskType = (typeof MUSIC_TASK_TYPES)[number];\n\nexport interface MusicArgs {\n custom_mode?: boolean;\n description?: string;\n lyrics?: string;\n title?: string;\n tags?: string;\n auto_lyrics?: boolean;\n task_type?: MusicTaskType;\n source_generation_id?: string;\n source_clip_id?: string;\n continue_at?: number;\n audio_weight?: number;\n reference_audio_url?: string;\n sample_start_s?: number;\n sample_end_s?: number;\n}\n\n/** Regras que dependem do task_type; o zod do MCP só descreve campos soltos. Devolve a mensagem de erro ou null. */\nexport function validateMusicArgs(a: MusicArgs): string | null {\n const type = a.task_type ?? 'create';\n const customMode = a.custom_mode ?? false;\n\n if (a.title && a.title.trim().length > 79) return '`title` aceita no máximo 79 caracteres.';\n if (a.auto_lyrics && !customMode) {\n return '`auto_lyrics` só vale no modo letra (custom_mode=true). No modo descrição a IA já escreve a letra.';\n }\n if (customMode && !a.lyrics?.trim() && !(a.auto_lyrics && a.description?.trim())) {\n return a.auto_lyrics\n ? 'Com `auto_lyrics`, passe o tema em `lyrics` (ou `description`).'\n : 'Modo letra (custom_mode=true) exige `lyrics`.';\n }\n if (!customMode && !a.description?.trim()) return 'Modo descrição (custom_mode=false) exige `description`.';\n\n const needsSource = type === 'extend' || type === 'cover';\n const needsReference = type === 'upload_extend' || type === 'upload_cover' || type === 'sample';\n const needsContinueAt = type === 'extend' || type === 'upload_extend';\n const usesWeight = type === 'cover' || type === 'upload_cover' || type === 'sample';\n\n if (needsSource) {\n if (!a.source_generation_id?.trim() || !a.source_clip_id?.trim()) {\n return `task_type=${type} exige \\`source_generation_id\\` e \\`source_clip_id\\` (o clip_id sai em generate_music/check_generation da geração original).`;\n }\n } else if (a.source_generation_id || a.source_clip_id) {\n return '`source_generation_id` e `source_clip_id` só valem com task_type=extend ou cover.';\n }\n if (needsReference) {\n if (!a.reference_audio_url?.trim()) return `task_type=${type} exige \\`reference_audio_url\\` (URL ou caminho local do áudio).`;\n } else if (a.reference_audio_url) {\n return '`reference_audio_url` só vale com task_type=upload_extend, upload_cover ou sample.';\n }\n if (needsContinueAt) {\n if (a.continue_at == null) return `task_type=${type} exige \\`continue_at\\` (segundo em que a música continua).`;\n } else if (a.continue_at != null) {\n return '`continue_at` só vale com task_type=extend ou upload_extend.';\n }\n if (a.audio_weight != null && !usesWeight) {\n return '`audio_weight` só vale com task_type=cover, upload_cover ou sample.';\n }\n if (type === 'sample') {\n if (a.sample_start_s == null || a.sample_end_s == null) return 'task_type=sample exige `sample_start_s` e `sample_end_s`.';\n if (a.sample_end_s <= a.sample_start_s) return '`sample_end_s` precisa ser maior que `sample_start_s`.';\n if (!customMode && a.description && a.description.trim().length > 200) {\n return 'No task_type=sample a `description` aceita no máximo 200 caracteres.';\n }\n if (a.tags && a.tags.trim().length > 200) return 'No task_type=sample as `tags` aceitam no máximo 200 caracteres.';\n } else if (a.sample_start_s != null || a.sample_end_s != null) {\n return '`sample_start_s` e `sample_end_s` só valem com task_type=sample.';\n }\n return null;\n}\n\n/** Faixas (clip_id) de uma geração de música, vindas do status do backend. */\nexport async function getMusicClips(\n client: BeplusClient,\n generationId: string,\n status?: GenerationStatus,\n): Promise<MusicClipInfo[]> {\n try {\n const st = status ?? (await client.getStatus(generationId));\n return Array.isArray(st.music_clips) ? st.music_clips : [];\n } catch {\n return [];\n }\n}\n\nexport function formatMusicClips(generationId: string, urls: string[], clips: MusicClipInfo[]): string {\n const lines = (urls.length ? urls : clips.map((c) => c.audio_url ?? '')).map((u, i) => {\n const clip = clips[i];\n return `${i + 1}. ${u || '(sem URL)'}${clip?.clip_id ? `\\n clip_id: ${clip.clip_id}` : ''}`;\n });\n const chain = clips.length\n ? `\\nPara estender/cobrir ou usar music_tool: generation_id=${generationId} + o clip_id da faixa.`\n : '';\n return `${lines.join('\\n') || '(sem URLs)'}${chain}`;\n}\n\nexport function registerMusicTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n server.registerTool(\n 'generate_music',\n {\n title: 'Gerar música',\n description:\n 'Gera uma música completa (com vocais ou instrumental) usando o Suno no IA Lab da BePlus. ' +\n 'ASSÍNCRONO e LENTO (geralmente 30s–2+ min). Aguarda até ~2,5 min; se não terminar, retorna o ' +\n 'generation_id e o status — então use check_generation. Consome diamantes. ' +\n 'DOIS modos: (a) DESCRIÇÃO (custom_mode=false, padrão) → passe `description` (\"uma balada triste de ' +\n 'piano\"); (b) LETRA PRÓPRIA (custom_mode=true) → passe `lyrics` (a letra) e opcionalmente `title`. ' +\n 'Use `tags` para gênero/estilo em ambos os modos (ex.: \"sertanejo, animado, vocal feminino\"). ' +\n '`vocal_gender` (f/m) vale para todos os modelos e é ignorado quando `make_instrumental=true`. ' +\n 'Cada geração produz 2 faixas, cada uma com `clip_id`. `duration` (10 a 360s) é só uma meta aproximada; com letra, a letra manda. ' +\n '`task_type` muda a operação: create (padrão), extend (continuar uma faixa sua, exige source_generation_id + source_clip_id + continue_at), ' +\n 'cover (nova versão de uma faixa sua, exige source_generation_id + source_clip_id), ' +\n 'upload_extend / upload_cover (partem de um áudio seu em `reference_audio_url`, URL ou caminho local) e ' +\n 'sample (usa um trecho do áudio, exige reference_audio_url + sample_start_s + sample_end_s). ' +\n 'Extend e upload_extend custam o preço \"suno/extend\"; o resto, o preço do modelo. ' +\n 'Depois de pronta, use music_tool para WAV, MIDI, stems, BPM e letra sincronizada de uma faixa.' +\n TEAM_GATING_NOTE,\n inputSchema: {\n model: z\n .enum(MUSIC_MODELS)\n .default(DEFAULTS.musicModel)\n .describe(\n 'suno/v6 = padrão, polido e previsível; suno/v6-wild = o mesmo, de propósito menos previsível; ' +\n 'suno/v6-mini = menor e mais rápido. suno/v5-5 e suno/v4-5 são nomes legados, hoje atendidos pelo v6.',\n ),\n custom_mode: z\n .boolean()\n .optional()\n .describe('false (padrão) = gera a partir de `description`; true = usa sua `lyrics` própria.'),\n description: z\n .string()\n .max(2500)\n .optional()\n .describe('Modo descrição (custom_mode=false): descreva a música desejada. Obrigatório nesse modo.'),\n lyrics: z\n .string()\n .max(5000)\n .optional()\n .describe('Modo letra (custom_mode=true): a letra completa da música. Obrigatório nesse modo.'),\n title: z.string().max(79).optional().describe('Título da música (modo letra). Máximo 79 caracteres.'),\n tags: z\n .string()\n .max(1000)\n .optional()\n .describe('Gênero/estilo, separados por vírgula (ex.: \"pop, energético, vocal masculino\").'),\n make_instrumental: z.boolean().optional().describe('true = sem vocais (apenas instrumental). Padrão false.'),\n vocal_gender: z\n .enum(VOCAL_GENDERS)\n .optional()\n .describe('Gênero do vocal: f (feminino) ou m (masculino). Vale para todos os modelos; ignorado se instrumental.'),\n negative_tags: z.string().max(1000).optional().describe('Estilos/elementos a evitar.'),\n style_weight: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Peso do estilo (0–1). Maior = segue mais as tags. Omita para o modelo decidir.'),\n weirdness_constraint: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('Criatividade/imprevisibilidade (0–1). Omita para o modelo decidir.'),\n duration: z\n .number()\n .int()\n .min(10)\n .max(360)\n .optional()\n .describe('Duração-alvo aproximada em segundos (10 a 360). Com `lyrics`, a letra domina o tamanho.'),\n auto_lyrics: z\n .boolean()\n .optional()\n .describe('Só no modo letra (custom_mode=true): a IA escreve letra, título e tags usando `lyrics` como TEMA.'),\n task_type: z\n .enum(MUSIC_TASK_TYPES)\n .optional()\n .describe('create (padrão) | extend | cover | upload_extend | upload_cover | sample. Veja a descrição da ferramenta.'),\n source_generation_id: z\n .string()\n .min(1)\n .optional()\n .describe('extend/cover: id da geração de música original.'),\n source_clip_id: z\n .string()\n .min(1)\n .optional()\n .describe('extend/cover: clip_id da faixa original (aparece no resultado de generate_music / check_generation).'),\n continue_at: z\n .number()\n .min(0)\n .optional()\n .describe('extend/upload_extend: segundo da faixa a partir do qual continuar.'),\n audio_weight: z\n .number()\n .min(0)\n .max(1)\n .optional()\n .describe('cover/upload_cover/sample: fidelidade ao áudio original (0 a 1).'),\n reference_audio_url: z\n .string()\n .min(1)\n .optional()\n .describe('upload_extend/upload_cover/sample: áudio de origem. URL pública ou caminho local (sobe para o storage da BePlus; outros hosts são recusados).'),\n sample_start_s: z.number().min(0).optional().describe('sample: início do trecho, em segundos.'),\n sample_end_s: z.number().min(0).optional().describe('sample: fim do trecho, em segundos (maior que o início).'),\n project: z\n .string()\n .max(64)\n .optional()\n .describe('Projeto (uuid OU code curto, ex.: \"VRAO-26\"). Só omita se o usuário JÁ confirmou o projeto ativo nesta sessão.'),\n billing: z\n .enum(['personal'])\n .optional()\n .describe(\n '\"personal\" = cobra do seu diamante pessoal, IGNORANDO o projeto ativo (mesmo se houver um). ' +\n 'Use quando quiser garantir que isto NÃO sai do budget de nenhum projeto. Incompatível com `project`.',\n ),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const customMode = args.custom_mode ?? false;\n\n const invalid = validateMusicArgs(args);\n if (invalid) return errorResult(invalid);\n\n const input: Record<string, unknown> = {\n custom_mode: customMode,\n make_instrumental: args.make_instrumental ?? false,\n };\n if (args.vocal_gender) input.vocal_gender = args.vocal_gender;\n if (args.negative_tags?.trim()) input.negative_tags = args.negative_tags.trim();\n if (args.style_weight != null) input.style_weight = args.style_weight;\n if (args.weirdness_constraint != null) input.weirdness_constraint = args.weirdness_constraint;\n if (args.tags?.trim()) input.tags = args.tags.trim();\n\n if (args.duration != null) input.duration = args.duration;\n if (args.auto_lyrics != null) input.auto_lyrics = args.auto_lyrics;\n if (args.task_type) input.task_type = args.task_type;\n if (args.source_generation_id) input.source_generation_id = args.source_generation_id.trim();\n if (args.source_clip_id) input.source_clip_id = args.source_clip_id.trim();\n if (args.continue_at != null) input.continue_at = args.continue_at;\n if (args.audio_weight != null) input.audio_weight = args.audio_weight;\n if (args.sample_start_s != null) input.sample_start_s = args.sample_start_s;\n if (args.sample_end_s != null) input.sample_end_s = args.sample_end_s;\n // Caminho local sobe pro R2; o backend só aceita URL do nosso storage.\n if (args.reference_audio_url) input.reference_audio_url = await resolveRef(cfg, args.reference_audio_url.trim());\n\n if (customMode) {\n input.prompt = (args.lyrics?.trim() || args.description!.trim());\n if (args.title?.trim()) input.title = args.title.trim();\n } else {\n const desc = args.description!.trim();\n input.gpt_description_prompt = desc;\n input.prompt = desc; // espelho para o registro\n }\n\n const start = await client.startGeneration(\n compact({\n model: args.model,\n input,\n project: resolveProjectArg(args.project, args.billing, cfg.activeProject),\n billing: args.billing,\n }) as {\n model: string;\n input: Record<string, unknown>;\n project?: string;\n billing?: 'personal';\n }\n );\n if (!start.success || !start.generation_id) {\n if (isTeamGatingError(start.message)) return errorResult(await buildPickProjectMessage(client));\n return errorResult(start.message || 'Falha ao iniciar a geração.');\n }\n\n const footer = costFooter(start, cfg);\n const { settled, status } = await pollUntilDone(client, start.generation_id, MUSIC_BUDGET_MS);\n\n if (!settled) {\n return textResult(\n `⏳ Música ainda em produção (id: ${start.generation_id}, ${status.progress ?? 0}%). ` +\n `Suno costuma levar alguns minutos — use check_generation com esse id.\\n${footer}`\n );\n }\n if (status.status === 'failed') {\n return errorResult(`Geração falhou: ${status.error_message || 'erro desconhecido'}.\\n${footer}`);\n }\n\n const urls = outputUrls(status);\n const clips = await getMusicClips(client, start.generation_id, status);\n const list = formatMusicClips(start.generation_id, urls, clips);\n return textResult(`✅ Música gerada (${args.model}), generation_id: ${start.generation_id}.\\n${list}\\n${footer}`);\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n server.registerTool(\n 'music_tool',\n {\n title: 'Ferramenta de faixa de música',\n description:\n 'Roda uma ferramenta numa faixa de música Suno já pronta: wav (2 créditos AIMusic), midi (10), ' +\n 'stems-basic (20, 4 stems: vocal e instrumental), stems-full (50, até 24 stems), bpm (1) e ' +\n 'lyrics-timeline (1, palavras com tempo). Consome diamantes (o valor vem do backend); pedir de novo uma ' +\n 'ferramenta já concluída devolve o resultado salvo sem cobrar. Aguarda até ~4 min. ' +\n 'Informe generation_id e a faixa por `clip_id` ou `clip_index` (1 ou 2).',\n inputSchema: {\n generation_id: z.string().min(1).describe('Id da geração de música concluída.'),\n tool: z.enum(MUSIC_TOOLS).describe('wav | midi | stems-basic | stems-full | bpm | lyrics-timeline.'),\n clip_id: z.string().min(1).optional().describe('clip_id da faixa (veja generate_music / check_generation).'),\n clip_index: z.number().int().min(1).max(2).optional().describe('Alternativa ao clip_id: 1 ou 2.'),\n full_words: z\n .boolean()\n .optional()\n .describe('lyrics-timeline: true devolve todas as palavras com tempo. Padrão: só um resumo.'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n let clipId = args.clip_id?.trim();\n if (!clipId) {\n if (!args.clip_index) return errorResult('Informe `clip_id` ou `clip_index` (1 ou 2).');\n const clips = await getMusicClips(client, args.generation_id);\n clipId = clips[args.clip_index - 1]?.clip_id;\n if (!clipId) return errorResult('Não achei o clip_id dessa faixa. Passe `clip_id` explicitamente.');\n }\n const tool = args.tool as MusicToolName;\n let state = await client.startMusicTool(args.generation_id, { clip_id: clipId, tool });\n const started = Date.now();\n while (state?.status === 'processing' && Date.now() - started < TOOL_BUDGET_MS) {\n await sleep(TOOL_POLL_MS);\n state = (await client.getMusicTool(args.generation_id, clipId, tool)) ?? state;\n }\n if (!state) return errorResult('O backend não devolveu o estado da ferramenta.');\n if (state.status === 'failed') {\n return errorResult(`${tool} falhou: ${state.error || 'erro desconhecido'}.`);\n }\n if (state.status === 'processing') {\n return textResult(\n `⏳ ${tool} ainda processando (custo ${state.cost} 💎). Chame music_tool de novo com os mesmos argumentos em ` +\n `instantes: não cobra de novo.`,\n );\n }\n return textResult(`✅ ${tool} pronto (${state.cost} 💎).\\n${formatToolResult(state, args.full_words ?? false)}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n },\n );\n}\n\nexport function formatToolResult(state: MusicToolState, fullWords: boolean): string {\n const r = state.result ?? {};\n const lines: string[] = [];\n if (r.url) lines.push(r.url);\n if (r.stems?.length) lines.push(...r.stems.map((s) => `${s.title}: ${s.url}`));\n if (r.bpm) lines.push(`BPM médio ${r.bpm.avg} (mín ${r.bpm.min}, máx ${r.bpm.max})`);\n if (r.words?.length) {\n if (fullWords) {\n lines.push(r.words.map((w) => `${w.s.toFixed(2)}-${w.e.toFixed(2)} ${w.w}`).join('\\n'));\n } else {\n const first = r.words.slice(0, 12).map((w) => w.w).join(' ');\n const end = r.words[r.words.length - 1].e;\n lines.push(\n `${r.words.length} palavras sincronizadas, até ${end.toFixed(1)}s. Início: \"${first}\". ` +\n 'Use full_words=true para a lista completa.',\n );\n }\n }\n return lines.join('\\n') || '(sem resultado)';\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage, ApiError } from '../api/errors';\nimport {\n TEAM_GATING_NOTE,\n isTeamGatingError,\n buildPickProjectMessage,\n isBudgetBlockedError,\n BUDGET_BLOCKED_GUIDANCE,\n} from './team-gating';\nimport { pollUntilDone } from '../poll';\nimport { resolveRef, resolveRefs } from '../media';\nimport { getMusicClips, formatMusicClips } from './music';\nimport {\n buildImageBlocks,\n compact,\n costFooter,\n errorResult,\n outputUrls,\n resolveProjectArg,\n textResult,\n type ToolResult,\n} from '../format';\nimport {\n IMAGE_MODELS,\n VIDEO_MODELS,\n ASPECT_RATIOS,\n VIDEO_ASPECT_RATIOS,\n IMAGE_RESOLUTIONS,\n VIDEO_RESOLUTIONS,\n SEEDREAM_LITE_SIZES,\n SEEDREAM_PRO_SIZES,\n SEEDREAM_LAYERS_SIZES,\n SEEDREAM_PRO_PIXELS,\n SEEDREAM_PRO_MAX_IMAGES,\n DEFAULTS,\n} from '../schemas/enums';\n\nconst IMAGE_BUDGET_MS = 90_000;\nconst VIDEO_BUDGET_MS = 120_000;\n\n/** Zod field shared by generate_image/generate_video/midjourney_action. */\nconst BILLING_FIELD = z\n .enum(['personal'])\n .optional()\n .describe(\n '\"personal\" = cobra do seu diamante pessoal, IGNORANDO o projeto ativo (mesmo se houver um). ' +\n 'Use quando quiser garantir que isto NÃO sai do budget de nenhum projeto. Incompatível com `project`.',\n );\n\n\n/** Render the owner flags — favorito (\"like\") e plano aprovado — as a suffix\n * line, or '' when neither is set. Shared by check_generation + list_generations. */\nfunction flagsLine(g: { is_favorite?: boolean; is_approved_plan?: boolean }): string {\n const parts = [\n g.is_favorite ? '⭐ like' : null,\n g.is_approved_plan ? '✔️ aprovado' : null,\n ].filter(Boolean);\n return parts.length ? `\\n${parts.join(' · ')}` : '';\n}\n\n/** Best-effort first URL from a raw generation `output` jsonb (list endpoint\n * returns the raw column, not the normalized {urls} shape). */\nfunction firstOutputUrl(output: unknown): string | null {\n if (!output) return null;\n const o = output as Record<string, unknown>;\n if (Array.isArray(o) && typeof o[0] === 'string') return o[0] as string;\n if (Array.isArray((o as any).urls) && typeof (o as any).urls[0] === 'string') return (o as any).urls[0];\n if (typeof (o as any).url === 'string') return (o as any).url;\n return null;\n}\n\nexport function registerGenerationTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n // ── generate_image ────────────────────────────────────────────────────────\n server.registerTool(\n 'generate_image',\n {\n title: 'Gerar imagem',\n description:\n 'Gera uma imagem a partir de um prompt usando o IA Lab da BePlus. Rápido (~10-30s). ' +\n 'Consome diamantes da conta vinculada. Apenas `prompt` é obrigatório; passe `reference_images` ' +\n '(URLs públicas OU caminhos de arquivo local — o MCP sobe pro R2 automaticamente) para image-to-image. ' +\n 'Veja custos com estimate_cost / list_models.' +\n TEAM_GATING_NOTE,\n inputSchema: {\n // Sem teto local: quem conhece o limite de cada provedor é o backend, e\n // ele responde com quanto reduzir. Um `.max()` aqui rejeitava prompts\n // que o modelo aceita (Seedream/nano-banana não têm limite publicado).\n prompt: z\n .string()\n .default('')\n .describe(\n 'Descrição da imagem desejada. No seedream-5.0-pro-layers é opcional: diga o que separar ' +\n '(ex.: \"o produto, o texto e o fundo\") ou deixe vazio para o modelo escolher.',\n ),\n model: z\n .enum(IMAGE_MODELS)\n .default(DEFAULTS.imageModel)\n .describe(\n 'nano-banana-2.1 = padrão, o mais novo e o mais barato do Google (metade do 2, texto mais nítido); ' +\n 'nano-banana-2 = versão anterior, mesmo comportamento; nano-banana-pro = melhor qualidade; gpt-image-2 = OpenAI; ' +\n 'gpt-image-1 = OpenAI, ÚNICO que faz fundo transparente de verdade (PNG/WebP com alpha) — ' +\n 'o gpt-image-2 NÃO faz, use este pra recorte/sticker; ' +\n 'seedream-5.0-lite = mais barato do catálogo, único que chega a 4K, gera séries e ' +\n 'mantém o ESTILO da imagem de referência; ' +\n 'seedream-5.0-pro = acabamento fotorrealista, só até 2K (1K/1.5K/2K, proporção, tamanho livre e ' +\n 'até 4 imagens por pedido) — preserva o personagem da referência mas costuma reinterpretar o ' +\n 'estilo (um vetor flat volta em 3D); ' +\n 'seedream-5.0-pro-layers = NÃO gera do zero: separa UMA imagem (reference_images com 1 item) ' +\n 'em base + até 16 camadas PNG transparentes do mesmo tamanho, prontas para empilhar ou virar PSD. ' +\n 'Cobra o teto de 17 imagens e estorna as que não vierem.',\n ),\n aspect_ratio: z\n .enum(ASPECT_RATIOS)\n .optional()\n .describe(\n 'Proporção. nano-banana: padrão 1:1. Seedream Pro: combina com size (1K/1.5K/2K) e vira ' +\n 'LARGURAxALTURA no backend; sem ela o modelo escolhe o formato pelo prompt.',\n ),\n resolution: z.enum(IMAGE_RESOLUTIONS).optional().describe('Resolução (nano-banana): 1K/2K/4K. Padrão 1K.'),\n reference_images: z\n .array(z.string().min(1))\n .max(16)\n .optional()\n .describe(\n 'Imagens de referência (image-to-image): URL pública OU caminho de arquivo local ' +\n '(o MCP faz upload pro R2 automaticamente). Até 14 (nano-banana) / 16 (gpt-image-1/2).',\n ),\n google_search: z\n .boolean()\n .optional()\n .describe('nano-banana-2.1 e 2: aterra a imagem em busca web do Google (fatos atuais). Padrão false.'),\n image_search: z\n .boolean()\n .optional()\n .describe('nano-banana-2.1 e 2: usa busca de imagens do Google como referência visual. Padrão false.'),\n size: z\n .union([\n z.enum(['1024x1024', '1536x1024', '1024x1536', 'auto', '1K', '1.5K', '2K', '3K', '4K']),\n z.string().regex(/^\\d{3,5}x\\d{3,5}$/, 'use LARGURAxALTURA, ex.: 2048x1152'),\n ])\n .optional()\n .describe(\n 'Tamanho. gpt-image-1/2: 1024x1024/1536x1024/1024x1536/auto. ' +\n 'Seedream Lite: 2K/3K/4K (padrão 2K). Seedream Pro: 1K/1.5K/2K ou LARGURAxALTURA livre ' +\n '(área entre 921.600 e 4.624.220 pixels, proporção de 1:16 a 16:1). O Pro NÃO faz 3K/4K.',\n ),\n num_images: z\n .number()\n .int()\n .min(1)\n .max(SEEDREAM_PRO_MAX_IMAGES)\n .optional()\n .describe(\n 'Seedream 5.0 PRO apenas: quantas imagens gerar no mesmo pedido (1-4), em chamadas paralelas. ' +\n 'Cada imagem é cobrada; as que falharem são estornadas.',\n ),\n batch_images: z\n .number()\n .int()\n .min(2)\n .max(15)\n .optional()\n .describe(\n 'Seedream 5.0 LITE apenas: gera uma série de imagens relacionadas numa chamada (2-15). ' +\n 'Cada imagem é cobrada. O Seedream Pro NÃO suporta — passar aqui devolve erro.',\n ),\n quality: z.enum(['low', 'medium', 'high', 'auto']).optional().describe('Qualidade (gpt-image-1/2).'),\n background: z\n .enum(['opaque', 'transparent', 'auto'])\n .optional()\n .describe(\n 'Fundo (gpt-image-1/2). `transparent` SÓ funciona no gpt-image-1 e só com output_format png/webp — ' +\n 'o gpt-image-2 rejeita (limitação do modelo na OpenAI, não dá pra contornar por prompt). Padrão opaque.',\n ),\n moderation: z.enum(['low', 'auto']).optional().describe('Moderação (gpt-image-1/2). Padrão low.'),\n output_format: z.enum(['png', 'jpeg', 'webp']).optional().describe('Formato de saída (gpt-image-1/2). Padrão png.'),\n output_compression: z\n .number()\n .int()\n .min(0)\n .max(100)\n .optional()\n .describe('Compressão 0-100 (gpt-image-1/2, só jpeg/webp). Padrão 90.'),\n seed: z.number().int().optional(),\n // ── Midjourney (model=\"midjourney\") — params completos ──\n version: z.enum(['8.1', '7', '6.1', '6', 'niji-7', 'niji-6']).optional().describe('Midjourney: versão (padrão 8.1). --oref (character_reference) força V7; --cref força V6; anime = niji-7.'),\n style_raw: z.boolean().optional().describe('Midjourney: --style raw (menos \"opinativo\").'),\n stylize: z.number().int().min(0).max(1000).optional().describe('Midjourney: --stylize 0-1000 (força estética). Padrão 100.'),\n chaos: z.number().int().min(0).max(100).optional().describe('Midjourney: --chaos 0-100 (variedade das 4).'),\n weird: z.number().int().min(0).max(3000).optional().describe('Midjourney: --weird 0-3000 (estranheza).'),\n exp: z.number().int().min(0).max(100).optional().describe('Midjourney: --exp 0-100 (estética experimental, só V7/V8.1). Recomendado 5-50.'),\n mj_quality: z.enum(['1', '2', '4']).optional().describe('Midjourney: --quality (só V7=1/2/4 e V6; V8.1 ignora). Padrão 1.'),\n tile: z.boolean().optional().describe('Midjourney: --tile (padrão repetível).'),\n negative_prompt: z.string().max(2000).optional().describe('Midjourney: --no (o que evitar).'),\n style_reference: z.string().optional().describe('Midjourney: --sref (URL/arquivo OU código de estilo) para referência de ESTILO.'),\n style_weight: z.number().int().min(0).max(1000).optional().describe('Midjourney: --sw peso do style ref. Padrão 100.'),\n character_reference: z.string().optional().describe('Midjourney: referência de PERSONAGEM (URL/arquivo). v7 usa --oref, v6 usa --cref (automático).'),\n character_weight: z.number().int().min(0).max(1000).optional().describe('Midjourney: peso do character ref (--ow v7 / --cw v6).'),\n image_weight: z.number().min(0).max(3).optional().describe('Midjourney: --iw peso das reference_images (image-prompts) 0-3. Padrão 1.'),\n project: z\n .string()\n .max(64)\n .optional()\n .describe('Projeto (uuid OU code curto, ex.: \"VRAO-26\"). Só omita se o usuário JÁ confirmou o projeto ativo nesta sessão.'),\n billing: BILLING_FIELD,\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const isGoogle = args.model.startsWith('google/');\n const isMidjourney = args.model === 'midjourney';\n const isSeedreamLite = args.model === 'bytedance/seedream-5.0-lite';\n const isSeedreamPro = args.model === 'bytedance/seedream-5.0-pro';\n const isSeedream = isSeedreamLite || isSeedreamPro;\n const isSeedreamLayers = args.model === 'bytedance/seedream-5.0-pro-layers';\n\n if (!isSeedreamLayers && !args.prompt.trim()) {\n return errorResult('prompt é obrigatório (só o seedream-5.0-pro-layers aceita sem prompt).');\n }\n if (isSeedreamLayers) {\n if (args.reference_images?.length !== 1) {\n return errorResult(\n 'seedream-5.0-pro-layers separa UMA imagem em camadas: passe exatamente 1 item em reference_images.',\n );\n }\n if (args.size && !(SEEDREAM_LAYERS_SIZES as readonly string[]).includes(args.size)) {\n return errorResult(\n `seedream-5.0-pro-layers aceita size ${SEEDREAM_LAYERS_SIZES.join('/')} (você pediu ${args.size}).`,\n );\n }\n if (args.num_images || args.batch_images) {\n return errorResult('seedream-5.0-pro-layers devolve sempre base + camadas; num_images e batch_images não se aplicam.');\n }\n }\n\n // ── Guard-rails do Seedream ────────────────────────────────────────\n // Cada um destes é um 400 da BytePlus se passar: melhor errar aqui,\n // com mensagem que explica, do que gastar a chamada.\n if (isSeedream) {\n const allowed = isSeedreamPro ? SEEDREAM_PRO_SIZES : SEEDREAM_LITE_SIZES;\n const free = args.size?.match(/^(\\d+)x(\\d+)$/);\n if (isSeedreamPro && free) {\n const w = Number(free[1]);\n const h = Number(free[2]);\n if (w * h < SEEDREAM_PRO_PIXELS.min || w * h > SEEDREAM_PRO_PIXELS.max) {\n return errorResult(\n `size ${args.size} dá ${w * h} pixels; o Pro aceita entre ${SEEDREAM_PRO_PIXELS.min} e ` +\n `${SEEDREAM_PRO_PIXELS.max} (ex.: 1280x720 a 2048x2048).`,\n );\n }\n if (w / h > 16 || h / w > 16) {\n return errorResult(`size ${args.size}: a proporção precisa ficar entre 1:16 e 16:1.`);\n }\n } else if (args.size && !(allowed as readonly string[]).includes(args.size)) {\n return errorResult(\n `${args.model} aceita size ${allowed.join('/')} (você pediu ${args.size}). ` +\n (isSeedreamPro\n ? 'O Pro não faz 3K/4K — use o seedream-5.0-lite para resoluções maiores.'\n : 'O Lite não faz 1K — use o seedream-5.0-pro se quiser a resolução menor.'),\n );\n }\n if (args.batch_images && isSeedreamPro) {\n return errorResult(\n 'O seedream-5.0-pro não suporta geração em série (batch_images). ' +\n 'Use bytedance/seedream-5.0-lite para gerar várias imagens relacionadas de uma vez.',\n );\n }\n if (args.output_format === 'webp') {\n return errorResult(`${args.model} aceita apenas png ou jpeg (webp não é suportado).`);\n }\n const maxRefs = isSeedreamPro ? 10 : 14;\n if (args.reference_images && args.reference_images.length > maxRefs) {\n return errorResult(\n `${args.model} aceita no máximo ${maxRefs} imagens de referência ` +\n `(você passou ${args.reference_images.length}).`,\n );\n }\n } else if (args.batch_images) {\n return errorResult('batch_images só existe no bytedance/seedream-5.0-lite.');\n }\n if (args.num_images && args.num_images > 1 && !isSeedreamPro) {\n return errorResult(\n 'num_images só existe no bytedance/seedream-5.0-pro. ' +\n 'No seedream-5.0-lite use batch_images; nos outros modelos, chame generate_image mais vezes.',\n );\n }\n\n // ── Guard-rail de transparência (OpenAI) ───────────────────────────\n // Mesma lógica do Seedream acima: erra aqui, com explicação, em vez de\n // gastar a chamada num 400 certo. Transparência é capability de\n // modelo — o gpt-image-2 rejeita em qualquer quality/formato, e\n // forçar por prompt faz o modelo DESENHAR o xadrez em pixels opacos.\n if (args.background === 'transparent') {\n if (args.model !== 'openai/gpt-image-1') {\n return errorResult(\n `${args.model} não suporta fundo transparente. ` +\n 'Só o openai/gpt-image-1 devolve PNG/WebP com canal alpha de verdade — troque o model.',\n );\n }\n if (args.output_format === 'jpeg') {\n return errorResult('Fundo transparente exige output_format png ou webp — JPEG não tem canal alpha.');\n }\n }\n // Local paths → upload to R2, public URLs pass through.\n const reference_images = await resolveRefs(cfg, args.reference_images);\n // Midjourney: resolve sref/cref (código de estilo numérico passa direto).\n let style_reference: string | undefined;\n if (isMidjourney && args.style_reference) {\n style_reference = /^\\d+$/.test(args.style_reference.trim())\n ? args.style_reference\n : (await resolveRefs(cfg, [args.style_reference]))?.[0];\n }\n const character_reference =\n isMidjourney && args.character_reference\n ? (await resolveRefs(cfg, [args.character_reference]))?.[0]\n : undefined;\n const input = compact({\n prompt: args.prompt,\n aspect_ratio: args.aspect_ratio ?? (isGoogle ? DEFAULTS.imageAspect : undefined),\n resolution: args.resolution ?? (isGoogle ? DEFAULTS.imageResolution : undefined),\n reference_images,\n google_search: args.google_search,\n image_search: args.image_search,\n size: args.size ?? (isSeedream ? '2K' : isSeedreamLayers ? 'auto' : undefined),\n // Série do Seedream Lite: o backend lê o par sequential_image_generation\n // + max_images (nomes da API da BytePlus). `batch_images` é só o nome\n // amigável exposto aqui.\n sequential_image_generation: isSeedreamLite && args.batch_images ? 'auto' : undefined,\n max_images: isSeedreamLite && args.batch_images ? args.batch_images : undefined,\n num_images: isSeedreamPro && args.num_images && args.num_images > 1 ? args.num_images : undefined,\n quality: isMidjourney ? args.mj_quality : args.quality,\n background: args.background,\n moderation: args.moderation,\n output_format: args.output_format,\n output_compression: args.output_compression,\n seed: args.seed,\n // Midjourney full-params\n version: args.version,\n style_raw: args.style_raw,\n stylize: args.stylize,\n chaos: args.chaos,\n weird: args.weird,\n exp: args.exp,\n tile: args.tile,\n negative_prompt: args.negative_prompt,\n style_reference,\n style_weight: args.style_weight,\n character_reference,\n character_weight: args.character_weight,\n image_weight: args.image_weight,\n });\n\n const start = await client.startGeneration(\n compact({\n model: args.model,\n input,\n project: resolveProjectArg(args.project, args.billing, cfg.activeProject),\n billing: args.billing,\n }) as {\n model: string;\n input: Record<string, unknown>;\n project?: string;\n billing?: 'personal';\n }\n );\n if (!start.success || !start.generation_id) {\n if (isTeamGatingError(start.message)) return errorResult(await buildPickProjectMessage(client));\n return errorResult(start.message || 'Falha ao iniciar a geração.');\n }\n\n const footer = costFooter(start, cfg);\n const { settled, status } = await pollUntilDone(client, start.generation_id, IMAGE_BUDGET_MS);\n\n if (!settled) {\n return textResult(\n `⏳ Imagem ainda em processamento (id: ${start.generation_id}, ${status.progress ?? 0}%). ` +\n `Use check_generation com esse id.\\n${footer}`\n );\n }\n if (status.status === 'failed') {\n return errorResult(`Geração falhou: ${status.error_message || 'erro desconhecido'}.\\n${footer}`);\n }\n\n const urls = outputUrls(status);\n const blocks = await buildImageBlocks(urls, cfg);\n const list = urls.map((u, i) => `${i + 1}. ${u}`).join('\\n') || '(sem URLs)';\n return {\n content: [{ type: 'text', text: `✅ Imagem gerada (${args.model}).\\n${list}\\n${footer}` }, ...blocks],\n };\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── midjourney_action ─────────────────────────────────────────────────────\n server.registerTool(\n 'midjourney_action',\n {\n title: 'Midjourney: ação (upscale/variação/pan/zoom/inpaint)',\n description:\n 'Aplica uma AÇÃO sobre uma geração Midjourney existente (as 4 imagens da grade). ' +\n 'upsample = amplia 1 quadrante (index 1-4, 1 imagem); variation = varia 1 quadrante (index 1-4, nova grade de 4); ' +\n 'pan = expande numa direção; outpaint = zoom out; inpaint = repinta uma região (mask B/W). ' +\n 'pan/outpaint/inpaint exigem um pai que JÁ seja um upsample. ' +\n 'parent_job_id = id do job APIFrame da geração pai (as ações EXPIRAM após um tempo — use em geração RECENTE).' +\n TEAM_GATING_NOTE,\n inputSchema: {\n parent_job_id: z.string().min(1).describe('Id do job APIFrame da geração Midjourney pai (metadata.apiframe_task_id).'),\n action: z.enum(['upsample', 'variation', 'pan', 'outpaint', 'inpaint']).describe('Ação a aplicar.'),\n index: z.number().int().min(1).max(4).optional().describe('Quadrante 1-4 (upsample/variation).'),\n direction: z.enum(['up', 'down', 'left', 'right']).optional().describe('Direção (pan).'),\n zoom_ratio: z.enum(['1.5', '2']).optional().describe('Zoom out (outpaint).'),\n mask: z.string().optional().describe('Máscara base64 B/W PNG (inpaint) — área branca = repintar.'),\n prompt: z.string().max(2000).optional().describe('Prompt opcional (inpaint).'),\n project: z.string().max(64).optional().describe('Projeto (uuid OU code curto).'),\n billing: BILLING_FIELD,\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const input = compact({\n mj_action: args.action,\n parent_job_id: args.parent_job_id,\n index: args.index,\n direction: args.direction,\n zoom_ratio: args.zoom_ratio ? Number(args.zoom_ratio) : undefined,\n mask: args.mask,\n prompt: args.prompt,\n });\n const start = await client.startGeneration(\n compact({\n model: 'midjourney',\n input,\n project: resolveProjectArg(args.project, args.billing, cfg.activeProject),\n billing: args.billing,\n }) as {\n model: string;\n input: Record<string, unknown>;\n project?: string;\n billing?: 'personal';\n }\n );\n if (!start.success || !start.generation_id) {\n if (isTeamGatingError(start.message)) return errorResult(await buildPickProjectMessage(client));\n return errorResult(start.message || 'Falha ao iniciar a ação.');\n }\n const footer = costFooter(start, cfg);\n const { settled, status } = await pollUntilDone(client, start.generation_id, IMAGE_BUDGET_MS);\n if (!settled) {\n return textResult(`⏳ Ação ainda em processamento (id: ${start.generation_id}). Use check_generation.\\n${footer}`);\n }\n if (status.status === 'failed') {\n return errorResult(`Ação falhou: ${status.error_message || 'erro'} — as ações do MJ expiram, o pai pode ter ficado velho.\\n${footer}`);\n }\n const urls = outputUrls(status);\n const blocks = await buildImageBlocks(urls, cfg);\n const list = urls.map((u, i) => `${i + 1}. ${u}`).join('\\n') || '(sem URLs)';\n return { content: [{ type: 'text', text: `✅ Ação ${args.action} concluída.\\n${list}\\n${footer}` }, ...blocks] };\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── generate_video ──────────────────────────────────────────────────────────\n server.registerTool(\n 'generate_video',\n {\n title: 'Gerar vídeo',\n description:\n 'Gera um vídeo curto usando o IA Lab da BePlus. LENTO (geralmente 1-5+ min). Aguarda até ~2 min; ' +\n 'se não terminar, retorna o generation_id e o status — então use check_generation. Consome diamantes ' +\n '(mais caro para durações/resoluções maiores). Suporta image-to-video (`first_frame_image`), último ' +\n 'frame (`last_frame_image`), referências de imagem/vídeo/áudio, prompt negativo, áudio gerado e mais — ' +\n 'os campos aceitos variam por modelo (consulte list_models). `kling-v2.6-motion-control` usa ' +\n '`first_frame_image` + `motion_video`. ' +\n 'Nos modelos Seedance dá pra escolher o provedor com `provider`: `byteplus` (padrão) ou `fal`. ' +\n 'A BytePlus bloqueia referência com rosto de pessoa REAL; a fal.ai aceita (custa mais caro) e é a ' +\n 'alternativa quando a BytePlus estiver instável. Kling e outros modelos não têm essa opção.' +\n TEAM_GATING_NOTE,\n inputSchema: {\n // Sem teto local — ver nota em generate_image. O Seedance não publica\n // limite; o Kling publica 2500 e o backend recusa dizendo quanto cortar.\n // Opcional só por causa de `draft_task_id` (upscale de um draft não\n // manda prompt — é herdado do draft original); validado no handler.\n prompt: z.string().optional().describe('Descrição do vídeo desejado. Omita só ao usar `draft_task_id`.'),\n model: z\n .enum(VIDEO_MODELS)\n .default(DEFAULTS.videoModel)\n .describe(\n 'seedance-2.0-fast = barato/rápido; seedance-2.5 = até 30s num take, 50 refs e até 1080p; ' +\n 'seedance-2.0 = único com 4K; kling-v3-video = alternativa.',\n ),\n aspect_ratio: z.enum(VIDEO_ASPECT_RATIOS).optional().describe('Proporção. Padrão 16:9. `adaptive` (herda dos inputs) só no seedance-2.5.'),\n resolution: z.enum(VIDEO_RESOLUTIONS).optional().describe('480p/720p/1080p/4K (4K SÓ no seedance-2.0 standard; o 2.5 vai até 1080p; fast e mini param em 720p). Padrão 720p.'),\n duration: z\n .number()\n .int()\n .min(3)\n .max(60)\n .optional()\n .describe(\n 'Duração em segundos. Seedance 2.5: 4–30 (granular). Seedance 2.0/2.0-fast: 4–15. Kling: 5 ou 10. ' +\n 'O backend valida por modelo — consulte list_models p/ os valores aceitos. Padrão 5.',\n ),\n negative_prompt: z.string().max(2500).optional().describe('O que evitar no vídeo (Kling).'),\n mode: z.enum(['standard', 'pro']).optional().describe('Qualidade de geração (Kling): standard ou pro.'),\n generate_audio: z\n .boolean()\n .optional()\n .describe('Gerar trilha de áudio junto com o vídeo (Seedance/Kling). Na web fica ligado por padrão.'),\n first_frame_image: z\n .string()\n .min(1)\n .optional()\n .describe('Imagem inicial (image-to-video / primeiro frame): URL pública OU caminho local (sobe pro R2).'),\n last_frame_image: z\n .string()\n .min(1)\n .optional()\n .describe('Imagem do último frame (Seedance/Kling): URL pública OU caminho local (sobe pro R2).'),\n // Os tetos aqui são os do MODELO MAIS PERMISSIVO (seedance-2.5:\n // 30 imagens / 10 vídeos / 10 áudios). Quem for além do que o modelo\n // escolhido aceita leva a mensagem do backend, que conhece o limite\n // por modelo — cortar em 9/3/3 aqui só escondia metade do 2.5.\n reference_images: z\n .array(z.string().min(1))\n .max(30)\n .optional()\n .describe('Imagens de referência (personagem/estilo) — omni/Seedance. URL pública OU caminho local. Até 30 no 2.5, 9 no 2.0.'),\n reference_videos: z\n .array(z.string().min(1))\n .max(10)\n .optional()\n .describe('Vídeos de referência (Seedance reference_videos / Kling reference_video): URL OU caminho local. Até 10 no 2.5 (cada um de 1,8s a 30s), 3 no 2.0.'),\n reference_audios: z\n .array(z.string().min(1))\n .max(10)\n .optional()\n .describe('Áudios de referência: URL pública OU caminho local. Até 10 no 2.5 (onde o áudio pode vir sozinho), 3 no 2.0.'),\n motion_video: z\n .string()\n .min(1)\n .optional()\n .describe('Vídeo de movimento/máscara dinâmica (kling-v2.6-motion-control): URL OU caminho local.'),\n character_orientation: z\n .string()\n .optional()\n .describe('Orientação do personagem (alguns modelos Kling via Replicate).'),\n keep_original_sound: z\n .boolean()\n .optional()\n .describe('Manter o som original do vídeo de referência (alguns modelos Kling).'),\n reference_image: z\n .string()\n .min(1)\n .optional()\n .describe('[Obsoleto — use first_frame_image] Imagem de referência: URL pública OU caminho local.'),\n seed: z.number().int().optional(),\n output_format: z\n .enum(['mp4', 'mov'])\n .optional()\n .describe('Formato do arquivo (só seedance-2.5). Padrão mp4; `mov` é H.264 4:4:4 + PCM, para pós-produção — nem todo player abre.'),\n video_task_type: z\n .enum(['auto', 'reference', 'edit', 'extend'])\n .optional()\n .describe(\n 'O que fazer com os vídeos de referência (só seedance-2.5): `reference` gera um vídeo novo; ' +\n '`edit` edita o original (exige 1 vídeo de 4-30s, a duração vira a dele); `extend` estende o original. ' +\n 'Sem isto o modelo adivinha e um parâmetro incompatível só falha DEPOIS da fila.',\n ),\n provider: z\n .enum(['byteplus', 'fal'])\n .optional()\n .describe(\n 'Só Seedance (2.0/2.0-fast/2.0-mini/2.5): qual empresa gera o vídeo. `byteplus` (padrão) é a API ' +\n 'oficial da ByteDance. `fal` usa a fal.ai: aceita referência com pessoa real (a BytePlus recusa) e ' +\n 'custa mais caro. Na fal, `first_frame_image` + `last_frame_image` funcionam (image-to-video com ' +\n 'end frame) e o Draft Mode funciona no seedance-2.5; `output_format` e `video_task_type` ' +\n '(edit/extend) não têm equivalente e são recusados antes de cobrar, assim como `seedance-2.0-fast` ' +\n 'em 480p (a fal não publica preço para essa combinação).',\n ),\n real_people_references: z\n .boolean()\n .optional()\n .describe('OBSOLETO: use `provider: \"fal\"`. `true` aqui equivale a `provider: \"fal\"`.'),\n project: z\n .string()\n .max(64)\n .optional()\n .describe('Projeto (uuid OU code curto, ex.: \"VRAO-26\"). Só omita se o usuário JÁ confirmou o projeto ativo nesta sessão.'),\n billing: BILLING_FIELD,\n draft: z\n .boolean()\n .optional()\n .describe(\n 'Draft Mode (só seedance-2.5, nos dois provedores): gera um preview 480p barato para validar ' +\n 'composição/movimento antes de pagar o 1080p. `resolution` fica em 480p (omita ou use \"480p\"). ' +\n 'Depois de check_generation mostrar \"completed\", o `draft_task_id` e o provedor vêm no retorno — ' +\n 'é o que você passa no próximo generate_video para render a versão final, a mesma tomada, sem ' +\n 'regenerar do zero.',\n ),\n draft_task_id: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Gera a versão 1080p de um draft já pronto (feito com `draft: true`). Passe aqui o `draft_task_id` ' +\n 'que check_generation devolveu para aquele draft — NÃO o generation_id — e o MESMO `provider` do ' +\n 'draft (o id só vale no provedor que gerou). Prompt/refs/seed/ratio/' +\n 'áudio são HERDADOS do draft, não os reenvie. `duration` é OBRIGATÓRIO e tem que ser exatamente a ' +\n 'duração do draft original (é o que precifica certo); `resolution` é sempre 1080p. Drafts expiram ' +\n 'em 7 dias.',\n ),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n // Teto de resolução por modelo. O 2.5 ganhou 1080p em 18/set/2026\n // (geração real provada); 4K só o 2.0 standard tem. Fast e mini param\n // em 720p — e aqui o probe de create ENGANA: o fast devolve 200 para\n // 1080p e a doc diz 480p/720p, então o corte é pela doc.\n const MAX_RESOLUTION: Record<string, readonly string[]> = {\n 'bytedance/seedance-2.0-mini': ['480p', '720p'],\n 'bytedance/seedance-2.0-fast': ['480p', '720p'],\n 'bytedance/seedance-2.5': ['480p', '720p', '1080p'],\n };\n const allowedResolutions = args.model ? MAX_RESOLUTION[args.model] : undefined;\n if (allowedResolutions && args.resolution && !allowedResolutions.includes(args.resolution)) {\n return errorResult(\n `${args.model} só suporta ${allowedResolutions.join(' ou ')} (você pediu ${args.resolution}). Use seedance-2.0 (standard) para 4K.`,\n );\n }\n // `output_format` e `video_task_type` existem só no 2.5 — nos outros a\n // ModelArk recusa o create. Barrar aqui troca um 400 em inglês por uma\n // frase que diz o que fazer.\n const isSeedance25 = args.model === 'bytedance/seedance-2.5';\n if (!isSeedance25 && args.output_format && args.output_format !== 'mp4') {\n return errorResult(`output_format ${args.output_format} só existe no seedance-2.5 (você pediu ${args.model}).`);\n }\n // Draft Mode: só seedance-2.5, e é o único caso em que `prompt` pode\n // faltar (tudo vem herdado do draft_task referenciado).\n if ((args.draft || args.draft_task_id) && !isSeedance25) {\n return errorResult(`Draft Mode só existe no seedance-2.5 (você pediu ${args.model}).`);\n }\n if (!args.draft_task_id && !args.prompt) {\n return errorResult('`prompt` é obrigatório (só pode faltar ao usar `draft_task_id`).');\n }\n if (args.draft && args.draft_task_id) {\n return errorResult('Use `draft` OU `draft_task_id`, não os dois no mesmo pedido.');\n }\n if (args.draft && args.resolution && args.resolution !== '480p') {\n return errorResult('O Draft Mode só gera em 480p — omita `resolution` ou use \"480p\".');\n }\n if (args.draft_task_id) {\n // `duration` decide o preço (herdado do draft, não recontado pela API) —\n // sem ele o default de 5s cobraria errado se o draft não tinha 5s.\n if (args.duration == null) {\n return errorResult('Ao usar `draft_task_id`, `duration` é obrigatório — a mesma duração do draft original.');\n }\n if (args.resolution && args.resolution !== '1080p') {\n return errorResult('O upscale de um draft só gera em 1080p — omita `resolution` ou use \"1080p\".');\n }\n }\n if (!isSeedance25 && args.video_task_type && args.video_task_type !== 'auto') {\n return errorResult(`Editar e estender vídeo só existe no seedance-2.5 (você pediu ${args.model}).`);\n }\n // fal.ai (real_people_references) roteia por endpoint (t2v/i2v/r2v — ver\n // resolveSeedanceMode no academy-backend): `first_frame_image`/\n // `last_frame_image` viram o endpoint image-to-video, que aceita os dois\n // (confirmado na doc fal, 24/set/2026) — só output_format/video_task_type\n // (edit/extend) e a combinação seedance-2.0-fast+480p (sem preço\n // publicado) não têm equivalente. Barra aqui em vez de deixar a cobrança\n // acontecer pra um pedido que o backend ia recusar de qualquer forma.\n const isSeedance = !!args.model?.startsWith('bytedance/seedance-');\n if ((args.provider || args.real_people_references) && !isSeedance) {\n return errorResult(`A escolha de provedor (provider/real_people_references) só existe nos modelos Seedance (você pediu ${args.model}).`);\n }\n if (args.provider === 'byteplus' && args.real_people_references) {\n return errorResult('`real_people_references: true` usa a fal.ai e contradiz `provider: \"byteplus\"`. Use só `provider`.');\n }\n const seedanceProvider = args.provider ?? (args.real_people_references ? 'fal' : undefined);\n if (seedanceProvider === 'fal') {\n const unsupported: string[] = [];\n if (args.output_format && args.output_format !== 'mp4') unsupported.push('output_format');\n if (args.video_task_type && args.video_task_type !== 'auto') unsupported.push('video_task_type (edit/extend)');\n if (args.model === 'bytedance/seedance-2.0-fast' && args.resolution === '480p') {\n unsupported.push('resolution 480p (a fal não publica preço para seedance-2.0-fast nesta resolução)');\n }\n // Draft Mode na fal existe só no 2.5 — o \"só 2.5\" já foi barrado acima.\n if (unsupported.length > 0) {\n return errorResult(\n `Com provider \"fal\", a fal.ai não suporta: ${unsupported.join(', ')}. Remova essas opções.`,\n );\n }\n }\n if (\n (args.video_task_type === 'edit' || args.video_task_type === 'extend') &&\n !(args.reference_videos && args.reference_videos.length > 0)\n ) {\n return errorResult(`video_task_type \"${args.video_task_type}\" exige o vídeo original em reference_videos.`);\n }\n // TODOS os seedance (2.0, fast, mini e 2.5) aceitam exatamente os mesmos\n // 7 ratios — provado em 24/ago/2026 com 140 sondas. O corte antes valia\n // só para o 2.5, e o comentário afirmava que a série 2.0 aceitava\n // 3:2/2:3/5:4/4:5 e não aceitava `adaptive`: as duas coisas são falsas.\n // Na prática o 2.0 deixava passar 3:2 e o usuário levava o 400 cru da\n // ModelArk, em inglês. O enum de `aspect_ratio` é global, então o corte\n // por modelo tem que ser aqui.\n if (args.model?.startsWith('bytedance/seedance-') && args.aspect_ratio) {\n const SEEDANCE_RATIOS = ['1:1', '16:9', '9:16', '4:3', '3:4', '21:9', 'adaptive'];\n if (!SEEDANCE_RATIOS.includes(args.aspect_ratio)) {\n return errorResult(\n `${args.model} não aceita a proporção ${args.aspect_ratio}. Use uma destas: ${SEEDANCE_RATIOS.join(', ')}.`,\n );\n }\n }\n // Último frame sem o primeiro: a ModelArk recusa, com uma mensagem que\n // culpa a mistura de frames em vez de dizer o que falta.\n if (args.last_frame_image && !(args.first_frame_image ?? args.reference_image)) {\n return errorResult(\n 'O último frame (`last_frame_image`) só funciona junto com o primeiro (`first_frame_image`).',\n );\n }\n // 2.5 aceita 4–30s; a série 2.0 para em 15s. Corta aqui pra não gastar\n // a ida ao backend com um valor que a ModelArk recusa no create.\n if (args.duration != null && args.duration !== -1) {\n const maxDuration = args.model === 'bytedance/seedance-2.5' ? 30 : 15;\n if (args.model.startsWith('bytedance/') && (args.duration < 4 || args.duration > maxDuration)) {\n return errorResult(\n `${args.model} aceita duração de 4 a ${maxDuration}s (você pediu ${args.duration}s).`,\n );\n }\n }\n // Refs: caminhos locais sobem pro R2; URLs públicas passam direto.\n // Primeiro frame: aceita first_frame_image (novo) ou reference_image (legado).\n const firstFrame = await resolveRef(cfg, args.first_frame_image ?? args.reference_image);\n const endImage = await resolveRef(cfg, args.last_frame_image);\n const referenceImages = await resolveRefs(cfg, args.reference_images);\n const referenceAudios = await resolveRefs(cfg, args.reference_audios);\n const motionVideo = await resolveRef(cfg, args.motion_video);\n // Kling lê reference_video (singular); Seedance lê reference_videos (array). Mandamos ambos.\n const refVideos = await resolveRefs(cfg, args.reference_videos);\n // Upscale de draft: shape mínimo, sem defaults — reenviar ratio/refs/\n // áudio faz o provedor rejeitar (herdado do draft original). O\n // provedor volta junto: o draft_task_id só existe onde o draft nasceu.\n const input = args.draft_task_id\n ? compact({\n draft_task_id: args.draft_task_id,\n resolution: '1080p',\n duration: args.duration,\n output_format: args.output_format,\n seedanceProvider,\n })\n : compact({\n prompt: args.prompt,\n aspect_ratio: args.aspect_ratio ?? DEFAULTS.videoAspect,\n resolution: args.resolution ?? (args.draft ? '480p' : DEFAULTS.videoResolution),\n duration: args.duration ?? DEFAULTS.videoDuration,\n negative_prompt: args.negative_prompt,\n mode: args.mode,\n generate_audio: args.generate_audio,\n image: firstFrame,\n end_image: endImage,\n reference_images: referenceImages,\n reference_videos: refVideos,\n reference_video: refVideos && refVideos.length > 0 ? refVideos[0] : undefined,\n reference_audios: referenceAudios,\n motion_video: motionVideo,\n character_orientation: args.character_orientation,\n keep_original_sound: args.keep_original_sound,\n seed: args.seed,\n output_format: args.output_format,\n omni_reference_task_type: args.video_task_type,\n draft: args.draft,\n seedanceProvider,\n });\n\n const start = await client.startGeneration(\n compact({\n model: args.model,\n input,\n project: resolveProjectArg(args.project, args.billing, cfg.activeProject),\n billing: args.billing,\n }) as {\n model: string;\n input: Record<string, unknown>;\n project?: string;\n billing?: 'personal';\n }\n );\n if (!start.success || !start.generation_id) {\n if (isTeamGatingError(start.message)) return errorResult(await buildPickProjectMessage(client));\n return errorResult(start.message || 'Falha ao iniciar a geração.');\n }\n\n const footer = costFooter(start, cfg);\n const { settled, status } = await pollUntilDone(client, start.generation_id, VIDEO_BUDGET_MS);\n\n if (!settled) {\n return textResult(\n `⏳ Vídeo ainda em processamento (id: ${start.generation_id}, ${status.progress ?? 0}%). ` +\n `Vídeos costumam levar alguns minutos — use check_generation com esse id.\\n${footer}`\n );\n }\n if (status.status === 'failed') {\n return errorResult(`Geração falhou: ${status.error_message || 'erro desconhecido'}.\\n${footer}`);\n }\n\n const urls = outputUrls(status);\n const list = urls.map((u, i) => `${i + 1}. ${u}`).join('\\n') || '(sem URLs)';\n return textResult(`✅ Vídeo gerado (${args.model}).\\n${list}\\n${footer}`);\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── check_generation ──────────────────────────────────────────────────────\n server.registerTool(\n 'check_generation',\n {\n title: 'Checar geração',\n description:\n 'Consulta o status de uma geração assíncrona (imagem/vídeo) pelo id. Use depois de generate_video ' +\n 'ou de um generate_image que estourou o tempo. Retorna status, progresso e (quando pronto) as URLs.',\n inputSchema: {\n generation_id: z.string().min(1).describe('O id retornado por generate_image / generate_video.'),\n },\n },\n async ({ generation_id }): Promise<ToolResult> => {\n try {\n const status = await client.getStatus(generation_id);\n\n if (status.status === 'completed') {\n const urls = outputUrls(status);\n const blocks = await buildImageBlocks(urls, cfg);\n const isAudio = urls.length > 0 && urls.every((u) => /\\.(mp3|m4a|wav|ogg)(\\?|$)/i.test(u));\n const list = isAudio\n ? formatMusicClips(generation_id, urls, await getMusicClips(client, generation_id, status))\n : urls.map((u, i) => `${i + 1}. ${u}`).join('\\n') || '(sem URLs)';\n const draftProvider = status.seedance_provider ?? 'byteplus';\n const draftHint = status.draft_task_id\n ? `\\n\\n🎬 Draft pronto (provedor: ${draftProvider === 'fal' ? 'fal.ai' : 'BytePlus'}) — pra gerar em 1080p, ` +\n `chame generate_video de novo com draft_task_id: \"${status.draft_task_id}\", ` +\n `provider: \"${draftProvider}\" e a mesma duration deste draft.`\n : '';\n return { content: [{ type: 'text', text: `✅ Pronto.\\n${list}${flagsLine(status)}${draftHint}` }, ...blocks] };\n }\n if (status.status === 'failed') {\n return errorResult(`Geração falhou: ${status.error_message || 'erro desconhecido'}.`);\n }\n return textResult(\n `⏳ ${status.status} — ${status.progress ?? 0}%${status.stage ? ` (${status.stage})` : ''}. ` +\n `Tente novamente em alguns segundos.`\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── list_generations ──────────────────────────────────────────────────────\n server.registerTool(\n 'list_generations',\n {\n title: 'Listar gerações',\n description:\n 'Lista as suas gerações (imagens/vídeos) mais recentes, com os flags de favorito (\"like\") ' +\n 'e de plano aprovado. Use os filtros favorite=true / approved=true para ver só as favoritadas ' +\n 'ou só as aprovadas. Retorna id, modelo, tipo, status, data, um trecho do prompt e (quando há) a URL.',\n inputSchema: {\n limit: z.number().int().min(1).max(100).optional().describe('Quantas trazer (padrão 20, máx 100).'),\n offset: z.number().int().min(0).optional().describe('Deslocamento para paginar (padrão 0).'),\n favorite: z.boolean().optional().describe('Só as favoritadas (\"like\"). Padrão: todas.'),\n approved: z.boolean().optional().describe('Só as com plano aprovado. Padrão: todas.'),\n },\n },\n async ({ limit, offset, favorite, approved }): Promise<ToolResult> => {\n try {\n const { generations } = await client.listGenerations({ limit, offset, favorite, approved });\n if (!generations.length) {\n const scope = favorite && approved ? ' (favoritadas + aprovadas)'\n : favorite ? ' favoritadas'\n : approved ? ' aprovadas'\n : '';\n return textResult(`Nenhuma geração${scope} encontrada.`);\n }\n const lines = generations.map((g, i) => {\n // Upscale é gravado no banco como image/video (para concorrer no teto\n // do tipo certo), então o que o distingue é o prefixo do modelo.\n const type = g.model?.startsWith('topaz/upscale')\n ? 'upscale'\n : g.generation_type || 'image';\n const when = g.created_at ? new Date(g.created_at).toISOString().slice(0, 10) : '—';\n const prompt = (g.prompt || '').replace(/\\s+/g, ' ').slice(0, 80);\n const url = firstOutputUrl(g.output);\n const marks = [g.is_favorite ? '⭐' : null, g.is_approved_plan ? '✔️' : null].filter(Boolean).join(' ');\n const marksSuffix = marks ? ` ${marks}` : '';\n return (\n `${i + 1}. ${type} · ${g.status} · ${when} · ${g.model}${marksSuffix}\\n` +\n ` ${g.id}\\n` +\n ` \"${prompt}\"${url ? `\\n ${url}` : ''}`\n );\n });\n return textResult(lines.join('\\n\\n'));\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── cancel_generation ─────────────────────────────────────────────────────\n server.registerTool(\n 'cancel_generation',\n {\n title: 'Cancelar geração',\n description: 'Cancela uma geração em fila/processamento pelo id. Pode estornar diamantes.',\n inputSchema: {\n generation_id: z.string().min(1).describe('O id da geração a cancelar.'),\n },\n },\n async ({ generation_id }): Promise<ToolResult> => {\n try {\n await client.cancel(generation_id);\n return textResult(`✅ Geração ${generation_id} cancelada (diamantes estornados quando aplicável).`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── read_media_metadata (+ alias read_image_metadata) ─────────────────────\n // Reads the BePlus provenance embedded in ANY generated asset — image, video,\n // audio or music. `read_image_metadata` is kept as a deprecated alias so older\n // clients keep working.\n const readMetadataSchema = {\n url: z.string().url().optional().describe('URL pública do arquivo gerado — imagem, vídeo, áudio ou música (ex.: link do storage da BePlus).'),\n image_base64: z.string().optional().describe('Conteúdo do arquivo em base64 — use quando a mídia estiver na máquina do usuário (leia o arquivo do disco e converta para base64). Alternativa à url.'),\n };\n\n const readMetadataHandler = async ({ url, image_base64 }: { url?: string; image_base64?: string }): Promise<ToolResult> => {\n if (!url && !image_base64) return errorResult('Forneça url ou image_base64.');\n try {\n const r = await client.readProvenance(compact({ url, image_base64 }));\n if (!r.found) {\n return textResult(\n 'Nenhum dado de geração encontrado nesse arquivo (sem metadata embutida ou formato não suportado).'\n );\n }\n const p = r.provenance;\n const g = r.generation ?? undefined;\n const model = g?.model ?? p?.model ?? '(modelo desconhecido)';\n const prompt = g?.prompt ?? p?.prompt ?? '(sem prompt)';\n const configs = g?.input_params ?? p?.configs ?? {};\n const meta = (g?.metadata ?? {}) as Record<string, unknown>;\n\n // Mídias de ENTRADA. Antes só saíam as imagens, e só do tag embutido —\n // então vídeo/áudio de referência nunca apareciam, nem quando estavam\n // gravados no banco. O row do banco manda; o tag é o fallback pra\n // arquivo solto (de outra conta, ou geração já apagada).\n const asUrls = (v: unknown): string[] =>\n Array.isArray(v) ? v.filter((x): x is string => typeof x === 'string' && !!x) : [];\n const asUrl = (v: unknown): string | undefined =>\n typeof v === 'string' && v ? v : undefined;\n const pick = (fromDb: unknown, fromTag: unknown): string[] => {\n const db = asUrls(fromDb);\n return db.length > 0 ? db : asUrls(fromTag);\n };\n\n const images = pick(meta.input_image_urls, p?.input_image_urls);\n const refVideos = pick(meta.reference_video_urls, p?.reference_video_urls);\n const refAudios = pick(meta.reference_audio_urls, p?.reference_audio_urls);\n const motionVideo = asUrl(meta.motion_video_url) ?? asUrl(p?.motion_video_url);\n const endImage = asUrl(meta.end_image_url) ?? asUrl(p?.end_image_url);\n\n const lines = [\n `🧬 Dados da geração (${r.source === 'db' ? 'registro da conta' : 'metadata do arquivo'}):`,\n `• Modelo: ${model}`,\n `• Prompt: ${prompt}`,\n `• Configs: ${JSON.stringify(configs)}`,\n ];\n if (images.length) lines.push(`• Imagens de entrada: ${images.join(', ')}`);\n if (endImage) lines.push(`• Frame final: ${endImage}`);\n if (refVideos.length) lines.push(`• Vídeos de referência: ${refVideos.join(', ')}`);\n if (refAudios.length) lines.push(`• Áudios de referência: ${refAudios.join(', ')}`);\n if (motionVideo) lines.push(`• Vídeo de motion control: ${motionVideo}`);\n if (p?.generation_id) lines.push(`• generation_id: ${p.generation_id}`);\n return textResult(lines.join('\\n'));\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n };\n\n server.registerTool(\n 'read_media_metadata',\n {\n title: 'Ler dados de geração de uma mídia',\n description:\n 'Lê os dados de geração embutidos em QUALQUER mídia gerada na plataforma BePlus — imagem, vídeo, ' +\n 'áudio ou música (prompt, modelo, configs, inputs). Útil para recriar/ajustar uma geração a partir do ' +\n 'resultado. Passe o arquivo de UMA destas formas: (a) `url` pública (ex.: link do storage da BePlus); ' +\n 'ou (b) `image_base64` — se o arquivo estiver NA MÁQUINA DO USUÁRIO, leia-o do disco você mesmo e ' +\n 'envie o conteúdo em base64 neste campo. O servidor NUNCA acessa o filesystem do usuário; ler o ' +\n 'arquivo local e convertê-lo em base64 é responsabilidade do cliente (você).',\n inputSchema: readMetadataSchema,\n },\n readMetadataHandler,\n );\n\n // Deprecated alias — kept for backward compatibility with older clients.\n server.registerTool(\n 'read_image_metadata',\n {\n title: 'Ler dados de geração de uma mídia (alias)',\n description:\n '[Obsoleto — use read_media_metadata] Lê os dados de geração embutidos em qualquer mídia gerada na ' +\n 'BePlus (imagem, vídeo, áudio ou música). Passe `url` pública OU `image_base64` (se o arquivo estiver ' +\n 'na máquina do usuário, leia-o do disco e envie em base64).',\n inputSchema: readMetadataSchema,\n },\n readMetadataHandler,\n );\n}\n","import { open, stat } from 'node:fs/promises';\nimport { refuseLocalPath, safeFetch } from './remote';\nimport { extname, isAbsolute, resolve } from 'node:path';\nimport { homedir } from 'node:os';\nimport { fileURLToPath } from 'node:url';\n\n/**\n * Mede um arquivo de mídia lendo só o cabeçalho.\n *\n * O upscale precisa das dimensões ANTES de submeter: elas decidem o preço (por\n * megapixel de saída na imagem, por bloco de 10s no vídeo) e disparam as travas\n * de 30s/1080p do backend. Sem elas o servidor assume 1024²/10s/540p e cobra\n * errado — a web resolve isso medindo no browser, e aqui não havia equivalente.\n *\n * Lê cabeçalho em vez de chamar ffprobe de propósito: o pacote é distribuído\n * como bundle único e não pode depender de binário na máquina de quem usa.\n */\n\nexport interface ProbeResult {\n kind: 'image' | 'video';\n width: number;\n height: number;\n /** Segundos. Só para vídeo. */\n duration?: number;\n /** Quadros por segundo. Só para vídeo, e só quando dá para derivar. */\n fps?: number;\n}\n\nconst IMAGE_EXT = new Set(['.png', '.jpg', '.jpeg', '.webp']);\nconst VIDEO_EXT = new Set(['.mp4', '.mov', '.m4v']);\n\n/** Cabeçalho basta: o `moov` costuma estar no início em arquivo de web. */\nconst HEADER_BYTES = 128 * 1024;\n/** Um `moov` no fim do arquivo (padrão de gravação) exige varrer mais. */\nconst MAX_SCAN_BYTES = 8 * 1024 * 1024;\nconst FETCH_TIMEOUT_MS = 30_000;\n\nexport function isRemote(ref: string): boolean {\n return /^https?:\\/\\//i.test(ref);\n}\n\n/** Mesma resolução de caminho do media.ts (file://, ~, absoluto, relativo). */\nfunction toLocalPath(ref: string): string {\n refuseLocalPath(ref);\n if (ref.startsWith('file://')) return fileURLToPath(ref);\n if (ref === '~') return homedir();\n if (ref.startsWith('~/')) return resolve(homedir(), ref.slice(2));\n return isAbsolute(ref) ? ref : resolve(process.cwd(), ref);\n}\n\nexport function kindFromExt(ref: string): 'image' | 'video' | null {\n const ext = extname(new URL(ref, 'file:///').pathname || ref).toLowerCase();\n if (IMAGE_EXT.has(ext)) return 'image';\n if (VIDEO_EXT.has(ext)) return 'video';\n return null;\n}\n\n/**\n * Lê `len` bytes a partir de `offset`. É o que permite achar o `moov` sem\n * carregar o arquivo: quem grava vídeo põe o índice no FIM, depois de um `mdat`\n * que pode ter centenas de MB.\n */\nasync function readAt(ref: string, offset: number, len: number): Promise<Buffer> {\n if (!isRemote(ref)) {\n const fh = await open(toLocalPath(ref), 'r');\n try {\n const buf = Buffer.alloc(len);\n const { bytesRead } = await fh.read(buf, 0, len, offset);\n return buf.subarray(0, bytesRead);\n } finally {\n await fh.close();\n }\n }\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await safeFetch(ref, {\n headers: { Range: `bytes=${offset}-${offset + len - 1}` },\n signal: ctrl.signal,\n });\n if (res.status !== 206) throw new Error('servidor não aceita Range');\n return Buffer.from(await res.arrayBuffer());\n } finally {\n clearTimeout(timer);\n }\n}\n\n/**\n * Caminha pelos átomos de TOPO lendo só o cabeçalho de cada um (8 ou 16 bytes) e\n * pulando pelo `size`, até achar o `moov`. Devolve o átomo inteiro.\n */\nasync function findMoov(ref: string, fileSize: number): Promise<Buffer | null> {\n let offset = 0;\n for (let guard = 0; guard < 64 && offset + 8 <= fileSize; guard++) {\n const head = await readAt(ref, offset, 16);\n if (head.length < 8) return null;\n let size = head.readUInt32BE(0);\n const type = head.toString('ascii', 4, 8);\n if (size === 1) {\n if (head.length < 16) return null;\n size = Number(head.readBigUInt64BE(8));\n }\n if (size < 8) return null;\n if (type === 'moov') {\n // Teto de sanidade: um `moov` legítimo tem alguns MB, não centenas.\n return readAt(ref, offset, Math.min(size, MAX_SCAN_BYTES));\n }\n offset += size;\n }\n return null;\n}\n\n/** Lê os primeiros bytes, de disco ou por HTTP Range. */\nasync function readHead(ref: string, bytes: number): Promise<Buffer> {\n if (!isRemote(ref)) {\n const fh = await open(toLocalPath(ref), 'r');\n try {\n const buf = Buffer.alloc(bytes);\n const { bytesRead } = await fh.read(buf, 0, bytes, 0);\n return buf.subarray(0, bytesRead);\n } finally {\n await fh.close();\n }\n }\n\n // Range evita baixar um vídeo inteiro só para ler o cabeçalho. Servidor que\n // ignora o header devolve 200 com o arquivo todo, então o AbortController\n // corta assim que temos bytes suficientes.\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), FETCH_TIMEOUT_MS);\n try {\n const res = await safeFetch(ref, {\n headers: { Range: `bytes=0-${bytes - 1}` },\n signal: ctrl.signal,\n });\n if (!res.ok && res.status !== 206) throw new Error(`HTTP ${res.status}`);\n if (!res.body) return Buffer.from(await res.arrayBuffer());\n\n const chunks: Buffer[] = [];\n let total = 0;\n const reader = res.body.getReader();\n while (total < bytes) {\n const { done, value } = await reader.read();\n if (done || !value) break;\n chunks.push(Buffer.from(value));\n total += value.length;\n }\n void reader.cancel().catch(() => {});\n return Buffer.concat(chunks).subarray(0, bytes);\n } finally {\n clearTimeout(timer);\n }\n}\n\n// ─── imagem ──────────────────────────────────────────────────────────────────\n\nfunction probePng(b: Buffer): { width: number; height: number } | null {\n // 8 bytes de assinatura, depois o IHDR: length(4) type(4) width(4) height(4)\n if (b.length < 24) return null;\n if (b.readUInt32BE(0) !== 0x89504e47) return null;\n if (b.toString('ascii', 12, 16) !== 'IHDR') return null;\n return { width: b.readUInt32BE(16), height: b.readUInt32BE(20) };\n}\n\nfunction probeJpeg(b: Buffer): { width: number; height: number } | null {\n if (b.length < 4 || b[0] !== 0xff || b[1] !== 0xd8) return null;\n let i = 2;\n while (i + 9 < b.length) {\n if (b[i] !== 0xff) { i += 1; continue; }\n const marker = b[i + 1];\n // SOF0..SOF15, pulando DHT(c4), JPG(c8) e DAC(cc), que não trazem dimensão.\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n return { height: b.readUInt16BE(i + 5), width: b.readUInt16BE(i + 7) };\n }\n if (marker === 0xd8 || marker === 0x01 || (marker >= 0xd0 && marker <= 0xd7)) { i += 2; continue; }\n i += 2 + b.readUInt16BE(i + 2);\n }\n return null;\n}\n\nfunction probeWebp(b: Buffer): { width: number; height: number } | null {\n if (b.length < 30) return null;\n if (b.toString('ascii', 0, 4) !== 'RIFF' || b.toString('ascii', 8, 12) !== 'WEBP') return null;\n const fmt = b.toString('ascii', 12, 16);\n if (fmt === 'VP8 ') {\n // frame header: 3 bytes de tag + 3 de start code, depois 14 bits por eixo\n return { width: b.readUInt16LE(26) & 0x3fff, height: b.readUInt16LE(28) & 0x3fff };\n }\n if (fmt === 'VP8L') {\n const bits = b.readUInt32LE(21);\n return { width: (bits & 0x3fff) + 1, height: ((bits >> 14) & 0x3fff) + 1 };\n }\n if (fmt === 'VP8X') {\n // canvas em 24 bits little-endian, menos 1\n const w = b[24] | (b[25] << 8) | (b[26] << 16);\n const h = b[27] | (b[28] << 8) | (b[29] << 16);\n return { width: w + 1, height: h + 1 };\n }\n return null;\n}\n\n// ─── vídeo (MP4 / MOV) ───────────────────────────────────────────────────────\n\ninterface Mp4Info {\n width: number;\n height: number;\n duration?: number;\n fps?: number;\n}\n\n/**\n * Percorre os átomos do container atrás de `mvhd` (duração) e `tkhd` (dimensão).\n *\n * A dimensão sai do `tkhd` e não do `stsd` porque é ela que o player usa: um\n * vídeo de celular gravado em pé tem 1920×1080 no `stsd` e a rotação na matriz\n * do `tkhd`. Ignorar a matriz inverteria os eixos e o teto de 1080p passaria a\n * valer sobre o lado errado.\n */\nfunction mp4Info(b: Buffer): { width: number; height: number; duration?: number; fps?: number } {\n let duration: number | undefined;\n let width = 0;\n let height = 0;\n let frames = 0;\n let mediaDuration: number | undefined;\n\n const walk = (start: number, end: number, depth: number): void => {\n let i = start;\n while (i + 8 <= end && depth < 8) {\n let size = b.readUInt32BE(i);\n const type = b.toString('ascii', i + 4, i + 8);\n let head = 8;\n if (size === 1) {\n if (i + 16 > end) return;\n // 64 bits: a parte alta passa de 4 GB, muito além do que lemos aqui.\n size = Number(b.readBigUInt64BE(i + 8));\n head = 16;\n }\n if (size < head || i + size > end) {\n // Átomo truncado pelo corte do cabeçalho: o que veio antes já serve.\n return;\n }\n\n if (type === 'moov' || type === 'trak' || type === 'mdia' || type === 'minf' || type === 'stbl') {\n walk(i + head, i + size, depth + 1);\n } else if (type === 'mvhd') {\n const version = b[i + head];\n if (version === 1) {\n const timescale = b.readUInt32BE(i + head + 20);\n const dur = Number(b.readBigUInt64BE(i + head + 24));\n if (timescale) duration = dur / timescale;\n } else {\n const timescale = b.readUInt32BE(i + head + 12);\n const dur = b.readUInt32BE(i + head + 16);\n if (timescale) duration = dur / timescale;\n }\n } else if (type === 'tkhd') {\n const version = b[i + head];\n // Do fim do header do átomo até a matriz: 4 (version+flags) + os campos\n // de tempo (creation/modification/duration crescem de 4 para 8 bytes na\n // v1) + trackID/reserved + layer/alt_group/volume/reserved.\n const matrixAt = i + head + (version === 1 ? 52 : 40);\n const w = b.readUInt32BE(matrixAt + 36) / 65536;\n const h = b.readUInt32BE(matrixAt + 40) / 65536;\n if (w > 0 && h > 0) {\n const a = b.readInt32BE(matrixAt) / 65536;\n const d = b.readInt32BE(matrixAt + 16) / 65536;\n // a=0 e d=0 ⇒ rotação de 90°/270°: o player troca os eixos.\n const rotated = Math.abs(a) < 0.01 && Math.abs(d) < 0.01;\n const tw = Math.round(rotated ? h : w);\n const th = Math.round(rotated ? w : h);\n // Fica com a maior trilha de vídeo; trilhas de áudio têm 0×0.\n if (tw * th > width * height) { width = tw; height = th; }\n }\n } else if (type === 'mdhd') {\n const version = b[i + head];\n if (version === 1) {\n const ts = b.readUInt32BE(i + head + 20);\n const dur = Number(b.readBigUInt64BE(i + head + 24));\n if (ts) mediaDuration = dur / ts;\n } else {\n const ts = b.readUInt32BE(i + head + 12);\n const dur = b.readUInt32BE(i + head + 16);\n if (ts) mediaDuration = dur / ts;\n }\n } else if (type === 'stsz') {\n // sample_count é a contagem de quadros da trilha\n const count = b.readUInt32BE(i + head + 8);\n if (count > frames) frames = count;\n }\n\n i += size;\n }\n };\n\n walk(0, b.length, 0);\n const dur = duration ?? mediaDuration;\n const fps = width && height && dur && frames ? Math.round((frames / dur) * 100) / 100 : undefined;\n return { width, height, duration: dur, fps };\n}\n\nfunction probeMp4(b: Buffer): Mp4Info | null {\n const info = mp4Info(b);\n return info.width && info.height ? info : null;\n}\n\n// ─── entrada ─────────────────────────────────────────────────────────────────\n\n/** Tamanho total do arquivo — o passo antes de caminhar pelos átomos. */\nasync function fileSizeOf(ref: string): Promise<number> {\n if (!isRemote(ref)) return (await stat(toLocalPath(ref))).size;\n const res = await safeFetch(ref, { method: 'HEAD' });\n return Number(res.headers.get('content-length') ?? 0);\n}\n\nexport class ProbeError extends Error {}\n\n/**\n * Mede o arquivo. Lança `ProbeError` com motivo legível quando não consegue —\n * quem chama oferece os campos `source_*` como saída manual.\n */\nexport async function probeMedia(ref: string): Promise<ProbeResult> {\n const kind = kindFromExt(ref);\n if (!kind) {\n throw new ProbeError(\n 'Formato não reconhecido pela extensão. Aceito: png, jpg, jpeg, webp, mp4, mov, m4v.',\n );\n }\n\n let head: Buffer;\n try {\n head = await readHead(ref, HEADER_BYTES);\n } catch (e) {\n throw new ProbeError(`Não consegui ler o arquivo: ${e instanceof Error ? e.message : String(e)}`);\n }\n if (!head.length) throw new ProbeError('Arquivo vazio.');\n\n if (kind === 'image') {\n const dim = probePng(head) ?? probeJpeg(head) ?? probeWebp(head);\n if (!dim) throw new ProbeError('Não consegui ler as dimensões da imagem pelo cabeçalho.');\n return { kind, width: dim.width, height: dim.height };\n }\n\n let info = probeMp4(head);\n\n // `moov` no fim do arquivo — padrão de quem grava, não de quem publica para\n // web. Fatiar o fim às cegas cairia no meio do `mdat`; a varredura pula de\n // átomo em átomo pelo `size` e lê só o índice.\n if (!info) {\n try {\n const size = await fileSizeOf(ref);\n if (size > 0) {\n const moov = await findMoov(ref, size);\n if (moov) info = probeMp4(moov);\n }\n } catch { /* fica no erro abaixo */ }\n }\n\n if (!info) {\n throw new ProbeError(\n 'Não consegui ler as dimensões do vídeo pelo cabeçalho (o índice pode estar no fim do arquivo).',\n );\n }\n return { kind, width: info.width, height: info.height, duration: info.duration, fps: info.fps };\n}\n\n// ─── arquivo inteiro na memória (canvas_upload_media) ───────────────────────\n\n/** O que dá para saber de um arquivo: tudo opcional, e a fonte dos números. */\nexport interface MediaMeta {\n width?: number;\n height?: number;\n /** Segundos. */\n duration?: number;\n fps?: number;\n}\n\nfunction probeGif(b: Buffer): { width: number; height: number } | null {\n if (b.length < 10 || b.toString('ascii', 0, 4) !== 'GIF8') return null;\n return { width: b.readUInt16LE(6), height: b.readUInt16LE(8) };\n}\n\n/** WAV: `fmt ` dá o byteRate, `data` dá o tamanho do áudio. */\nfunction probeWav(b: Buffer): number | null {\n if (b.length < 12 || b.toString('ascii', 0, 4) !== 'RIFF' || b.toString('ascii', 8, 12) !== 'WAVE') return null;\n let byteRate = 0;\n for (let i = 12; i + 8 <= b.length; ) {\n const id = b.toString('ascii', i, i + 4);\n const size = b.readUInt32LE(i + 4);\n if (id === 'fmt ' && i + 16 <= b.length) byteRate = b.readUInt32LE(i + 16);\n if (id === 'data') {\n // Gravação em fluxo deixa o tamanho em 0 ou 0xFFFFFFFF: vale o que sobrou do arquivo.\n const bytes = size === 0 || size === 0xffffffff || i + 8 + size > b.length ? b.length - i - 8 : size;\n return byteRate ? bytes / byteRate : null;\n }\n i += 8 + size + (size % 2);\n }\n return null;\n}\n\n/** FLAC: STREAMINFO traz taxa de amostragem e total de amostras. */\nfunction probeFlac(b: Buffer): number | null {\n if (b.length < 42 || b.toString('ascii', 0, 4) !== 'fLaC' || (b[4] & 0x7f) !== 0) return null;\n const d = 8; // 4 da assinatura + 4 do cabeçalho do bloco\n const rate = (b[d + 10] << 12) | (b[d + 11] << 4) | (b[d + 12] >> 4);\n const total = (b[d + 13] & 0x0f) * 2 ** 32 + b.readUInt32BE(d + 14);\n return rate && total ? total / rate : null;\n}\n\nconst MP3_KBPS: Record<'v1' | 'v2', number[]> = {\n v1: [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320],\n v2: [0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],\n};\nconst MP3_RATES: Record<number, number[]> = { 3: [44100, 48000, 32000], 2: [22050, 24000, 16000], 0: [11025, 12000, 8000] };\n\n/**\n * MP3 (camada III): pula o ID3v2, lê o primeiro quadro e usa o cabeçalho Xing/Info\n * ou VBRI (VBR, contagem de quadros exata). Sem eles, é CBR: bytes × 8 / bitrate.\n */\nfunction probeMp3(b: Buffer): number | null {\n let i = 0;\n if (b.length > 10 && b.toString('ascii', 0, 3) === 'ID3') {\n const size = ((b[6] & 0x7f) << 21) | ((b[7] & 0x7f) << 14) | ((b[8] & 0x7f) << 7) | (b[9] & 0x7f);\n i = 10 + size + (b[5] & 0x10 ? 10 : 0);\n }\n for (const end = Math.min(b.length - 4, i + 64 * 1024); i < end; i++) {\n if (b[i] !== 0xff || (b[i + 1] & 0xe0) !== 0xe0) continue;\n const version = (b[i + 1] >> 3) & 0x03; // 3 = MPEG1, 2 = MPEG2, 0 = MPEG2.5\n const layer = (b[i + 1] >> 1) & 0x03; // 1 = camada III\n const kbps = MP3_KBPS[version === 3 ? 'v1' : 'v2'][(b[i + 2] >> 4) & 0x0f];\n const rate = MP3_RATES[version]?.[(b[i + 2] >> 2) & 0x03];\n if (version === 1 || layer !== 1 || !kbps || !rate) continue;\n const mono = ((b[i + 3] >> 6) & 0x03) === 3;\n const spf = version === 3 ? 1152 : 576;\n const side = version === 3 ? (mono ? 17 : 32) : mono ? 9 : 17;\n const xing = i + 4 + side;\n const tag = b.toString('ascii', xing, xing + 4);\n if ((tag === 'Xing' || tag === 'Info') && b[xing + 7] & 0x01) {\n const flags = b[xing + 7];\n const lame = xing + 12 + (flags & 0x02 ? 4 : 0) + (flags & 0x04 ? 100 : 0) + (flags & 0x08 ? 4 : 0);\n // Etiqueta LAME/Lavc: atraso do codificador e enchimento do fim (12 bits cada), como o ffprobe desconta.\n const gap = lame + 24 <= b.length && /^(LAME|Lavc|Lavf)/.test(b.toString('ascii', lame, lame + 4))\n ? (b[lame + 21] << 4) + (b[lame + 22] >> 4) + (((b[lame + 22] & 0x0f) << 8) | b[lame + 23])\n : 0;\n return (b.readUInt32BE(xing + 8) * spf - gap) / rate;\n }\n if (b.toString('ascii', i + 36, i + 40) === 'VBRI') return (b.readUInt32BE(i + 36 + 14) * spf) / rate;\n const tail = b.length >= 128 && b.toString('ascii', b.length - 128, b.length - 125) === 'TAG' ? 128 : 0;\n return ((b.length - i - tail) * 8) / (kbps * 1000);\n }\n return null;\n}\n\n/**\n * Mede o arquivo inteiro já carregado, pelo cabeçalho: imagem (png, jpg, webp,\n * gif), vídeo (mp4, mov, m4v) e áudio (wav, mp3, flac, m4a). Formato fora da\n * lista ou cabeçalho ilegível devolve null, e quem chama tenta o ffprobe.\n */\nexport function probeBuffer(b: Buffer, mime: string): MediaMeta | null {\n const round = (n: number) => Math.round(n * 1000) / 1000;\n if (mime.startsWith('image/')) {\n const dim = probePng(b) ?? probeJpeg(b) ?? probeWebp(b) ?? probeGif(b);\n return dim ? { width: dim.width, height: dim.height } : null;\n }\n if (/^(video|audio)\\/(mp4|quicktime|x-m4v|x-m4a|aac)$/.test(mime) || probeMp4Head(b)) {\n const info = mp4Info(b);\n if (!info.duration && !info.width) return null;\n const meta: MediaMeta = {};\n if (info.width && info.height && mime.startsWith('video/')) {\n meta.width = info.width;\n meta.height = info.height;\n if (info.fps) meta.fps = info.fps;\n }\n if (info.duration) meta.duration = round(info.duration);\n return meta;\n }\n if (mime.startsWith('audio/')) {\n // MP3 só pelo mime: sem assinatura fixa, a busca do quadro acharia sincronia falsa em ogg/opus.\n const seconds = probeWav(b) ?? probeFlac(b) ?? (mime === 'audio/mpeg' ? probeMp3(b) : null);\n return seconds ? { duration: round(seconds) } : null;\n }\n return null;\n}\n\n/** `ftyp` no começo: é MP4/MOV/M4A mesmo com o mime genérico. */\nfunction probeMp4Head(b: Buffer): boolean {\n return b.length > 12 && b.toString('ascii', 4, 8) === 'ftyp';\n}\n\n/**\n * Reserva opcional: `ffprobe` do FFmpeg, quando estiver no PATH. Cobre o que o\n * leitor de cabeçalho não lê (webm, mkv, ogg, opus, avi, heic…). Sem ele, o\n * arquivo sobe igual e a ferramenta diz que não mediu. Nunca derruba o upload.\n */\nexport async function ffprobeFile(path: string, timeoutMs = 20_000): Promise<MediaMeta | null> {\n // BEPLUS_FFPROBE: caminho do binário, ou \"0\" para não usar.\n const bin = process.env.BEPLUS_FFPROBE?.trim() || 'ffprobe';\n if (bin === '0') return null;\n const { execFile } = await import('node:child_process');\n const out = await new Promise<string | null>((done) => {\n execFile(\n bin,\n ['-v', 'error', '-print_format', 'json', '-show_entries', 'format=duration:stream=codec_type,width,height,avg_frame_rate', path],\n { timeout: timeoutMs, maxBuffer: 1024 * 1024 },\n (err, stdout) => done(err ? null : stdout),\n );\n });\n if (!out) return null;\n try {\n const j = JSON.parse(out) as {\n format?: { duration?: string };\n streams?: { codec_type?: string; width?: number; height?: number; avg_frame_rate?: string }[];\n };\n const meta: MediaMeta = {};\n const video = j.streams?.find((s) => s.codec_type === 'video' && s.width && s.height);\n if (video) {\n meta.width = video.width;\n meta.height = video.height;\n const [n, d] = String(video.avg_frame_rate ?? '').split('/').map(Number);\n if (n && d) meta.fps = Math.round((n / d) * 100) / 100;\n }\n const duration = Number(j.format?.duration);\n if (Number.isFinite(duration) && duration > 0) meta.duration = Math.round(duration * 1000) / 1000;\n return Object.keys(meta).length ? meta : null;\n } catch {\n return null;\n }\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage, ApiError } from '../api/errors';\nimport {\n TEAM_GATING_NOTE,\n isTeamGatingError,\n buildPickProjectMessage,\n isBudgetBlockedError,\n BUDGET_BLOCKED_GUIDANCE,\n} from './team-gating';\nimport { compact, costFooter, errorResult, outputUrls, resolveProjectArg, textResult, type ToolResult } from '../format';\nimport { resolveRef } from '../media';\nimport { pollUntilDone } from '../poll';\nimport { probeMedia, ProbeError, kindFromExt } from '../probe';\nimport { UPSCALE_IMAGE_VARIANTS, UPSCALE_VIDEO_VARIANTS } from '../schemas/enums';\n\n/**\n * Upscale Topaz (via fal) — aumenta a resolução de uma imagem ou de um vídeo\n * que já existe. Não gera nada do zero.\n */\n\nconst IMAGE_MODEL = 'topaz/upscale/image/generative';\nconst VIDEO_MODEL = 'topaz/upscale/video/generative';\n\n/** Espelham MAX_VIDEO_SECONDS / MAX_OUTPUT_HEIGHT do backend (falTopaz.ts). */\nconst MAX_VIDEO_SECONDS = 300;\nconst MAX_OUTPUT_HEIGHT = 1080;\n\n/** Imagem levou 16s no teste real; vídeo, 118s para 5s de material. */\nconst IMAGE_BUDGET_MS = 90_000;\nconst VIDEO_BUDGET_MS = 240_000;\n\nconst DEFAULT_IMAGE_VARIANT = 'Wonder 3';\nconst DEFAULT_VIDEO_VARIANT = 'Starlight Precise 2.6';\n/** `softness` só existe nesta variante — o backend descarta nas outras. */\nconst SOFTNESS_ONLY = 'Starlight Precise 2.6';\n\nexport function registerUpscaleTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n server.registerTool(\n 'upscale',\n {\n title: 'Melhorar resolução (upscale Topaz)',\n description:\n 'Aumenta a resolução de uma IMAGEM ou de um VÍDEO que já existe, com o Topaz. ' +\n 'Passe o arquivo em `file` (caminho local ou URL) — o tipo é detectado pela extensão e ' +\n 'define o modelo e os ajustes válidos. ' +\n 'Imagem: até 4x, ~20s, a partir de 6💎. ' +\n 'Vídeo: até 5 minutos (o teto do provedor) e saída até 1080p, custa por bloco de 10s ' +\n '(5s ≈ 87💎, 1 min ≈ 520💎, os 5 min chegam a ~2.600💎) e o ÁUDIO NÃO É MANTIDO. ' +\n '⏱️ Vídeo longo demora MUITO: o ritmo é ~1,7 megapixel-frame/s, então 1 min em 1080p passa ' +\n 'de 25 minutos e 5 min passam de 2 horas — a tool devolve o id e você acompanha com check_generation. ' +\n '⚠️ Melhorar vídeo é restrito a quem tem a tag de budget admin. ' +\n 'Use `estimate_cost` antes se quiser confirmar o preço.' +\n TEAM_GATING_NOTE,\n inputSchema: {\n file: z\n .string()\n .min(1)\n .describe(\n 'Arquivo a melhorar: caminho local (/foto.png, ~/Desktop/clipe.mp4) OU URL pública. ' +\n 'Caminho local sobe pro R2 automaticamente. Imagem: png, jpg, jpeg, webp. Vídeo: mp4, mov, m4v.',\n ),\n factor: z\n .number()\n .min(1)\n .max(4)\n .optional()\n .describe(\n 'Quantas vezes aumentar, de 1 a 4 — aceita fracionário (2.5 é válido), como a API do Topaz. ' +\n 'Padrão 2. Em 1x só melhora a qualidade, sem ampliar.',\n ),\n variant: z\n .string()\n .optional()\n .describe(\n 'Modelo do Topaz. Imagem: Wonder 3 (padrão, serve para quase tudo), Wonder 3.5 (detalhe fino), ' +\n 'Wonder 2, Wonder, Recover 3 (imagem muito danificada), Standard MAX (fiel ao original), ' +\n 'Redefine (usa a descrição), Recovery V2, Recovery. ' +\n 'Vídeo: Starlight Precise 2.6 (padrão), Starlight HQ, Starlight Mini, Starlight Sharp, ' +\n 'Starlight Fast 2 (mais rápido e custa metade).',\n ),\n project: z\n .string()\n .max(64)\n .optional()\n .describe('Projeto de destino (uuid OU code curto, ex.: \"VRAO-26\"). Ausente → projeto ativo.'),\n billing: z\n .enum(['personal'])\n .optional()\n .describe(\n '\"personal\" = cobra do seu diamante pessoal, IGNORANDO o projeto ativo (mesmo se houver um). ' +\n 'Use quando quiser garantir que isto NÃO sai do budget de nenhum projeto. Incompatível com `project`.',\n ),\n\n // ── só imagem ────────────────────────────────────────────────────────\n output_format: z.enum(['jpeg', 'png']).optional().describe('[imagem] Formato da saída. Padrão png.'),\n subject_detection: z\n .enum(['All', 'Foreground', 'Background'])\n .optional()\n .describe('[imagem] Onde aplicar: imagem toda, só o primeiro plano ou só o fundo. Padrão All.'),\n face_enhancement: z.boolean().optional().describe('[imagem] Tratar rostos separadamente. Padrão true.'),\n face_enhancement_strength: z.number().min(0).max(1).optional().describe('[imagem] Força nos rostos (0 a 1). Padrão 0.8.'),\n face_enhancement_creativity: z.number().min(0).max(1).optional().describe('[imagem] Liberdade nos rostos (0 a 1). Padrão 0.'),\n enhancement_strength: z.enum(['low', 'medium', 'high']).optional().describe('[imagem] Intensidade geral do tratamento.'),\n creativity: z.number().int().min(1).max(6).optional().describe('[imagem] Quanto detalhe o modelo pode inventar (1 a 6).'),\n texture: z.number().int().min(1).max(5).optional().describe('[imagem] Textura (1 a 5).'),\n sharpen: z.number().min(0).max(1).optional().describe('[imagem] Nitidez (0 a 1).'),\n denoise: z.number().min(0).max(1).optional().describe('[imagem] Redução de ruído (0 a 1).'),\n detail: z.number().min(0).max(1).optional().describe('[imagem] Detalhe (0 a 1).'),\n crop_to_fill: z.boolean().optional().describe('[imagem] Cortar para preencher em vez de encaixar.'),\n autoprompt: z.boolean().optional().describe('[imagem] O modelo escreve sozinho a orientação a partir da imagem.'),\n prompt: z\n .string()\n .max(2000)\n .optional()\n .describe('[imagem] Orientação para guiar a reconstrução (o que a imagem mostra). Útil no Redefine.'),\n\n // ── só vídeo ─────────────────────────────────────────────────────────\n softness: z\n .number()\n .int()\n .min(1)\n .max(5)\n .optional()\n .describe('[vídeo] Suavidade, 1 mais nítido e 5 mais suave. Só vale no Starlight Precise 2.6.'),\n target_fps: z\n .number()\n .int()\n .min(16)\n .max(60)\n .optional()\n .describe('[vídeo] Quadros por segundo da saída. Mudar o valor liga a interpolação de quadros.'),\n h264_output: z\n .boolean()\n .optional()\n .describe(\n '[vídeo] Exportar em H.264. Padrão true — desligado sai em H.265, que não toca no Firefox ' +\n 'e depende de hardware no Chrome.',\n ),\n\n // ── medidas ──────────────────────────────────────────────────────────\n source_width: z.number().int().positive().optional().describe('Largura do arquivo. Só se a leitura automática falhar.'),\n source_height: z.number().int().positive().optional().describe('Altura do arquivo. Só se a leitura automática falhar.'),\n source_duration: z.number().positive().optional().describe('[vídeo] Duração em segundos. Só se a leitura automática falhar.'),\n source_fps: z.number().positive().optional().describe('[vídeo] Quadros por segundo do arquivo. Só se a leitura automática falhar.'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const kind = kindFromExt(args.file);\n if (!kind) {\n return errorResult(\n 'Não reconheci o tipo do arquivo pela extensão. Imagem: png, jpg, jpeg, webp. Vídeo: mp4, mov, m4v.',\n );\n }\n const isVideo = kind === 'video';\n const factor = args.factor ?? 2;\n const variant = args.variant ?? (isVideo ? DEFAULT_VIDEO_VARIANT : DEFAULT_IMAGE_VARIANT);\n\n const allowed: readonly string[] = isVideo ? UPSCALE_VIDEO_VARIANTS : UPSCALE_IMAGE_VARIANTS;\n if (!allowed.includes(variant)) {\n return errorResult(\n `\"${variant}\" não é um modelo de ${isVideo ? 'vídeo' : 'imagem'}. Use um destes: ${allowed.join(', ')}.`,\n );\n }\n\n // Mede antes de subir: um vídeo de 40s seria recusado pelo backend\n // DEPOIS de um upload de centenas de MB.\n let width = args.source_width;\n let height = args.source_height;\n let duration = args.source_duration;\n let fps = args.source_fps;\n if (!width || !height || (isVideo && !duration)) {\n try {\n const probed = await probeMedia(args.file);\n width = width ?? probed.width;\n height = height ?? probed.height;\n duration = duration ?? probed.duration;\n fps = fps ?? probed.fps;\n } catch (e) {\n if (e instanceof ProbeError) {\n return errorResult(\n `${e.message}\\n\\n💡 Passe as medidas na mão para seguir: source_width, source_height` +\n (isVideo ? ', source_duration e source_fps' : '') +\n '. Sem elas o custo sai errado e a trava de tamanho não funciona.',\n );\n }\n throw e;\n }\n }\n\n // Guard-rails locais — espelham assertWithinLimits (falTopaz.ts:131).\n // Recusar aqui evita upload e cobrança. Imagem não tem teto.\n if (isVideo) {\n if (duration && duration > MAX_VIDEO_SECONDS) {\n return errorResult(\n `Este vídeo tem ${Math.round(duration)}s e o limite para melhorar é ` +\n `${Math.round(MAX_VIDEO_SECONDS / 60)} minutos. Corte um trecho menor e tente de novo.`,\n );\n }\n if (height && height * factor > MAX_OUTPUT_HEIGHT) {\n const maxFactor = Math.floor(MAX_OUTPUT_HEIGHT / height);\n return errorResult(\n maxFactor >= 2\n ? `Neste vídeo o aumento máximo é ${maxFactor}x — acima disso a saída passa de 1080p.`\n : 'Este vídeo já está em 1080p ou acima, então não dá para aumentar mais.',\n );\n }\n }\n\n // Caminho local sobe pro R2. Vídeo em base64 é recusado pelo backend,\n // então a URL pública não é opcional aqui.\n const url = await resolveRef(cfg, args.file);\n\n // Upscale não tem prompt de verdade: o rótulo descreve o que foi feito,\n // no mesmo formato da aba, senão o card da galeria fica \"Sem prompt\".\n const label = [isVideo ? 'Vídeo' : 'Imagem', `${factor}x`, variant].join(' · ');\n\n const input = compact({\n [isVideo ? 'video' : 'image']: url,\n model: variant,\n upscale_factor: factor,\n prompt: args.prompt || label,\n source_width: width,\n source_height: height,\n source_duration: duration,\n source_fps: fps,\n ...(isVideo\n ? {\n target_fps: args.target_fps,\n // O backend descarta softness fora desta variante; filtrar aqui\n // deixa o motivo visível em vez de sumir em silêncio.\n softness: variant === SOFTNESS_ONLY ? args.softness : undefined,\n H264_output: args.h264_output ?? true,\n }\n : {\n output_format: args.output_format,\n subject_detection: args.subject_detection,\n face_enhancement: args.face_enhancement,\n face_enhancement_strength: args.face_enhancement_strength,\n face_enhancement_creativity: args.face_enhancement_creativity,\n enhancement_strength: args.enhancement_strength,\n creativity: args.creativity,\n texture: args.texture,\n sharpen: args.sharpen,\n denoise: args.denoise,\n detail: args.detail,\n crop_to_fill: args.crop_to_fill,\n autoprompt: args.autoprompt,\n }),\n });\n\n const start = await client.startGeneration(\n compact({\n model: isVideo ? VIDEO_MODEL : IMAGE_MODEL,\n input,\n project: resolveProjectArg(args.project, args.billing, cfg.activeProject),\n billing: args.billing,\n }) as { model: string; input: Record<string, unknown>; project?: string; billing?: 'personal' },\n );\n if (!start.success || !start.generation_id) {\n if (isTeamGatingError(start.message)) return errorResult(await buildPickProjectMessage(client));\n return errorResult(start.message || 'Falha ao iniciar o upscale.');\n }\n\n const footer = costFooter(start, cfg);\n const { settled, status } = await pollUntilDone(\n client,\n start.generation_id,\n isVideo ? VIDEO_BUDGET_MS : IMAGE_BUDGET_MS,\n );\n\n if (!settled) {\n return textResult(\n `⏳ Upscale ainda em processamento (id: ${start.generation_id}, ${status.progress ?? 0}%). ` +\n (isVideo\n ? 'Vídeo costuma levar de 3 a 15 minutos, dependendo da duração e da resolução de saída — '\n : '') +\n `use check_generation com esse id.\\n${footer}`,\n );\n }\n if (status.status === 'failed') {\n return errorResult(`Upscale falhou: ${status.error_message || 'erro desconhecido'}.\\n${footer}`);\n }\n\n const urls = outputUrls(status);\n const list = urls.map((u, i) => `${i + 1}. ${u}`).join('\\n') || '(sem URLs)';\n const saida = width && height ? ` — saída ${width * factor} × ${height * factor}` : '';\n const semAudio = isVideo ? '\\nO áudio não foi mantido (o Topaz descarta a faixa).' : '';\n return textResult(\n `✅ ${isVideo ? 'Vídeo' : 'Imagem'} melhorado em ${factor}x com ${variant}${saida}.\\n${list}${semAudio}\\n${footer}`,\n );\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n },\n );\n}\n","import { z } from 'zod';\nimport { isRemoteRef, loadLocal, loadRemote } from '../media';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage, ApiError } from '../api/errors';\nimport {\n TEAM_GATING_NOTE,\n isTeamGatingError,\n buildPickProjectMessage,\n isBudgetBlockedError,\n BUDGET_BLOCKED_GUIDANCE,\n} from './team-gating';\nimport { budgetLine, compact, errorResult, textResult, weeklyAllowanceLine, type ToolResult } from '../format';\nimport { TTS_MODELS, TTS_MODELS_38, LIBRARY_VOICE_ID, CUSTOM_VOICE_ID, VOICES, DEFAULTS } from '../schemas/enums';\n\nconst VOICE_HELP =\n 'Uma das 30 vozes clássicas (Kore, Puck, Charon...) OU o id de uma voz da biblioteca (ex.: pt-br-advisor-10, ' +\n 'só nos modelos 3.8; descubra ids com list_tts_voices).';\nconst VOICE_HELP_TOP =\n `${VOICE_HELP} Ou o id de uma voz própria (voice_xxx, de list_custom_voices; só 3.8 e sem multi_speaker).`;\n\nconst voiceSchema = z\n .string()\n .refine((v) => (VOICES as readonly string[]).includes(v) || LIBRARY_VOICE_ID.test(v), {\n message: 'Voz inválida: use uma das 30 vozes clássicas (ex.: Kore) ou um id da biblioteca (ex.: pt-br-advisor-10).',\n });\n\nconst topVoiceSchema = z\n .string()\n .refine((v) => v === 'seed-auto' || (VOICES as readonly string[]).includes(v) || LIBRARY_VOICE_ID.test(v) || CUSTOM_VOICE_ID.test(v), {\n message:\n 'Voz inválida: use uma das 30 vozes clássicas (ex.: Kore), um id da biblioteca (ex.: pt-br-advisor-10) ou uma voz própria (voice_xxx).',\n });\n\nexport function isCustomVoice(v: string): boolean {\n return CUSTOM_VOICE_ID.test(v);\n}\n\nfunction isLibraryVoice(v: string): boolean {\n return !(VOICES as readonly string[]).includes(v) && LIBRARY_VOICE_ID.test(v);\n}\n\nconst speakerSchema = z.object({\n name: z.string().min(1).max(50),\n voice: voiceSchema.describe(VOICE_HELP),\n style: z.string().max(500).optional().describe('Entrega deste locutor (só modelos 3.8), ex.: \"calmo, grave, pausado\".'),\n});\n\nexport function registerAudioTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n server.registerTool(\n 'generate_audio',\n {\n title: 'Gerar áudio (TTS)',\n description:\n 'Sintetiza fala a partir de texto e retorna a URL usando o IA Lab da BePlus. ' +\n 'SeedAudio 1.0 (seed-audio-1.0) aceita direção e uma referência de voz opcional via seed_reference ou seed_reference_generation_id, com seed_consent. Texto e direção somados até 2700 caracteres. Não aceita diálogo nem vozes Gemini. ' +\n 'Modelos Gemini 3.8 (`gemini-3.8-flash-lite-tts`, padrão, rápido e barato; `gemini-3.8-flash-tts`, qualidade de estúdio, ' +\n 'melhor para diálogo e narração longa) aceitam: vozes da biblioteca (milhares, por idioma; liste com `list_tts_voices` e passe o id ' +\n 'em `voice`), tags vocais no texto como <laugh> <chuckle> <sigh> <breath> <gasp> <cough> <sneeze> <throat-clearing> <yawn> <groan> ' +\n '<scream> <whimper> <argh> <short pause> <long pause> (viram som de verdade), e estilo por locutor (`style` em cada speaker). ' +\n 'No 3.8, `style_instruction` é direção e NÃO é lida em voz alta. Os modelos legados (`gemini-3.1-flash-tts-preview`, ' +\n '`gemini-2.5-pro-preview-tts`) só aceitam as 30 vozes clássicas (Kore, Puck, Charon...) e não têm voz da biblioteca. ' +\n 'Vozes próprias (voice_xxx; liste com `list_custom_voices`, crie com `design_voice`) só no 3.8 e sem `multi_speaker`. ' +\n 'No 3.8, direção por linha: `(sussurrando) texto` no início da linha vale até a próxima direção; no diálogo, `Ana (rindo): fala`; ' +\n 'reações `|hmm|` `|aham|` no meio da fala (só diálogo). ' +\n 'Opcional `style_instruction` (ex.: \"fale animado e pausado\") e diálogo com 2 locutores via `multi_speaker`. ' +\n 'Consome diamantes por segundo de áudio.' +\n TEAM_GATING_NOTE,\n inputSchema: {\n text: z.string().min(1).max(10000).describe('Texto a ser falado.'),\n voice: topVoiceSchema.optional().describe(VOICE_HELP_TOP + ' No SeedAudio, omita ou use seed-auto.'),\n seed_reference: z.string().min(1).optional().describe('SeedAudio: arquivo local (stdio) ou URL pública de uma voz autorizada, de 1 a 30 s e até 3 MiB. Não é publicado pelo MCP.'),\n seed_reference_generation_id: z.string().uuid().optional().describe('Reutiliza a referência de uma geração SeedAudio sua. Alternativa a seed_reference.'),\n seed_consent: z.literal(true).optional().describe('Confirme apenas após autorização explícita da pessoa para usar sua voz. Obrigatório com referência.'),\n model: z.enum(TTS_MODELS).default(DEFAULTS.ttsModel).describe('Modelo TTS.'),\n style_instruction: z\n .string()\n .max(2000)\n .optional()\n .describe('Instrução de estilo/tom aplicada à fala.'),\n multi_speaker: z\n .object({\n speaker1: speakerSchema,\n speaker2: speakerSchema,\n })\n .optional()\n .describe('Diálogo de 2 locutores. Marque as falas no texto como \"Nome: ...\".'),\n project: z\n .string()\n .max(64)\n .optional()\n .describe('Projeto (uuid OU code curto, ex.: \"VRAO-26\"). Omita para usar o projeto ativo da conta.'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const seed = args.model === 'seed-audio-1.0';\n const voice = args.voice ?? (seed ? 'seed-auto' : DEFAULTS.voice);\n const hasReference = !!(args.seed_reference || args.seed_reference_generation_id);\n if (!seed && (hasReference || args.seed_consent || voice === 'seed-auto')) return errorResult('Os controles SeedAudio exigem seed-audio-1.0.');\n if (seed && (voice !== 'seed-auto' || args.multi_speaker)) return errorResult('SeedAudio usa seed-auto e não aceita diálogo.');\n if (args.seed_reference && args.seed_reference_generation_id) return errorResult('Use apenas uma origem de referência.');\n if (hasReference && !args.seed_consent) return errorResult('Confirme a autorização da voz em seed_consent.');\n if (seed && args.text.trim().length + (args.style_instruction?.trim().length ?? 0) > 2700) return errorResult('SeedAudio: texto e direção devem somar até 2700 caracteres.');\n const ms = args.multi_speaker;\n const voices = [voice, ms?.speaker1.voice, ms?.speaker2.voice].filter((v): v is string => !!v);\n if (isCustomVoice(voice)) {\n if (!TTS_MODELS_38.includes(args.model)) {\n return errorResult('Vozes próprias só funcionam nos modelos Gemini 3.8 (gemini-3.8-flash-lite-tts, gemini-3.8-flash-tts).');\n }\n if (ms) {\n return errorResult('Vozes próprias não funcionam no modo diálogo (multi_speaker). Use uma voz da biblioteca ou clássica.');\n }\n }\n if (!seed && !TTS_MODELS_38.includes(args.model)) {\n if (voices.some(isLibraryVoice)) {\n return errorResult(\n 'Vozes da biblioteca só funcionam nos modelos Gemini 3.8 (gemini-3.8-flash-lite-tts, gemini-3.8-flash-tts). ' +\n `O modelo ${args.model} só aceita as 30 vozes clássicas (Kore, Puck, Charon...).`\n );\n }\n if (ms?.speaker1.style || ms?.speaker2.style) {\n return errorResult('O estilo por locutor (`style`) só funciona nos modelos Gemini 3.8.');\n }\n }\n let seedReference: { audio: string; mime: string } | undefined;\n if (args.seed_reference) {\n const file = await (isRemoteRef(args.seed_reference) ? loadRemote(args.seed_reference, 3 * 1024 * 1024) : loadLocal(args.seed_reference, 3 * 1024 * 1024));\n if (!file.buf.length || file.buf.length > 3 * 1024 * 1024) return errorResult('A referência deve ter até 3 MiB.');\n seedReference = { audio: file.buf.toString('base64'), mime: file.mime };\n }\n const body = compact({\n seedReference,\n seedReferenceGenerationId: args.seed_reference_generation_id,\n seedConsent: args.seed_consent,\n text: args.text,\n voice: voice,\n model: args.model,\n styleInstruction: args.style_instruction,\n multiSpeaker: args.multi_speaker,\n project: args.project ?? cfg.activeProject ?? undefined,\n });\n\n const res = await client.tts(body);\n const parts = [`Custo: ${res.diamond_cost} 💎`];\n if (res.diamonds_refunded) parts.push(`Estorno: ${res.diamonds_refunded} 💎`);\n\n const projLine = res.project_code\n ? `\\n📁 Projeto: ${res.project_code}${res.project_name ? `: ${res.project_name}` : ''}`\n : '';\n const wa = weeklyAllowanceLine(res.weekly_allowance);\n // Budget do cliente/projeto — presente quando a síntese cobrou do pote.\n const budget = budgetLine(res.budget);\n return textResult(\n `✅ Áudio gerado (${res.model}, voz ${seed ? \"por referência ou descrição\" : res.voice}, ${res.duration_sec.toFixed(1)}s).\\n` +\n `${res.url}\\nGeração: ${res.generation_id}\\n${parts.join(' · ')}${projLine}` +\n (budget ? `\\n${budget}` : '') +\n (wa ? `\\n${wa}` : '')\n );\n } catch (e) {\n const msg = e instanceof ApiError ? e.message : e instanceof Error ? e.message : '';\n if (isTeamGatingError(msg)) return errorResult(await buildPickProjectMessage(client));\n if (isBudgetBlockedError(msg)) {\n return errorResult(`${apiErrorToUserMessage(e)}\\n${BUDGET_BLOCKED_GUIDANCE}`);\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n server.registerTool(\n 'list_tts_voices',\n {\n title: 'Listar vozes da biblioteca TTS',\n description:\n 'Lista vozes da biblioteca do Gemini 3.8 TTS (não inclui as 30 clássicas como Kore e Puck). Filtre por idioma ' +\n '(`language`, BCP-47, padrão pt-BR; \"all\" = todos), `gender`, `pitch`, `context` (ex.: Audiobook) e `search` ' +\n '(texto livre em nome, persona, descrição, sotaque). Passe o `id` da voz em `voice` do generate_audio com um modelo ' +\n '3.8 (gemini-3.8-flash-lite-tts ou gemini-3.8-flash-tts). Somente leitura, sem custo.',\n inputSchema: {\n language: z.string().max(12).optional().describe('Idioma BCP-47, ex.: pt-BR, en-US. Padrão pt-BR. \"all\" = sem filtro.'),\n gender: z.enum(['female', 'male', 'neutral']).optional(),\n pitch: z.enum(['low', 'medium', 'high']).optional(),\n context: z.string().max(60).optional().describe('Uso da voz (trecho), ex.: Audiobook, Enterprise Agent.'),\n search: z.string().max(100).optional().describe('Texto livre: nome, persona, descrição, sotaque.'),\n limit: z.number().int().min(1).max(200).optional().describe('Padrão 60.'),\n offset: z.number().int().min(0).optional(),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const res = await client.ttsVoices(compact(args) as Record<string, string | number | undefined>);\n const offset = args.offset ?? 0;\n if (!res.voices.length) {\n return textResult(`Nenhuma voz encontrada (total ${res.total}). Idiomas disponíveis: ${res.languages.join(', ')}.`);\n }\n const lines = res.voices.map((v) => {\n const desc = v.description ? ` | ${v.description.length > 110 ? `${v.description.slice(0, 107)}...` : v.description}` : '';\n return `${v.id} | ${v.name} | ${v.gender} | ${v.pitch}${desc}`;\n });\n const more = res.total > offset + res.voices.length ? ` Use offset=${offset + res.voices.length} para ver mais.` : '';\n return textResult(\n `Vozes ${offset + 1}-${offset + res.voices.length} de ${res.total} (id | nome | gênero | tom | descrição):\\n` +\n `${lines.join('\\n')}\\n\\nUse o id em voice (modelos 3.8).${more}\\nContextos: ${res.contexts.join(', ')}.`\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n server.registerTool(\n 'list_custom_voices',\n {\n title: 'Listar vozes próprias',\n description:\n 'Lista as suas vozes próprias do TTS 3.8 (máx. 3, guardadas por 1 ano). Passe o campo `voice` (voice_xxx) em `voice` do ' +\n 'generate_audio com um modelo 3.8, sem multi_speaker. Crie com `design_voice`. Clonar a própria voz exige gravação de ' +\n 'consentimento ao vivo e só existe no app web. Somente leitura, sem custo.',\n inputSchema: {},\n },\n async (): Promise<ToolResult> => {\n try {\n const res = await client.customVoices();\n const head = `Vozes próprias: ${res.used} de ${res.limit}. Criar uma voz custa ${res.design_cost} 💎.`;\n if (!res.voices.length) return textResult(`${head}\\nNenhuma ainda. Use design_voice para criar.`);\n const lines = res.voices.map(\n (v) => `${v.id} | ${v.voice} | ${v.name} | ${v.kind} | expira ${v.expires_at.slice(0, 10)}`\n );\n return textResult(\n `${head} (id | voice | nome | tipo | validade):\\n${lines.join('\\n')}\\n\\nUse o valor de \"voice\" (voice_xxx) no generate_audio. Para apagar, use o \"id\" em delete_custom_voice.`\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n server.registerTool(\n 'design_voice',\n {\n title: 'Criar voz própria por descrição',\n description:\n 'Cria uma voz própria a partir de uma descrição em texto (idade, timbre, sotaque, jeito de falar). GASTA diamantes ' +\n '(o custo aparece em list_custom_voices; estorna se falhar) e leva cerca de 30 s. Máx. 3 vozes por pessoa; a voz fica ' +\n 'guardada por 1 ano. Depois use o `voice` retornado no generate_audio (modelos 3.8, sem multi_speaker).',\n inputSchema: {\n name: z.string().min(1).max(40).describe('Nome da voz (1 a 40 caracteres).'),\n description: z\n .string()\n .min(10)\n .max(500)\n .describe('Como é a voz: idade, gênero, timbre, sotaque, jeito de falar (10 a 500 caracteres).'),\n language: z.string().max(12).optional().describe('Idioma BCP-47. Padrão pt-BR.'),\n gender: z.enum(['female', 'male', 'neutral']).optional(),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const res = await client.designVoice(compact(args));\n const v = res.voice;\n return textResult(\n `✅ Voz criada: ${v.name} (${v.kind}).\\nvoice: ${v.voice}\\nid: ${v.id}\\n` +\n (v.sample_url ? `Amostra: ${v.sample_url}\\n` : '') +\n `Custo: ${res.diamond_cost} 💎 · Saldo: ${res.new_balance} 💎 · Expira em ${v.expires_at.slice(0, 10)}.\\n` +\n 'Use o valor de \"voice\" no generate_audio com um modelo 3.8 (sem multi_speaker).'\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n server.registerTool(\n 'delete_custom_voice',\n {\n title: 'Apagar voz própria',\n description:\n 'DESTRUTIVO e sem volta: apaga uma voz própria (aqui e no Google) e libera 1 vaga das 3. Áudios já gerados com ela continuam ' +\n 'tocando, mas não dá para gerar novos com essa voz. Não devolve diamantes. Passe o `id` (uuid) de list_custom_voices, ' +\n 'não o voice_xxx. Confirme com o usuário antes.',\n inputSchema: {\n id: z.string().uuid().describe('Campo \"id\" (uuid) da voz em list_custom_voices.'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n await client.deleteCustomVoice(args.id);\n return textResult(`✅ Voz ${args.id} apagada. Uma vaga foi liberada.`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport { probeMedia, ProbeError } from '../probe';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage } from '../api/errors';\nimport {\n analyzeCatalogBlock,\n budgetLine,\n compact,\n errorResult,\n textResult,\n weeklyAllowanceLine,\n type ToolResult,\n} from '../format';\n\nexport function registerAccountTools(server: McpServer, client: BeplusClient, _cfg: Config): void {\n // ── whoami ──────────────────────────────────────────────────────────────\n server.registerTool(\n 'whoami',\n {\n title: 'Conta vinculada',\n description:\n 'Verifica o token (PAT) e mostra a conta BePlus vinculada (nome, email, saldo). Use para confirmar o vínculo.',\n inputSchema: {},\n },\n async (): Promise<ToolResult> => {\n try {\n const me = await client.me();\n const wa = weeklyAllowanceLine(me.weekly_allowance);\n // Budget do projeto ativo (pote compartilhado), quando aplicável.\n const budget = budgetLine(me.budget);\n return textResult(\n `👤 ${me.name ?? '(sem nome)'} <${me.email ?? 'sem email'}>\\n` +\n `Saldo: ${me.diamonds} 💎 · auth: ${me.authType}` +\n (wa ? `\\n${wa}` : '') +\n (budget ? `\\n${budget}` : '')\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── get_balance ─────────────────────────────────────────────────────────\n server.registerTool(\n 'get_balance',\n {\n title: 'Saldo de diamantes',\n description:\n 'Mostra o saldo atual de diamantes e, para membros da equipe, o crédito semanal ' +\n '(% usado, quanto resta e quando reseta).',\n inputSchema: {},\n },\n async (): Promise<ToolResult> => {\n try {\n const b = await client.balance();\n const wa = weeklyAllowanceLine(b.weekly_allowance);\n // Budget do projeto ativo (pote compartilhado), quando aplicável.\n const budget = budgetLine(b.budget);\n return textResult(\n `Saldo: ${b.diamonds} 💎` + (wa ? `\\n${wa}` : '') + (budget ? `\\n${budget}` : '')\n );\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── list_models ───────────────────────────────────────────────────────────\n server.registerTool(\n 'list_models',\n {\n title: 'Listar modelos',\n description:\n 'Lista os modelos disponíveis com preço-base e limites por usuário, e o catálogo de análise ' +\n 'multimodal (Gemini, Claude e GPT) agrupado por faixa de preço. Use quando estiver em dúvida ' +\n 'sobre qual modelo/params usar ou quanto custa. É a fonte de verdade em runtime.',\n inputSchema: {\n kind: z.enum(['image', 'video', 'audio', 'all']).default('all').optional().describe('Filtrar por tipo.'),\n },\n },\n async (): Promise<ToolResult> => {\n try {\n const m = await client.models();\n const lines = m.models.map((x) => {\n const price = typeof x.pricing === 'number' ? `$${x.pricing}` : JSON.stringify(x.pricing);\n return `• ${x.model} — ${price} (base USD)`;\n });\n const analyzeBlock = analyzeCatalogBlock(m.analyze);\n const txt =\n `Modelos de geração:\\n${lines.join('\\n') || '(nenhum)'}` +\n analyzeBlock +\n `\\n\\nLimites simultâneos por usuário: imagem=${m.limits.perUserMaxImage}, ` +\n `vídeo=${m.limits.perUserMaxVideo}, áudio=${m.limits.perUserMaxAudio}.\\n` +\n `1 💎 ≈ $${m.pricing.diamondValueUsd} (margem ${m.pricing.diamondMargin}x, mín ${m.pricing.minDiamonds} 💎). ` +\n `Use estimate_cost para o custo exato em diamantes (geração).`;\n return textResult(txt);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── estimate_cost ─────────────────────────────────────────────────────────\n server.registerTool(\n 'estimate_cost',\n {\n title: 'Estimar custo',\n description:\n 'Retorna o custo autoritativo em diamantes ANTES de gerar. Para áudio (TTS) o custo é por segundo e ' +\n 'só é conhecido após a síntese.',\n inputSchema: {\n model: z.string().min(1).describe('Id do modelo (ex.: google/nano-banana-pro, bytedance/seedance-2.0).'),\n resolution: z.string().optional(),\n duration: z.number().int().optional(),\n mode: z.string().optional(),\n size: z.string().optional(),\n quality: z.string().optional(),\n aspect_ratio: z.string().optional().describe('Seedream Pro: a proporção muda os pixels e a faixa de preço.'),\n num_images: z.number().int().min(1).optional().describe('Seedream Pro: imagens por pedido; cada uma é cobrada.'),\n task_type: z\n .string()\n .optional()\n .describe('[música] extend e upload_extend usam o preço \"suno/extend\"; os demais, o do modelo.'),\n provider: z\n .enum(['byteplus', 'fal'])\n .optional()\n .describe('Seedance: provedor que vai gerar (padrão byteplus). `fal` tem preço próprio, mais caro.'),\n // Upscale: o preço não sai de uma chave fixa — vem das medidas do\n // arquivo (megapixel de saída na imagem, bloco de 10s no vídeo). Sem\n // elas o backend responde pelo padrão de 1024²/10s, que não é o preço\n // que vai ser cobrado.\n file: z\n .string()\n .optional()\n .describe(\n '[upscale] Arquivo a medir (caminho local ou URL) — preenche sozinho as medidas abaixo. ' +\n 'Use com model=topaz/upscale/image/generative ou .../video/generative.',\n ),\n upscale_factor: z.number().min(1).max(4).optional().describe('[upscale] Fator de aumento, de 1 a 4 (aceita fracionário). Padrão 2.'),\n model_variant: z\n .string()\n .optional()\n .describe('[upscale] Variante do Topaz (ex.: Wonder 3, Starlight Fast 2) — muda o preço.'),\n source_width: z.number().int().positive().optional().describe('[upscale] Largura do arquivo.'),\n source_height: z.number().int().positive().optional().describe('[upscale] Altura do arquivo.'),\n source_duration: z.number().positive().optional().describe('[upscale] Duração em segundos (vídeo).'),\n source_fps: z.number().positive().optional().describe('[upscale] Quadros por segundo do arquivo (vídeo).'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n let width = args.source_width;\n let height = args.source_height;\n let duration = args.source_duration;\n let fps = args.source_fps;\n if (args.file && (!width || !height)) {\n try {\n const probed = await probeMedia(args.file);\n width = width ?? probed.width;\n height = height ?? probed.height;\n duration = duration ?? probed.duration;\n fps = fps ?? probed.fps;\n } catch (e) {\n if (e instanceof ProbeError) return errorResult(e.message);\n throw e;\n }\n }\n const c = await client.calculateCost(\n compact({\n model:\n args.model.startsWith('suno/') && (args.task_type === 'extend' || args.task_type === 'upload_extend')\n ? 'suno/extend'\n : args.model,\n resolution: args.resolution,\n duration: args.duration,\n mode: args.mode,\n size: args.size,\n quality: args.quality,\n aspect_ratio: args.aspect_ratio,\n num_images: args.num_images,\n seedance_provider: args.provider === 'fal' ? 'fal' : undefined,\n upscale_factor: args.upscale_factor,\n model_variant: args.model_variant,\n source_width: width,\n source_height: height,\n source_duration: duration,\n source_fps: fps,\n }) as Record<string, string | number | undefined>\n );\n const note = c.fallback ? ' [modelo desconhecido — custo mínimo]' : '';\n return textResult(`Custo estimado: ${c.cost} 💎 (${c.model})${note}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage } from '../api/errors';\nimport { compact, errorResult, textResult, type ToolResult } from '../format';\nimport { resolveRefs } from '../media';\n\nexport function registerAnalyzeTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n // ── analyze_media ───────────────────────────────────────────────────────────\n server.registerTool(\n 'analyze_media',\n {\n title: 'Analisar mídia (Gemini, Claude e GPT)',\n description:\n 'Envia um prompt + mídia (imagem, vídeo, áudio ou PDF) para um modelo de texto e devolve a resposta. ' +\n 'Use para descrever/analisar/transcrever/resumir/extrair informação de mídia, ou perguntar algo sobre ela. ' +\n 'Também funciona só com texto, sem mídia. Três faixas de preço: econômica, média e top. ' +\n 'A mídia entra como `media_urls` (URLs públicas ou caminhos locais). Vídeo e áudio só nos modelos Gemini, ' +\n 'que leem arquivos grandes pela Files API do Google. Consome diamantes (reembolsados se falhar). ' +\n 'O catálogo vivo, com preço por 1M de tokens e mídia aceita por modelo, sai no list_models.',\n inputSchema: {\n prompt: z\n .string()\n .min(1)\n .max(50000)\n .describe('O que você quer do modelo sobre a mídia (ex.: \"descreva este vídeo\", \"transcreva este áudio\").'),\n media_urls: z\n .array(z.string().min(1))\n .max(50)\n .optional()\n .describe(\n 'Mídia (imagem/vídeo/áudio/PDF): URLs públicas OU caminhos de arquivo local ' +\n '(o MCP sobe pro R2 automaticamente). Pode misturar tipos. Opcional (prompt só-texto também funciona).',\n ),\n // String livre, não z.enum: quem valida o apelido é o backend, então um\n // modelo novo no catálogo passa a valer sem republicar o pacote.\n model: z\n .string()\n .min(1)\n .default('gemini-flash')\n .optional()\n .describe(\n 'Apelido do modelo. Econômicos: gemini-lite, gpt-mini, claude-haiku. ' +\n 'Médios: gemini-flash (padrão), gpt, claude-sonnet. ' +\n 'Top: gemini-pro, claude-opus, gpt-pro, claude-fable. ' +\n 'Vídeo e áudio só nos gemini-*; PDF nos gemini-* e claude-*; os gpt-* leem só imagem. ' +\n 'Lista autoritativa, com preços: list_models.',\n ),\n project: z\n .string()\n .optional()\n .describe(\n 'Projeto (uuid ou code curto, ex.: \"ICONS\") de cujo budget cobrar. ' +\n 'Omitido → usa o projeto ativo da conta.',\n ),\n billing: z\n .enum(['personal'])\n .optional()\n .describe(\n '\"personal\" = cobra do seu diamante pessoal, IGNORANDO o projeto ativo (mesmo se houver um). ' +\n 'Use quando quiser garantir que isto NÃO sai do budget de nenhum projeto. Incompatível com `project`.',\n ),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n // Caminhos locais sobem pro R2; URLs públicas passam direto.\n const media_urls = await resolveRefs(cfg, args.media_urls);\n const res = await client.analyzeMedia(\n compact({\n prompt: args.prompt,\n media_urls,\n model: args.model,\n project: args.project,\n billing: args.billing,\n }) as { prompt: string; media_urls?: string[]; model?: string; project?: string; billing?: 'personal' }\n );\n // Diz de ONDE saiu: \"saldo\" sem qualificar fez uma cobrança de budget\n // ser lida como débito na conta pessoal.\n const origem =\n res.chargedFrom === 'budget'\n ? 'restam no budget do projeto'\n : res.chargedFrom === 'weekly_allowance'\n ? 'restam no crédito semanal'\n : res.chargedFrom === 'unlimited'\n ? 'limite livre'\n : 'saldo pessoal';\n const footer =\n `\\n\\n— ${res.diamondsUsed} 💎 (${res.newBalance} ${origem}) · ${res.model} · ` +\n `${res.inputTokens}→${res.outputTokens} tok`;\n return textResult(`${res.text}${footer}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage } from '../api/errors';\nimport { budgetLine, errorResult, textResult, type ToolResult } from '../format';\nimport type { ProjectInfo } from '../api/types';\n\nfunction projectLine(p: ProjectInfo, active: boolean): string {\n const marker = active ? '● ' : '○ ';\n const counts = `${p.generation_count ?? 0} gerações`;\n const owner = p.client_name ? ` · cliente: ${p.client_name}` : '';\n const budget = p.budget?.enabled\n ? ` · budget ${p.budget.remainingDiamonds}/${p.budget.quotaDiamonds}💎`\n : '';\n return `${marker}${p.code} — ${p.name} (${counts}${owner})${budget}`;\n}\n\nexport function registerProjectTools(server: McpServer, client: BeplusClient, _cfg: Config): void {\n // ── list_projects ─────────────────────────────────────────────────────────\n server.registerTool(\n 'list_projects',\n {\n title: 'Listar projetos',\n description:\n 'Lista os projetos do IA Lab em que a conta vinculada é membro, marcando qual está ativo (●). ' +\n 'Toda geração feita sem `project` explícito é vinculada ao projeto ativo. Use set_active_project para trocar.',\n inputSchema: {},\n },\n async (): Promise<ToolResult> => {\n try {\n const { projects } = await client.listProjects();\n if (!projects.length) {\n return textResult(\n 'Você ainda não é membro de nenhum projeto. Crie um com create_project, ou peça a um admin para te adicionar.'\n );\n }\n const lines = projects.map((p) => projectLine(p, !!p.is_active_for_user));\n const active = projects.find((p) => p.is_active_for_user);\n let header = active\n ? `Projeto ativo: ${active.code} — ${active.name}`\n : 'Nenhum projeto ativo (gerações ficam sem projeto).';\n // Budget do ativo (pote compartilhado do cliente/projeto), quando houver.\n const activeBudget = budgetLine(active?.budget);\n if (activeBudget) header += `\\n${activeBudget}`;\n return textResult(`${header}\\n\\n${lines.join('\\n')}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── create_project ────────────────────────────────────────────────────────\n server.registerTool(\n 'create_project',\n {\n title: 'Criar projeto',\n description:\n 'Cria um projeto novo no IA Lab (workspace compartilhado), SEMPRE dentro de um cliente/marca, ' +\n 'e por padrão já o deixa ativo — gerações seguintes entram nele. Só membros da equipe podem criar. ' +\n 'O campo `client` é obrigatório: passe o code/uuid de um cliente existente (veja list_clients) OU ' +\n 'o NOME de um cliente novo (ele é criado automaticamente). Projetos são globais: todos da equipe usam.',\n inputSchema: {\n name: z.string().min(1).max(256).describe('Nome do projeto (ex.: \"Ladeira Abaixo\").'),\n client: z\n .string()\n .min(1)\n .max(256)\n .describe('Cliente/marca dono: code/uuid existente (ex.: \"RDBL\") OU nome novo (ex.: \"Red Bull\"). Obrigatório.'),\n description: z.string().max(4000).optional().describe('Descrição do projeto (opcional).'),\n color: z\n .string()\n .regex(/^#[0-9a-fA-F]{6}$/)\n .optional()\n .describe('Cor em hex #RRGGBB para o badge (opcional).'),\n set_active: z\n .boolean()\n .optional()\n .describe('Deixar o novo projeto como ativo (padrão true).'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const { project, is_active } = await client.createProject({\n name: args.name,\n client: args.client,\n description: args.description,\n color: args.color,\n set_active: args.set_active,\n });\n const activeNote = is_active ? ' (definido como ativo)' : '';\n return textResult(`✅ Projeto criado: ${project.code} — ${project.name}${activeNote}.`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── set_active_project ────────────────────────────────────────────────────\n server.registerTool(\n 'set_active_project',\n {\n title: 'Definir projeto ativo',\n description:\n 'Define o projeto ativo da conta (por uuid OU code curto, ex.: \"VRAO-26\"). A partir daí, gerações ' +\n 'sem `project` explícito são vinculadas a ele — espelha o seletor de projeto da web. Passe project=null para limpar.',\n inputSchema: {\n project: z\n .string()\n .max(64)\n .nullable()\n .describe('uuid OU code curto do projeto. null para nenhum projeto.'),\n },\n },\n async ({ project }): Promise<ToolResult> => {\n try {\n const { project: active } = await client.setActiveProject(project ?? null);\n if (!active) return textResult('✅ Projeto ativo removido — novas gerações ficarão sem projeto.');\n // Budget do projeto/cliente recém-ativado, quando houver.\n const budget = budgetLine(active.budget);\n return textResult(`✅ Projeto ativo: ${active.code} — ${active.name}.` + (budget ? `\\n${budget}` : ''));\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage } from '../api/errors';\nimport { errorResult, textResult, type ToolResult } from '../format';\nimport type { ClientInfo } from '../api/types';\n\nfunction clientLine(c: ClientInfo, active: boolean): string {\n const marker = active ? '● ' : '○ ';\n const counts = `${c.project_count ?? 0} projetos`;\n return `${marker}${c.code} — ${c.name} (${counts})`;\n}\n\nexport function registerClientTools(server: McpServer, client: BeplusClient, _cfg: Config): void {\n // ── list_clients ────────────────────────────────────────────────────────────\n server.registerTool(\n 'list_clients',\n {\n title: 'Listar clientes',\n description:\n 'Lista os clientes/marcas do IA Lab (globais para a equipe), marcando qual está ativo (●). ' +\n 'Cliente é o container ACIMA do projeto (Cliente → Projeto → geração). Use antes de criar/escolher ' +\n 'um projeto: primeiro o cliente, depois o projeto dele.',\n inputSchema: {},\n },\n async (): Promise<ToolResult> => {\n try {\n const { clients } = await client.listClients();\n if (!clients.length) {\n return textResult(\n 'Nenhum cliente ainda. Crie um com create_client (ex.: \"Red Bull\"), ou crie um projeto passando ' +\n 'o nome do cliente em create_project — ele é criado junto.'\n );\n }\n const lines = clients.map((c) => clientLine(c, !!c.is_active_for_user));\n const active = clients.find((c) => c.is_active_for_user);\n const header = active\n ? `Cliente ativo: ${active.code} — ${active.name}`\n : 'Nenhum cliente ativo.';\n return textResult(`${header}\\n\\n${lines.join('\\n')}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── create_client ────────────────────────────────────────────────────────────\n server.registerTool(\n 'create_client',\n {\n title: 'Criar cliente',\n description:\n 'Cria um cliente/marca novo (ex.: \"Red Bull\"). Só membros da equipe. Clientes são globais: ' +\n 'qualquer colega passa a vê-lo e usá-lo. Depois crie projetos dentro dele com create_project.',\n inputSchema: {\n name: z.string().min(1).max(256).describe('Nome do cliente/marca (ex.: \"Red Bull\").'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const { client: created } = await client.createClient({ name: args.name });\n return textResult(`✅ Cliente criado: ${created.code} — ${created.name}.`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── set_active_client ─────────────────────────────────────────────────────────\n server.registerTool(\n 'set_active_client',\n {\n title: 'Definir cliente ativo',\n description:\n 'Define o cliente ativo da conta (por uuid OU code curto, ex.: \"RDBL\"). Trocar de cliente limpa o ' +\n 'projeto ativo se ele pertencia a outro cliente. Passe client=null para limpar.',\n inputSchema: {\n client: z\n .string()\n .max(64)\n .nullable()\n .describe('uuid OU code curto do cliente. null para nenhum.'),\n },\n },\n async ({ client: ref }): Promise<ToolResult> => {\n try {\n const { client: active } = await client.setActiveClient(ref ?? null);\n if (!active) return textResult('✅ Cliente ativo removido.');\n return textResult(`✅ Cliente ativo: ${active.code} — ${active.name}.`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { apiErrorToUserMessage } from '../api/errors';\nimport { errorResult, textResult, type ToolResult } from '../format';\nimport type { CallSearchItem, CallDetail } from '../api/types';\n\nconst VIS_LABEL: Record<string, string> = {\n team: 'equipe',\n private: 'privada',\n workspace: 'projeto',\n link: 'link público',\n};\n\nfunction fmtDuration(sec: number | null): string {\n if (!sec || sec <= 0) return '—';\n const m = Math.floor(sec / 60);\n const s = Math.floor(sec % 60);\n return `${m}:${String(s).padStart(2, '0')}`;\n}\n\n// Headless server → keep dates locale-independent (YYYY-MM-DD).\nfunction fmtDate(iso: string | null): string {\n return iso ? iso.slice(0, 10) : '';\n}\n\nfunction callLine(c: CallSearchItem): string {\n const company = c.company_name ? ` · ${c.company_name}` : '';\n const proj = c.project_name ? ` · ${c.client_name ? c.client_name + ' / ' : ''}${c.project_name}` : '';\n const who = c.speakers.length\n ? ` · ${c.speakers.join(', ')}`\n : c.participant_count\n ? ` · ${c.participant_count} falantes`\n : '';\n const vis = VIS_LABEL[c.visibility] ?? c.visibility;\n const flag = c.status !== 'ready' ? ` [${c.status}]` : '';\n return `• ${c.title ?? '(sem título)'}${flag}\\n ${fmtDate(c.date)} · ${fmtDuration(c.duration_sec)} · ${vis}${company}${proj}${who}\\n id: ${c.id}`;\n}\n\nfunction renderCall(c: CallDetail): string {\n const lines: string[] = [`# ${c.title ?? '(sem título)'}`];\n if (c.subtitle) lines.push(c.subtitle);\n\n const meta: string[] = [];\n if (c.date) meta.push(fmtDate(c.date));\n meta.push(fmtDuration(c.duration_sec));\n meta.push(VIS_LABEL[c.visibility] ?? c.visibility);\n if (c.company_name) meta.push(c.company_name);\n if (c.project_name) meta.push(`${c.client_name ? c.client_name + ' / ' : ''}${c.project_name}`);\n if (c.status !== 'ready') meta.push(`status: ${c.status}`);\n lines.push(meta.join(' · '));\n\n if (c.participants.length) lines.push(`Falantes: ${c.participants.join(', ')}`);\n if (c.recording_url) lines.push(`Gravação: ${c.recording_url}`);\n else if (c.audio_url) lines.push(`Áudio: ${c.audio_url}`);\n\n if (c.summary) lines.push(`\\n## Resumo\\n${c.summary}`);\n\n if (c.transcript.length) {\n lines.push('\\n## Transcrição');\n let lastSpeaker = '';\n for (const t of c.transcript) {\n if (t.speaker !== lastSpeaker) {\n lines.push(`\\n${t.speaker}:`);\n lastSpeaker = t.speaker;\n }\n lines.push(t.text);\n }\n } else {\n lines.push('\\n(transcrição ainda não disponível)');\n }\n\n return lines.join('\\n');\n}\n\nexport function registerCallTools(server: McpServer, client: BeplusClient, _cfg: Config): void {\n // ── search_calls ────────────────────────────────────────────────────────────\n server.registerTool(\n 'search_calls',\n {\n title: 'Buscar calls',\n description:\n 'Busca nas calls (reuniões gravadas e transcritas) visíveis pra conta — suas e as compartilhadas com você. ' +\n 'Todos os filtros são opcionais e combináveis: `query` (texto no título/projeto/cliente/falante), `project` ' +\n '(code/uuid/nome), `client` (code/nome), `company` (empresa/equipe do dono, ex.: \"BePlus\"), ' +\n '`visibility` (private|link|workspace), `speaker` (nome do falante), `mine` (só as que EU gravei). ' +\n 'Retorna uma lista resumida — use get_call com o id pra ler a transcrição completa.',\n inputSchema: {\n query: z.string().max(200).optional().describe('Texto livre — casa título, projeto, cliente ou falante.'),\n project: z.string().max(64).optional().describe('Projeto: code (ex.: \"CONTEUDO-INS\"), uuid ou parte do nome.'),\n client: z.string().max(128).optional().describe('Cliente: code ou parte do nome.'),\n company: z\n .string()\n .max(128)\n .optional()\n .describe('Empresa/equipe do dono da call (ex.: \"BePlus\"). Filtra por parte do nome.'),\n visibility: z\n .enum(['team', 'private', 'workspace', 'link'])\n .optional()\n .describe('Privacidade: team (equipe), private (privada), workspace (projeto) ou link.'),\n speaker: z.string().max(128).optional().describe('Nome do falante.'),\n mine: z\n .boolean()\n .optional()\n .describe('true = só as calls que EU gravei (sou o dono). Use pra \"minhas gravações\".'),\n limit: z.number().int().min(1).max(50).optional().describe('Máximo de resultados (padrão 20).'),\n },\n },\n async (args): Promise<ToolResult> => {\n try {\n const { calls, total } = await client.searchCalls(args);\n if (!calls.length) return textResult('Nenhuma call encontrada com esses filtros.');\n const header = total > calls.length ? `${calls.length} de ${total} calls:` : `${calls.length} call(s):`;\n return textResult(`${header}\\n\\n${calls.map(callLine).join('\\n\\n')}`);\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n\n // ── get_call ────────────────────────────────────────────────────────────────\n server.registerTool(\n 'get_call',\n {\n title: 'Ler call',\n description:\n 'Retorna o conteúdo completo de uma call pelo id (use search_calls pra achar): título, resumo, falantes, ' +\n 'projeto/cliente, links da gravação e a TRANSCRIÇÃO inteira por falante. Respeita a visibilidade — só retorna ' +\n 'o que a conta pode ver.',\n inputSchema: {\n id: z.string().min(1).max(64).describe('id (uuid) da call, obtido via search_calls.'),\n },\n },\n async ({ id }): Promise<ToolResult> => {\n try {\n const { call } = await client.getCall(id);\n return textResult(renderCall(call));\n } catch (e) {\n return errorResult(apiErrorToUserMessage(e));\n }\n }\n );\n}\n","import { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { BeplusClient } from '../api/client';\nimport type { Config } from '../config';\nimport { createHash } from 'node:crypto';\nimport { ApiError, LoginExpiredError, apiErrorToUserMessage } from '../api/errors';\nimport { errorResult, textResult, type ToolResult } from '../format';\nimport { CanvasApi, CanvasToolError, CoreMismatchError, type BoardSnapshot, type CommitOutcome, type RejectReason } from '../canvas/api';\nimport { KINDS, KIND_FIELD, WORKFLOW_NODE_TYPE, generatorBirthWidth, isGeneratorKind, kindList, knownPort, labelBirthWidth, type KindSpec } from '../canvas/catalog';\nimport {\n CLIENT_ID,\n MAX_ENVELOPES_PER_COMMIT,\n MEASURED_KEY,\n OpTooLargeError,\n batchOf,\n checkEnvelope,\n checkNodePath,\n emptyBoard,\n envelope,\n isJson,\n makeEdge,\n makeNode,\n packEnvelopes,\n removeNodeOps,\n setValue,\n unsetValue,\n type BoardDoc,\n type BoardEdge,\n type BoardNode,\n type Json,\n type Op,\n type OpEnvelope,\n} from '../canvas/core';\nimport { registerCanvasCommentTools } from './canvas-comments';\nimport { registerCanvasLayoutTools } from './canvas-layout';\nimport { registerCanvasMediaTools } from './canvas-media';\nimport { registerCanvasRunTools } from './canvas-run';\nimport { registerCanvasFocusTools } from './canvas-focus';\nimport { readMeasured, sizeLabel } from '../canvas/layout';\nimport { lockViolation } from '../canvas/lock';\nimport { abaIdViolation, endOfTabContent, homeTabOf, membersOfTab, placementNote, resolveTab, tabTitle } from '../canvas/tab-scope';\nimport { AVULSOS_TAB, TAB_ID_FIELD } from '../canvas/tabs';\nimport { ABA_ADD_NODE, ABA_READ_BOARD, abaArg } from './canvas-aba-arg';\nimport { MENTION_KEYS, describeMentionSync, mentionEdgeOps } from '../canvas/mentions';\nimport {\n boardSummary,\n changesSince,\n nodeDetail,\n nodeKind,\n nodeName,\n oneLine,\n touchedNodes,\n visibleData,\n withoutMeasureNoise,\n} from '../canvas/summary';\n\nconst REJECT_TEXT: Record<RejectReason, string> = {\n 'node-missing': 'o nó não existe mais (alguém apagou)',\n 'edge-endpoint-missing': 'uma ponta da ligação não existe mais',\n 'invalid-op': 'operação inválida ou repetida',\n 'too-large': 'operação grande demais (64 KB) ou com mídia embutida',\n};\n\nconst READ = 'Exige canvas_read_board nesta sessão (e de novo depois de uma recusa). ';\n\n/** A menção `!!` do Canvas grava a var no molde e a origem em `data.mentions`; a ligação fina vem junto. */\nconst MENTION_NOTE =\n 'Prompt: {{var}} no template + data.mentions {var: {node, port}} (o !! de um Bloco é port \"text\") já cria, no mesmo ' +\n 'passo, a ligação fina de menção que o Canvas desenha; tirar a var ou a menção tira a ligação. ';\n\n/** musicGainDb/duckingDb confundiram o agente do Luiz (relatório da vinheta, 26/09, §5.10). */\nconst MONTAGE_NOTE =\n 'Montagem: musicGainDb, duckingDb e fadeMs valem só para a montagem automática (clipes ligados) e não mexem na ' +\n 'timeline do editor (data.timeline; data.sequence é o legado); o volume dela fica nos clipes (gainDb, gainKeyframes, fades) ' +\n 'e nas faixas (gainDb de cada faixa, master).';\n\n/**\n * Caminho dentro do `data`, como o agente escreve: aceita o prefixo `data.`, e\n * `data` sozinho é o data inteiro. Devolve os segmentos (vazio = data inteiro).\n */\nfunction dataSegments(path: string | undefined): string[] {\n const p = path?.trim() ?? '';\n if (!p || p === 'data') return [];\n const segs = (p.startsWith('data.') ? p.slice(5) : p).split('.');\n if (segs.some((seg) => !seg)) throw new CanvasToolError(`Caminho \"${p}\" tem segmento vazio (dois pontos seguidos ou ponto na ponta).`);\n return segs;\n}\n\n/**\n * EP1 do Canvas (26/09): a Montagem grava a timeline em `data.timeline` e\n * `data.sequence` vira legado congelado. Uma aba antiga que visse `sequence`\n * mudar reimportaria por cima; o MCP não escreve nele quando já há timeline.\n */\nfunction legacySequenceGuard(node: BoardNode, key: string): void {\n if (key === 'sequence' && nodeKind(node) === 'montage' && node.data.timeline !== undefined) {\n throw new CanvasToolError(\n 'Este nó Montagem já grava em data.timeline; data.sequence é o legado congelado e não se escreve mais. ' +\n 'Leia a timeline com canvas_read_node e grave por caminho em data.timeline com canvas_patch_node.'\n );\n }\n}\n\n/** Seção fica atrás de tudo no Canvas (SECTION_Z de packages/nodes/src/section). */\nconst SECTION_Z = -1000;\nconst GAP = 80;\n\n\nconst boardId = z.string().uuid().describe('Id (uuid) do board, como sai em canvas_list_boards.');\nconst nodeIdArg = z.string().min(1).max(128);\nconst point = z.object({ x: z.number().finite(), y: z.number().finite() });\n\n/** Tamanhos de texto do nó Texto livre (`LabelSize` de packages/nodes/src/label/logic.ts). */\nconst LABEL_TEXT_SIZES = ['titulo', 'subtitulo', 'corpo'] as const;\ntype LabelTextSize = (typeof LABEL_TEXT_SIZES)[number];\nconst dim = z.number().finite().min(16).max(20_000);\nexport const sizeArg = z\n .union([z.object({ w: dim.optional(), h: dim.optional() }).strict(), z.enum(LABEL_TEXT_SIZES)])\n .describe(\n '{w, h}: caixa do nó (piso: o cartão cresce com o conteúdo; um lado só vale). ' +\n '\"titulo\" | \"subtitulo\" | \"corpo\": tamanho do texto do Texto livre (label), gravado em data.size. ' +\n 'Ao criar um Texto livre sem w, a largura vem do tamanho do texto: titulo 2000, subtitulo 1200, corpo 320.'\n );\ntype SizeArg = { w?: number; h?: number } | LabelTextSize;\n\n/** Estado da sessão: o `seq` que o agente viu por último em cada board. */\ntype Seen = Map<string, number>;\n\n/** Mudança de um nó, como as ferramentas de edição recebem. */\nexport interface NodeChange {\n data?: Record<string, unknown>;\n label?: string;\n position?: { x: number; y: number };\n size?: SizeArg;\n}\n\n/** Só mexe no que aparece onde: posição e caixa do nó (o que o `layout_only` aceita). */\nexport const isLayoutOp = (op: Op): boolean =>\n op.type === 'batch' ? op.ops.every(isLayoutOp) : op.type === 'node.set' && /^(position\\.[xy]|size\\.[wh])$/.test(op.path);\n\nfunction textSizeFor(kind: string | null, size: LabelTextSize): string {\n if (kind !== 'label') {\n throw new CanvasToolError(\n `size \"${size}\" é o tamanho do texto do Texto livre (label); para ${kind ?? 'este nó'} use size {w, h}.`\n );\n }\n return size;\n}\n\nfunction boxOf(size: { w?: number; h?: number }): { w?: number; h?: number } {\n if (size.w === undefined && size.h === undefined) throw new CanvasToolError('size {w, h}: informe w, h ou os dois.');\n return size;\n}\n\n/**\n * TX1 · A caixa em que um cartão NOVO nasce. O que o pedido traz em size {w, h} vale (um lado só\n * vale); o que falta vem do padrão do tipo. Duas exceções na largura, sem w: a do Texto livre vem\n * do tamanho do texto (`data.size`, já final aqui), porque título e subtítulo numa caixa de 320\n * viravam uma torre estreita de texto por cima dos cartões; e a do gerador (LC1) vem do\n * `aspect_ratio` do dado, na altura de criação (16:9 dá 917, 9:16 dá 290).\n */\nfunction birthBox(kind: string, spec: KindSpec, data: Record<string, Json>, asked?: { w?: number; h?: number }): { w: number; h: number } {\n const w =\n asked?.w ??\n (kind === 'label' ? labelBirthWidth(data.size) : isGeneratorKind(kind) ? generatorBirthWidth(kind, data.aspect_ratio) : spec.size.w);\n return { w, h: asked?.h ?? spec.size.h };\n}\n\nexport function registerCanvasTools(server: McpServer, client: BeplusClient, cfg: Config): void {\n const api = new CanvasApi(client, cfg);\n const seen: Seen = new Map();\n\n function fail(e: unknown): ToolResult {\n if (e instanceof CanvasToolError || e instanceof CoreMismatchError) return errorResult(e.message);\n // Token vencido já foi renovado uma vez no fetchWithAuth; aqui é renovação que falhou.\n if (e instanceof LoginExpiredError) return errorResult(e.message);\n if (e instanceof ApiError && e.httpStatus === 401 && !api.usesPat) {\n // O login pelo navegador abre o Canvas (ler com ialab:read, mudar com ialab:spend).\n // Falta de escopo chega como 403, com a mensagem do servidor.\n return errorResult(`O servidor recusou o acesso pelo navegador (${e.message}). Rode \\`beplus-mcp login\\` de novo e autorize.`);\n }\n if (e instanceof ApiError && e.httpStatus === 404) {\n return errorResult('Board não encontrado, ou você não é membro dele. Confira o id em canvas_list_boards.');\n }\n return errorResult(apiErrorToUserMessage(e));\n }\n\n async function run(fn: () => Promise<string>): Promise<ToolResult> {\n try {\n return textResult(await fn());\n } catch (e) {\n return fail(e);\n }\n }\n\n /**\n * Toda edição passa por aqui. Exige leitura prévia nesta sessão, relê a foto\n * para validar contra o estado real, recusa se outra pessoa mexeu nos MESMOS\n * nós depois da leitura, e manda tudo num envelope só (um `batch`, um seq).\n *\n * `layoutOnly` (só posição e caixa): não exige leitura, não confere conflito\n * (último que escreve ganha nesses campos) e NÃO mexe no `seen`. Se avançasse o\n * `seen`, uma edição de data depois dela deixaria de ver o que outra pessoa\n * mudou antes da escrita de layout.\n */\n async function edit(\n id: string,\n build: (doc: BoardDoc, snap: BoardSnapshot) => Promise<{ ops: Op[]; done: string; targets: string[] }>,\n opts: { split?: boolean; layoutOnly?: boolean } = {}\n ): Promise<string> {\n const last = seen.get(id);\n if (last === undefined && !opts.layoutOnly) {\n throw new CanvasToolError('Leia o board com canvas_read_board antes de editar (a leitura vale para a sessão).');\n }\n const snap = await api.snapshot(id);\n if (snap.role === 'viewer') throw new CanvasToolError('Você é só leitor neste board: peça ao dono para te dar papel de editor.');\n const doc = snap.doc;\n const { ops, done, targets } = await build(doc, snap);\n if (!ops.length) return `Nada a mudar. ${done}`;\n if (opts.layoutOnly && !ops.every(isLayoutOp)) throw new Error('layout_only com operação fora de posição/tamanho');\n // CD1 · Área com cadeado não se move, não muda de tamanho, não é apagada e não\n // tem os nós de dentro mudados em lote, venha a escrita de que ferramenta vier.\n const locked = lockViolation(doc, ops);\n if (locked) throw new CanvasToolError(locked);\n // AB9 · data.abaId que não aponta para uma aba viva faria o cartão cair calado em Avulsos.\n const badAba = abaIdViolation(doc, ops);\n if (badAba) throw new CanvasToolError(`${badAba} Nada foi aplicado.`);\n\n let note = '';\n if (!opts.layoutOnly && last !== undefined && snap.seq > last) {\n const since = await api.opsAfter(id, last);\n // A medida que a tela grava sozinha (data.__measured) não é edição de ninguém.\n const theirs = since === null ? null : withoutMeasureNoise(since.filter((e) => e.clientId !== CLIENT_ID));\n if (theirs === null) {\n seen.delete(id);\n throw new CanvasToolError(\n `O board mudou muito desde a sua leitura (seq ${last} → ${snap.seq}). Releia com canvas_read_board antes de editar.`\n );\n }\n const clash = [...touchedNodes(theirs)].filter((n) => targets.includes(n));\n if (clash.length) {\n seen.delete(id);\n const names = clash.map((n) => (doc.nodes[n] ? `\"${oneLine(nodeName(doc.nodes[n]), 40)}\"` : n)).join(', ');\n throw new CanvasToolError(\n `Outra pessoa mexeu em ${names} depois da sua leitura (seq ${last} → ${snap.seq}). Nada foi aplicado: ` +\n 'releia com canvas_read_board e refaça a edição em cima do estado atual.'\n );\n }\n if (theirs.length) note = `\\nAviso: ${changesSince(theirs, doc)}.`;\n }\n\n if (opts.split) return commitSplit(id, ops, done, note, !!opts.layoutOnly);\n\n const env = envelope(id, batchOf(ops), await api.me());\n const bad = checkEnvelope(env);\n if (bad) throw new CanvasToolError(`Edição recusada antes de enviar: ${bad}.`);\n const res = await api.commit(id, [env]);\n const outcome = res.outcomes.find((o) => o.opId === env.id) as CommitOutcome | undefined;\n if (!outcome || 'rejected' in outcome) {\n if (!opts.layoutOnly) seen.delete(id);\n const why = outcome && 'rejected' in outcome ? REJECT_TEXT[outcome.rejected] ?? outcome.rejected : 'sem resposta do servidor';\n throw new CanvasToolError(`O servidor recusou a edição: ${why}. Nada foi aplicado. Releia com canvas_read_board.`);\n }\n if (!opts.layoutOnly) seen.set(id, res.seq);\n return `✅ ${done} (seq ${res.seq}).${note}`;\n }\n\n /**\n * Escrita em lote: quebra em envelopes de até 64 KB e manda em commits de até\n * 200 envelopes. Cada envelope é julgado sozinho no servidor; o relatório diz o\n * que entrou e o que não entrou, caminho por caminho.\n */\n async function commitSplit(id: string, ops: Op[], done: string, note: string, layoutOnly = false): Promise<string> {\n let envs: OpEnvelope[];\n try {\n envs = packEnvelopes(id, ops, await api.me());\n } catch (e) {\n if (!(e instanceof OpTooLargeError)) throw e;\n const path = e.op.type === 'node.set' ? e.op.path.replace(/^data\\./, '') : e.op.type;\n throw new CanvasToolError(\n `O valor de ${path} tem ${Math.round(e.bytes / 1024)} KB e não cabe num envelope (64 KB). ` +\n 'Nada foi enviado: grave por partes menores (um caminho por item, ex.: <coleção>.<id>).'\n );\n }\n for (const env of envs) {\n const bad = checkEnvelope(env);\n if (bad) throw new CanvasToolError(`Edição recusada antes de enviar: ${bad}. Nada foi enviado.`);\n }\n const outcomes = new Map<string, CommitOutcome>();\n let last: number | null = null;\n for (let i = 0; i < envs.length; i += MAX_ENVELOPES_PER_COMMIT) {\n const res = await api.commit(id, envs.slice(i, i + MAX_ENVELOPES_PER_COMMIT));\n for (const o of res.outcomes) outcomes.set(o.opId, o);\n last = res.seq;\n }\n // Lote de vários nós (canvas_update_nodes): o caminho sai com o id do nó na frente.\n const setNodes = new Set(ops.flatMap((op) => (op.type === 'batch' ? op.ops : [op])).flatMap((op) => (op.type === 'node.set' ? [op.nodeId] : [])));\n const pathsOf = (op: Op): string[] =>\n op.type === 'batch'\n ? op.ops.flatMap(pathsOf)\n : op.type === 'node.set'\n ? [`${setNodes.size > 1 ? `${op.nodeId}:` : ''}${op.path.replace(/^data\\./, '')}`]\n : [op.type];\n let failed = 0;\n const lines = envs.map((env, i) => {\n const paths = pathsOf(env.op);\n const span = paths.length > 1 ? `${paths[0]} … ${paths[paths.length - 1]}` : paths[0];\n const kb = (Buffer.byteLength(JSON.stringify(env)) / 1024).toFixed(1).replace('.', ',');\n const o = outcomes.get(env.id);\n const result =\n o && 'seq' in o\n ? `seq ${o.seq}`\n : (failed++, `RECUSADO (${o && 'rejected' in o ? REJECT_TEXT[o.rejected] ?? o.rejected : 'sem resposta do servidor'}): nada deste envelope entrou`);\n return `- envelope ${i + 1}/${envs.length}: ${paths.length} caminho(s) (${span}), ${kb} KB → ${result}`;\n });\n if (failed) {\n if (!layoutOnly) seen.delete(id);\n throw new CanvasToolError(\n `${done}: ${envs.length - failed} de ${envs.length} envelope(s) entraram, ${failed} recusado(s).\\n${lines.join('\\n')}\\n` +\n (layoutOnly\n ? 'Os aceitos ficam. Rode de novo: posição e tamanho não pedem releitura.'\n : 'Os aceitos ficam. Releia com canvas_read_board e canvas_read_node e reenvie só os caminhos dos envelopes recusados.') +\n note\n );\n }\n if (last !== null && !layoutOnly) seen.set(id, last);\n return `✅ ${done} em ${envs.length} envelope(s) (seq até ${last}).\\n${lines.join('\\n')}${note}`;\n }\n\n function needNode(doc: BoardDoc, nodeId: string): BoardNode {\n const node = doc.nodes[nodeId];\n if (!node) throw new CanvasToolError(`Nó ${nodeId} não existe no board. Releia com canvas_read_board.`);\n return node;\n }\n\n function portWarning(doc: BoardDoc, source: string, sourcePort: string, target: string, targetPort: string): string {\n const warn: string[] = [];\n const s = knownPort(nodeKind(doc.nodes[source]), 'out', sourcePort);\n const t = knownPort(nodeKind(doc.nodes[target]), 'in', targetPort);\n if (s === false) warn.push(`saída \"${sourcePort}\" não é porta conhecida de ${nodeKind(doc.nodes[source])}`);\n if (t === false) warn.push(`entrada \"${targetPort}\" não é porta conhecida de ${nodeKind(doc.nodes[target])}`);\n return warn.length ? ` Atenção: ${warn.join('; ')}.` : '';\n }\n\n function edgeOps(doc: BoardDoc, links: { source: string; sourcePort: string; target: string; targetPort: string }[], createdBy: string, pending: Set<string>) {\n const ops: Op[] = [];\n let warn = '';\n for (const l of links) {\n for (const end of [l.source, l.target]) {\n if (!doc.nodes[end] && !pending.has(end)) throw new CanvasToolError(`Nó ${end} não existe no board. Releia com canvas_read_board.`);\n }\n const dup = Object.values(doc.edges).some(\n (e) => e.source === l.source && e.sourcePort === l.sourcePort && e.target === l.target && e.targetPort === l.targetPort\n );\n if (dup) continue;\n if (doc.nodes[l.source] && doc.nodes[l.target]) warn += portWarning(doc, l.source, l.sourcePort, l.target, l.targetPort);\n const edge = makeEdge({ ...l, createdBy });\n ops.push({ type: 'edge.add', edgeId: edge.id, edge });\n }\n return { ops, warn };\n }\n\n /**\n * Lugar livre simples: à direita de quem liga, ou depois do nó mais à direita.\n *\n * AB9 · `tab` é a aba conhecida (a do pedido, ou a do nó ligado): sem nó ligado, o cartão\n * nasce no fim do conteúdo dela; com nó ligado, ao lado dele, e a sobreposição se confere só\n * contra os cartões da mesma aba (a seção, que é fundo, não conta). Sem aba conhecida, vale a\n * conta de sempre, contra o board inteiro.\n */\n function placeFor(doc: BoardDoc, size: { w: number; h: number }, near?: BoardNode, side: 'right' | 'left' = 'right', tab?: string) {\n if (near) {\n const x = side === 'right' ? near.position.x + near.size.w + GAP : near.position.x - size.w - GAP;\n let y = near.position.y;\n const scope = tab === undefined ? null : membersOfTab(doc, tab);\n const nodes = Object.values(doc.nodes).filter((n) => scope === null || (scope.has(n.id) && nodeKind(n) !== 'section'));\n const hits = (yy: number) =>\n nodes.some((n) => x < n.position.x + n.size.w && x + size.w > n.position.x && yy < n.position.y + n.size.h && yy + size.h > n.position.y);\n for (let i = 0; i < 50 && hits(y); i++) y += GAP;\n return { x, y };\n }\n if (tab !== undefined && tab !== AVULSOS_TAB) return endOfTabContent(doc, tab, size);\n const nodes = Object.values(doc.nodes).filter((n) => nodeKind(n) !== 'section');\n if (!nodes.length) return { x: 0, y: 0 };\n return {\n x: Math.max(...nodes.map((n) => n.position.x + n.size.w)) + GAP,\n y: Math.min(...nodes.map((n) => n.position.y)),\n };\n }\n\n function parseData(raw: Record<string, unknown> | undefined): Record<string, Json> {\n const out: Record<string, Json> = {};\n for (const [k, v] of Object.entries(raw ?? {})) {\n if (k === KIND_FIELD) throw new CanvasToolError('data.kind não muda: apague o nó e crie outro do tipo certo.');\n if (k === MEASURED_KEY) {\n throw new CanvasToolError(`data.${MEASURED_KEY} é o tamanho medido pela tela do Canvas: só o Canvas grava. Para mudar a caixa, use size {w, h}.`);\n }\n if (!isJson(v)) throw new CanvasToolError(`data.${k} não é JSON válido.`);\n out[k] = v;\n }\n return out;\n }\n\n /**\n * Operações de UM nó a partir do pedido: chaves do data (null apaga), nome,\n * posição e caixa. Só entra o que muda. Devolve também o data como fica, para\n * a conciliação da menção.\n */\n function changeOps(node: BoardNode, change: NodeChange) {\n const ops: Op[] = [];\n const patch = parseData(change.data);\n for (const key of Object.keys(patch)) legacySequenceGuard(node, key);\n if (change.label) patch.label = change.label;\n let box: { w?: number; h?: number } | undefined;\n if (typeof change.size === 'string') patch.size = textSizeFor(nodeKind(node), change.size);\n else if (change.size) box = boxOf(change.size);\n const data: Record<string, Json> = { ...node.data };\n for (const [k, v] of Object.entries(patch)) {\n const path = `data.${k}`;\n if (v === null) {\n if (Object.hasOwn(node.data, k)) ops.push({ type: 'node.set', nodeId: node.id, path, value: unsetValue() });\n delete data[k];\n } else if (JSON.stringify(node.data[k]) !== JSON.stringify(v)) {\n ops.push({ type: 'node.set', nodeId: node.id, path, value: setValue(v) });\n data[k] = v;\n }\n }\n const set = (path: string, now: number, next: number | undefined) => {\n if (next !== undefined && next !== now) ops.push({ type: 'node.set', nodeId: node.id, path, value: setValue(next) });\n };\n set('position.x', node.position.x, change.position?.x);\n set('position.y', node.position.y, change.position?.y);\n set('size.w', node.size.w, box?.w);\n set('size.h', node.size.h, box?.h);\n const keys = ops.map((o) => (o.type === 'node.set' ? o.path.replace(/^data\\./, '') : ''));\n return { ops, keys, data, dataKeys: Object.keys(patch) };\n }\n\n /**\n * Ligação fina da menção (`!!`/`##`) dos Prompts cujo template, fields ou\n * mentions entraram no pedido, contra o board como fica depois da escrita.\n */\n async function mentionOps(\n doc: BoardDoc,\n changed: { node: BoardNode; data: Record<string, Json>; keys: string[] }[],\n newEdges: BoardEdge[] = []\n ): Promise<{ ops: Op[]; note: string }> {\n const prompts = changed.filter((c) => nodeKind(c.node) === 'prompt' && c.keys.some((k) => MENTION_KEYS.includes(k)));\n if (!prompts.length) return { ops: [], note: '' };\n const after: BoardDoc = { ...doc, nodes: { ...doc.nodes }, edges: { ...doc.edges } };\n for (const c of changed) after.nodes[c.node.id] = { ...c.node, data: c.data };\n for (const e of newEdges) after.edges[e.id] = e;\n const sync = mentionEdgeOps(after, prompts.map((c) => c.node.id), await api.me());\n const name = (id: string) => (after.nodes[id] ? `\"${oneLine(nodeName(after.nodes[id]), 40)}\"` : id);\n return { ops: sync.ops, note: describeMentionSync(sync, name) };\n }\n\n // ── canvas_list_boards ────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_list_boards',\n {\n title: 'Canvas: listar boards',\n description: 'Lista os boards do Canvas online de que você é membro (id, título, seu papel, seq, última mudança). Só leitura.',\n inputSchema: { kind: z.enum(['board', 'template']).optional().describe('board (padrão) ou template (moldes).') },\n annotations: { readOnlyHint: true, openWorldHint: false },\n },\n async ({ kind }) =>\n run(async () => {\n const boards = await api.listBoards(kind ?? 'board');\n if (!boards.length) return 'Nenhum board. Crie um com canvas_create_board.';\n return boards\n .map((b) => `- ${b.id} · \"${b.title}\" · ${b.role} · seq ${b.seq} · ${String(b.updatedAt).slice(0, 16).replace('T', ' ')}`)\n .join('\\n');\n })\n );\n\n // ── canvas_read_board ─────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_read_board',\n {\n title: 'Canvas: ler board',\n description:\n 'Lê um board: nós (id, tipo, nome, posição, tamanho, campos principais), ligações e vínculo com o IA Lab, sem mídia. ' +\n 'Tamanho \"medido\" é o da tela; \"gravado\" é o piso (o cartão cresce com o conteúdo). ' +\n 'Obrigatório antes de editar (vale para a sessão). node_ids devolve o data desses nós, com cada corte marcado ' +\n '(path=…); o valor inteiro (ex.: data.sequence da Montagem) sai no canvas_read_node. Cada cartão diz a aba ' +\n '(aba=<id curto> ou aba=avulsos), o topo conta os cartões de cada aba e aba lê uma aba só.',\n inputSchema: {\n board_id: boardId,\n node_ids: z.array(nodeIdArg).max(20).optional().describe('Nós para ver o data (sem blobs, cortes marcados).'),\n aba: abaArg(ABA_READ_BOARD),\n },\n annotations: { readOnlyHint: true, openWorldHint: false },\n },\n async ({ board_id, node_ids, aba }) =>\n run(async () => {\n const snap = await api.snapshot(board_id);\n // Aba que não existe recusa antes de a leitura contar para editar.\n const tab = aba ? resolveTab(snap.doc, aba, { allowAvulsos: true }) : undefined;\n seen.set(board_id, snap.seq);\n const parts = [boardSummary(snap, { tab })];\n if (node_ids?.length) {\n parts.push('', 'Detalhe:');\n for (const n of node_ids) parts.push(snap.doc.nodes[n] ? nodeDetail(snap.doc.nodes[n]) : `${n}: não existe`);\n }\n return parts.join('\\n');\n })\n );\n\n // ── canvas_read_node ──────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_read_node',\n {\n title: 'Canvas: ler nó inteiro',\n description:\n 'Devolve o data de UM nó sem corte nenhum, em JSON compacto, para conferir e fazer diff. Na Montagem, sem path, ' +\n 'vem a timeline do editor: data.timeline, ou data.sequence (legado) quando o nó ainda não tem timeline, e o ' +\n 'cabeçalho diz qual veio. path escolhe um pedaço (\"items\" da Mídia, \"timeline.meta\"); \"data\" traz o data todo. ' +\n 'Diz o tamanho total e o sha256; acima de max_chars vem em partes explícitas (offset). ' +\n 'Não substitui o canvas_read_board, que continua obrigatório antes de editar. ' +\n MONTAGE_NOTE,\n inputSchema: {\n board_id: boardId,\n node_id: nodeIdArg,\n path: z\n .string()\n .trim()\n .max(200)\n .optional()\n .describe('Caminho dentro do data, com pontos (ex.: \"timeline.meta\", \"items.0\"). \"data\" = o data todo.'),\n offset: z.number().int().min(0).optional().describe('Início da parte, em caracteres (padrão 0).'),\n max_chars: z.number().int().min(1000).max(60_000).optional().describe('Tamanho da parte (padrão 40000).'),\n },\n annotations: { readOnlyHint: true, openWorldHint: false },\n },\n async ({ board_id, node_id, path, offset, max_chars }) =>\n run(async () => {\n const snap = await api.snapshot(board_id);\n const node = snap.doc.nodes[node_id];\n if (!node) throw new CanvasToolError(`Nó ${node_id} não existe no board. Releia com canvas_read_board.`);\n // O tamanho medido é campo interno do Canvas: sai no cabeçalho, nunca como dado (nem no sha256).\n let value: Json | undefined = visibleData(node.data);\n let segments = dataSegments(path);\n if (segments[0] === MEASURED_KEY) {\n throw new CanvasToolError(`data.${MEASURED_KEY} é interno do Canvas (tamanho medido da tela): ele sai no cabeçalho desta leitura.`);\n }\n let which = '';\n if (!path?.trim() && nodeKind(node) === 'montage') {\n if (node.data.timeline !== undefined) {\n segments = ['timeline'];\n which = ' (a timeline do editor, formato v3)';\n } else if (node.data.sequence !== undefined) {\n segments = ['sequence'];\n which = ' (legado: este nó ainda não tem data.timeline)';\n } else which = ' (sem timeline nem sequence: o data todo)';\n } else if (segments[0] === 'sequence' && nodeKind(node) === 'montage' && node.data.timeline !== undefined) {\n which = ' (LEGADO congelado: o editor lê data.timeline)';\n }\n for (const [i, seg] of segments.entries()) {\n const here: Json | undefined = value;\n value =\n Array.isArray(here) ? here[Number(seg)] : here && typeof here === 'object' ? (here as Record<string, Json>)[seg] : undefined;\n if (value === undefined) {\n const at = segments.slice(0, i).join('.');\n const keys = Array.isArray(here) ? `índices 0 a ${here.length - 1}` : here && typeof here === 'object' ? Object.keys(here).join(', ') : '—';\n throw new CanvasToolError(`\"${seg}\" não existe em data${at ? `.${at}` : ''}. Existe: ${keys || '—'}.`);\n }\n }\n const json = JSON.stringify(value);\n const total = json.length;\n const from = Math.min(offset ?? 0, total);\n const size = max_chars ?? 40_000;\n const to = Math.min(from + size, total);\n const hash = createHash('sha256').update(json).digest('hex').slice(0, 12);\n const where = `data${segments.length ? `.${segments.join('.')}` : ''}`;\n const at = readMeasured(node)?.at;\n const head =\n `${node.id} · ${nodeKind(node) ?? node.type} · \"${oneLine(nodeName(node), 60)}\" · board seq ${snap.seq} · ` +\n `tamanho ${sizeLabel(node)}${at ? ` · medido em ${at}` : ''} · ` +\n `${where}${which}: ${total} caracteres (JSON compacto) · sha256 ${hash}`;\n const part =\n from === 0 && to === total\n ? 'Inteiro, abaixo.'\n : `Parte: caracteres ${from} a ${to} de ${total}. ${to < total ? `Falta o resto: chame de novo com offset=${to}.` : 'Esta é a última parte.'}`;\n return `${head}\\n${part}\\n${json.slice(from, to)}`;\n })\n );\n\n // ── canvas_create_board ───────────────────────────────────────────────────\n server.registerTool(\n 'canvas_create_board',\n {\n title: 'Canvas: criar board',\n description:\n 'Cria um board online (você vira dono). template \"narration\" já cria Contexto, Narração, Roteiro e Locução ' +\n 'ligados (Narração.blocks → Roteiro.blocks, Narração.text → Locução.text). O kit do Contexto a pessoa escolhe no Canvas. Não gera mídia.',\n inputSchema: {\n title: z.string().trim().min(1).max(200),\n template: z.enum(['blank', 'narration']).optional().describe('blank (padrão) ou narration.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ title, template }) =>\n run(async () => {\n const doc = emptyBoard(title);\n const ids: Record<string, string> = {};\n if (template === 'narration') {\n const me = await api.me();\n let zIndex = 1;\n const add = (kind: string, x: number, y: number) => {\n const spec = KINDS[kind];\n const node = makeNode({\n type: WORKFLOW_NODE_TYPE,\n data: { ...spec.data, [KIND_FIELD]: kind },\n position: { x, y },\n size: spec.size,\n zIndex: zIndex++,\n createdBy: me,\n });\n doc.nodes[node.id] = node;\n ids[kind] = node.id;\n return node.id;\n };\n add('context', 200, 200);\n const narration = add('narration', 650, 200);\n const shotlist = add('shotlist', 1150, 200);\n const tts = add('tts', 650, 750);\n for (const l of [\n { source: narration, sourcePort: 'blocks', target: shotlist, targetPort: 'blocks' },\n { source: narration, sourcePort: 'text', target: tts, targetPort: 'text' },\n ]) {\n const edge = makeEdge({ ...l, createdBy: me });\n doc.edges[edge.id] = edge;\n }\n }\n const created = await api.createBoard({ title, kind: 'board', doc });\n seen.set(created.id, created.seq);\n const idLine = Object.keys(ids).length\n ? `\\nNós: ${Object.entries(ids).map(([k, v]) => `${k}=${v}`).join(' · ')}`\n : '';\n return `✅ Board criado: \"${created.title}\" · id ${created.id} · seq ${created.seq}.${idLine}`;\n })\n );\n\n // ── canvas_add_node ───────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_add_node',\n {\n title: 'Canvas: adicionar nó',\n description:\n `Adiciona um nó (não executa). ${READ}kind: ${kindList()}. data completa o padrão do tipo; label dá o nome. ` +\n 'Sem position, nasce ao lado do nó ligado ou à direita do board (com aba, no fim do conteúdo da aba); aba grava ' +\n 'data.abaId. Texto livre (label) sem size {w} nasce na largura do tamanho do texto: titulo 2000, subtitulo 1200, ' +\n 'corpo 320. Prompt sem size nasce com 1024 × 516; gerador de imagem ou vídeo, com altura 516 e a largura do aspect_ratio ' +\n '(16:9 917, 9:16 290, 1:1 516). inputs/outputs já ligam o nó no mesmo passo. ' +\n MENTION_NOTE +\n MONTAGE_NOTE,\n inputSchema: {\n board_id: boardId,\n kind: z.string().min(1).max(40),\n label: z.string().trim().min(1).max(120).optional().describe('Nome do cartão (data.label).'),\n data: z.record(z.unknown()).optional().describe('Campos do data. Ex.: narration {blocks:[{id,text}]}, text {text}, prompt {template}.'),\n aba: abaArg(ABA_ADD_NODE),\n position: point.optional(),\n size: sizeArg.optional(),\n inputs: z\n .array(z.object({ from: nodeIdArg, from_port: z.string().min(1), to_port: z.string().min(1) }))\n .max(20)\n .optional()\n .describe('Ligações que CHEGAM no nó novo: from.from_port → novo.to_port.'),\n outputs: z\n .array(z.object({ from_port: z.string().min(1), to: nodeIdArg, to_port: z.string().min(1) }))\n .max(20)\n .optional()\n .describe('Ligações que SAEM do nó novo: novo.from_port → to.to_port.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(args.board_id, async (doc) => {\n const spec = KINDS[args.kind];\n if (!spec) throw new CanvasToolError(`Tipo \"${args.kind}\" desconhecido. Tipos: ${kindList()}.`);\n const me = await api.me();\n const data: Record<string, Json> = { ...spec.data, ...parseData(args.data), [KIND_FIELD]: args.kind };\n if (args.label) data.label = args.label;\n // O size em texto vence o data.size e muda a largura de nascimento do Texto livre (TX1).\n if (typeof args.size === 'string') data.size = textSizeFor(args.kind, args.size);\n const box = birthBox(args.kind, spec, data, args.size && typeof args.size !== 'string' ? boxOf(args.size) : undefined);\n // AB9 · A aba do cartão: o parâmetro aba ou o data.abaId (que vale como aba). Os dois\n // divergindo, recusa; o começo único do id vira o id inteiro.\n const byParam = args.aba ? resolveTab(doc, args.aba) : undefined;\n const written = data[TAB_ID_FIELD];\n const byData = typeof written === 'string' && written !== '' ? resolveTab(doc, written) : undefined;\n if (byParam !== undefined && byData !== undefined && byParam !== byData) {\n throw new CanvasToolError(\n `aba (\"${tabTitle(doc.nodes[byParam])}\") e data.abaId (\"${tabTitle(doc.nodes[byData])}\") apontam para abas diferentes: mande só aba.`\n );\n }\n const tab = byParam ?? byData;\n if (tab !== undefined) data[TAB_ID_FIELD] = tab;\n const near = args.inputs?.[0] ? doc.nodes[args.inputs[0].from] : args.outputs?.[0] ? doc.nodes[args.outputs[0].to] : undefined;\n // Com aba pedida, o cartão vai para o fim do conteúdo dela; sem, ao lado do nó ligado,\n // conferindo a sobreposição só na aba desse nó.\n const nearTab = near ? (homeTabOf(doc, near.id) ?? undefined) : undefined;\n const position =\n args.position ?? placeFor(doc, box, tab === undefined ? near : undefined, args.inputs?.[0] ? 'right' : 'left', tab ?? nearTab);\n const zIndex = args.kind === 'section' ? SECTION_Z : Object.values(doc.nodes).reduce((t, n) => Math.max(t, n.zIndex), 0) + 1;\n const node = makeNode({ type: WORKFLOW_NODE_TYPE, data, position, size: box, zIndex, createdBy: me });\n const links = [\n ...(args.inputs ?? []).map((l) => ({ source: l.from, sourcePort: l.from_port, target: node.id, targetPort: l.to_port })),\n ...(args.outputs ?? []).map((l) => ({ source: node.id, sourcePort: l.from_port, target: l.to, targetPort: l.to_port })),\n ];\n for (const l of links) {\n const warn = knownPort(args.kind, l.source === node.id ? 'out' : 'in', l.source === node.id ? l.sourcePort : l.targetPort);\n if (warn === false) {\n throw new CanvasToolError(\n `Porta \"${l.source === node.id ? l.sourcePort : l.targetPort}\" não existe em ${args.kind}. ` +\n `Entradas: ${spec.inputs.join(', ') || '—'}; saídas: ${spec.outputs.join(', ') || '—'}.`\n );\n }\n }\n const edges = edgeOps(doc, links, me, new Set([node.id]));\n const drawn = edges.ops.flatMap((op) => (op.type === 'edge.add' ? [op.edge] : []));\n const mention = await mentionOps(doc, [{ node, data: node.data, keys: Object.keys(args.data ?? {}) }], drawn);\n return {\n ops: [{ type: 'node.add', nodeId: node.id, node }, ...edges.ops, ...mention.ops],\n targets: links.map((l) => (l.source === node.id ? l.target : l.source)),\n done:\n `Nó ${args.kind} \"${nodeName(node)}\" criado: ${node.id}${edges.ops.length ? ` com ${edges.ops.length} ligação(ões)` : ''}.` +\n `${placementNote(doc, node)}${edges.warn}${mention.note}`,\n };\n })\n )\n );\n\n // ── canvas_update_node ────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_update_node',\n {\n title: 'Canvas: editar nó',\n description:\n `Muda campos do data de um nó, chave a chave (null apaga a chave), sem executar. ${READ}label renomeia; ` +\n 'position move; size {w, h} muda a caixa (piso: o cartão cresce com o conteúdo). ' +\n 'Não troca o tipo. Cada chave é gravada inteira: leia antes com canvas_read_node e mande o valor completo já ' +\n 'revisado, para não apagar o que outra pessoa escreveu. Para mudar partes de uma estrutura grande (clipes da ' +\n 'timeline), use canvas_patch_node, por caminho; vários nós de uma vez, canvas_update_nodes. ' +\n MENTION_NOTE +\n MONTAGE_NOTE,\n inputSchema: {\n board_id: boardId,\n node_id: nodeIdArg,\n data: z.record(z.unknown()).optional().describe('Chaves de data a gravar. Valor null apaga a chave.'),\n label: z.string().trim().min(1).max(120).optional(),\n position: point.optional(),\n size: sizeArg.optional(),\n },\n annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(args.board_id, async (doc) => {\n const node = needNode(doc, args.node_id);\n const c = changeOps(node, args);\n const mention = await mentionOps(doc, [{ node, data: c.data, keys: c.dataKeys }]);\n return {\n ops: [...c.ops, ...mention.ops],\n targets: [node.id],\n done: `Nó \"${nodeName(node)}\" atualizado: ${c.keys.join(', ') || 'nada mudou'}${mention.note}`,\n };\n })\n )\n );\n\n // ── canvas_update_nodes ───────────────────────────────────────────────────\n server.registerTool(\n 'canvas_update_nodes',\n {\n title: 'Canvas: editar vários nós',\n description:\n 'Muda vários nós num passo só, cada um como no canvas_update_node (position, size, label, data com null apagando). ' +\n 'layout_only: true aceita só position e size {w, h}, não exige leitura e não recusa por \"outra pessoa mexeu\" ' +\n '(nesses dois campos vale quem grava por último). Sem layout_only, exige canvas_read_board nesta sessão e recusa ' +\n 'se outra pessoa mexeu em algum desses nós. Quebra em envelopes de até 64 KB e relata cada um. ' +\n 'Para arrumar linhas inteiras (título, prompt, referência, gerador), use canvas_arrange_rows.',\n inputSchema: {\n board_id: boardId,\n nodes: z\n .array(\n z\n .object({\n node_id: nodeIdArg,\n position: point.optional(),\n size: sizeArg.optional(),\n label: z.string().trim().min(1).max(120).optional(),\n data: z.record(z.unknown()).optional().describe('Chaves de data a gravar. Valor null apaga a chave.'),\n })\n .strict()\n )\n .min(1)\n .max(200),\n layout_only: z.boolean().optional().describe('true: só position e size, sem releitura nem recusa por conflito.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(\n args.board_id,\n async (doc) => {\n const ids = args.nodes.map((n) => n.node_id);\n const dup = ids.find((id, i) => ids.indexOf(id) !== i);\n if (dup) throw new CanvasToolError(`O nó ${dup} aparece duas vezes: junte as mudanças dele num item só.`);\n if (args.layout_only) {\n const bad = args.nodes.find((n) => n.data !== undefined || n.label !== undefined || typeof n.size === 'string');\n if (bad) {\n throw new CanvasToolError(\n `layout_only aceita só position e size {w, h} (o nó ${bad.node_id} traz ${bad.data !== undefined ? 'data' : bad.label !== undefined ? 'label' : `size \"${String(bad.size)}\"`}). ` +\n 'Tire layout_only para gravar data e label com a checagem de conflito.'\n );\n }\n }\n const changes = args.nodes.map((n) => {\n const node = needNode(doc, n.node_id);\n return { node, ...changeOps(node, n) };\n });\n const mention = args.layout_only\n ? { ops: [], note: '' }\n : await mentionOps(doc, changes.map((c) => ({ node: c.node, data: c.data, keys: c.dataKeys })));\n const touched = changes.filter((c) => c.ops.length);\n const list = touched\n .slice(0, 12)\n .map((c) => `\"${oneLine(nodeName(c.node), 30)}\" (${c.keys.join(', ')})`)\n .join('; ');\n return {\n ops: [...changes.flatMap((c) => c.ops), ...mention.ops],\n targets: ids,\n done:\n `${touched.length} de ${ids.length} nó(s) atualizado(s)${args.layout_only ? ' (layout_only)' : ''}` +\n (list ? `: ${list}${touched.length > 12 ? `; … +${touched.length - 12}` : ''}` : '') +\n mention.note,\n };\n },\n { split: true, layoutOnly: !!args.layout_only }\n )\n )\n );\n\n // ── canvas_patch_node ─────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_patch_node',\n {\n title: 'Canvas: gravar por caminho',\n description:\n `Grava vários caminhos dentro do data de um nó, sem executar: {path, value} grava, {path, unset: true} apaga. ${READ}` +\n 'O caminho atravessa objetos (o nível que falta é criado) e não entra em lista: para mudar um item de lista, ' +\n 'grave a lista inteira. Quebra sozinho em envelopes de até 64 KB, em ordem, e devolve o resultado de cada um; ' +\n 'entre envelopes não há atomicidade (o que entrou fica). Serve para mexer em partes de uma estrutura grande, ' +\n 'como clipes da timeline da Montagem, sem reenviar tudo. Leia antes com canvas_read_node. ' +\n MENTION_NOTE +\n MONTAGE_NOTE,\n inputSchema: {\n board_id: boardId,\n node_id: nodeIdArg,\n sets: z\n .array(\n z.object({\n path: z.string().trim().min(1).max(500).describe('Caminho dentro do data (ex.: \"timeline.meta.fps\"); aceita o prefixo \"data.\".'),\n value: z.unknown().optional().describe('Valor JSON a gravar (null grava null).'),\n unset: z.literal(true).optional().describe('true apaga a chave.'),\n })\n )\n .min(1)\n .max(5000),\n },\n annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(\n args.board_id,\n async (doc) => {\n const node = needNode(doc, args.node_id);\n // Cópia de trabalho: cada caminho é conferido contra o estado que os anteriores deixaram.\n const work = structuredClone(node.data) as Record<string, Json>;\n const ops: Op[] = [];\n let same = 0;\n let absent = 0;\n // Menção: as ligações entram logo depois da última escrita em template/fields/mentions (mesmo envelope).\n const mentionKeys = new Set<string>();\n let mentionAt = -1;\n for (const [i, item] of args.sets.entries()) {\n const at = `sets[${i}] (${item.path})`;\n const segs = dataSegments(item.path);\n if (!segs.length) throw new CanvasToolError(`${at}: informe um caminho dentro do data, não o data inteiro.`);\n if (segs[0] === KIND_FIELD) throw new CanvasToolError(`${at}: data.kind não muda (apague o nó e crie outro do tipo certo).`);\n legacySequenceGuard(node, segs[0]);\n const path = `data.${segs.join('.')}`;\n const badPath = checkNodePath(path);\n if (badPath) throw new CanvasToolError(`${at}: ${badPath}.`);\n if (MENTION_KEYS.includes(segs[0])) mentionKeys.add(segs[0]);\n const unset = item.unset === true;\n const hasValue = item.value !== undefined;\n if (unset === hasValue) throw new CanvasToolError(`${at}: mande value OU unset: true.`);\n if (hasValue && !isJson(item.value)) throw new CanvasToolError(`${at}: value não é JSON válido.`);\n\n let cur: Record<string, Json> | null = work;\n for (const [j, seg] of segs.slice(0, -1).entries()) {\n const next: Json | undefined = Object.hasOwn(cur, seg) ? cur[seg] : undefined;\n const isObject = !!next && typeof next === 'object' && !Array.isArray(next);\n if (isObject) {\n cur = next as Record<string, Json>;\n continue;\n }\n if (unset) {\n cur = null; // caminho que não existe: unset não faz nada\n break;\n }\n if (next === undefined) {\n const created: Record<string, Json> = {};\n cur[seg] = created;\n cur = created;\n continue;\n }\n throw new CanvasToolError(\n `${at}: data.${segs.slice(0, j + 1).join('.')} é ${Array.isArray(next) ? 'uma lista' : 'um valor simples'}, ` +\n 'e o caminho não entra nele. Grave o nível de cima inteiro.'\n );\n }\n const leaf = segs[segs.length - 1];\n if (unset) {\n if (!cur || !Object.hasOwn(cur, leaf)) {\n absent++;\n continue;\n }\n delete cur[leaf];\n ops.push({ type: 'node.set', nodeId: node.id, path, value: unsetValue() });\n if (MENTION_KEYS.includes(segs[0])) mentionAt = ops.length;\n continue;\n }\n const value = item.value as Json;\n if (cur && Object.hasOwn(cur, leaf) && JSON.stringify(cur[leaf]) === JSON.stringify(value)) {\n same++;\n continue;\n }\n if (cur) cur[leaf] = value;\n ops.push({ type: 'node.set', nodeId: node.id, path, value: setValue(value) });\n if (MENTION_KEYS.includes(segs[0])) mentionAt = ops.length;\n }\n const skipped = [same ? `${same} igual(is) ao que já estava` : '', absent ? `${absent} unset de caminho que não existe` : '']\n .filter(Boolean)\n .join(', ');\n const written = ops.length;\n const mention = await mentionOps(doc, [{ node, data: work, keys: [...mentionKeys] }]);\n ops.splice(mentionAt < 0 ? ops.length : mentionAt, 0, ...mention.ops);\n return {\n ops,\n targets: [node.id],\n done:\n `Nó \"${oneLine(nodeName(node), 40)}\" (${node.id}): ${written} caminho(s) gravado(s)` +\n (skipped ? ` (ignorados: ${skipped})` : '') +\n mention.note,\n };\n },\n { split: true }\n )\n )\n );\n\n // ── canvas_connect ────────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_connect',\n {\n title: 'Canvas: ligar portas',\n description: `Liga a saída de um nó à entrada de outro (ids e portas de canvas_read_board). ${READ}Ligação repetida é ignorada.`,\n inputSchema: {\n board_id: boardId,\n source: nodeIdArg,\n source_port: z.string().min(1).max(80),\n target: nodeIdArg,\n target_port: z.string().min(1).max(80),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(args.board_id, async (doc) => {\n if (args.source === args.target) throw new CanvasToolError('Um nó não se liga nele mesmo.');\n const link = { source: args.source, sourcePort: args.source_port, target: args.target, targetPort: args.target_port };\n const { ops, warn } = edgeOps(doc, [link], await api.me(), new Set());\n return {\n ops,\n targets: [args.source, args.target],\n done: ops.length\n ? `Ligado ${nodeName(doc.nodes[args.source])}.${args.source_port} → ${nodeName(doc.nodes[args.target])}.${args.target_port}.${warn}`\n : 'A ligação já existia.',\n };\n })\n )\n );\n\n // ── canvas_delete ─────────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_delete',\n {\n title: 'Canvas: apagar nós/ligações',\n description:\n 'Apaga nós (com as ligações e variações deles) e/ou ligações, num passo só. Irreversível pelo MCP: ' +\n `confirme com o usuário antes. ${READ}Não apaga o board.`,\n inputSchema: {\n board_id: boardId,\n node_ids: z.array(nodeIdArg).max(200).optional(),\n edge_ids: z.array(nodeIdArg).max(200).optional(),\n },\n annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false },\n },\n async (args) =>\n run(() =>\n edit(args.board_id, async (doc) => {\n const nodeIds = [...new Set(args.node_ids ?? [])];\n const edgeIds = [...new Set(args.edge_ids ?? [])];\n if (!nodeIds.length && !edgeIds.length) throw new CanvasToolError('Informe node_ids e/ou edge_ids.');\n const missing = [...nodeIds.filter((n) => !doc.nodes[n]), ...edgeIds.filter((e) => !doc.edges[e])];\n if (missing.length) throw new CanvasToolError(`Não existem no board: ${missing.join(', ')}. Releia com canvas_read_board.`);\n const ops: Op[] = [];\n const gone = new Set<string>();\n // Primeiro as ligações pedidas que não saem junto com um nó apagado.\n for (const e of edgeIds) {\n const edge = doc.edges[e];\n if (nodeIds.includes(edge.source) || nodeIds.includes(edge.target)) continue;\n ops.push({ type: 'edge.remove', edgeId: e });\n gone.add(e);\n }\n for (const n of nodeIds) {\n for (const op of removeNodeOps(doc, n)) {\n if (op.type === 'edge.remove') {\n if (gone.has(op.edgeId)) continue;\n gone.add(op.edgeId);\n }\n ops.push(op);\n }\n }\n const names = nodeIds.map((n) => `\"${oneLine(nodeName(doc.nodes[n]), 40)}\"`);\n return {\n ops,\n targets: nodeIds,\n done: `Apagado: ${nodeIds.length} nó(s)${names.length ? ` (${names.join(', ')})` : ''} e ${gone.size} ligação(ões)`,\n };\n })\n )\n );\n\n // ── canvas_rename_board ───────────────────────────────────────────────────\n server.registerTool(\n 'canvas_rename_board',\n {\n title: 'Canvas: renomear board',\n description: `Troca o título do board (board.set). ${READ}Precisa de papel de editor ou dono.`,\n inputSchema: { board_id: boardId, title: z.string().trim().min(1).max(200) },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ board_id, title }) =>\n run(() =>\n edit(board_id, async (doc) => ({\n ops: doc.title === title ? [] : [{ type: 'board.set', field: 'title', value: setValue(title) }],\n targets: [],\n done: `Board renomeado: \"${doc.title}\" → \"${title}\"`,\n }))\n )\n );\n\n // ── membros ───────────────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_list_members',\n {\n title: 'Canvas: membros do board',\n description: 'Lista quem tem acesso ao board (userId, nome, papel). Só leitura.',\n inputSchema: { board_id: boardId },\n annotations: { readOnlyHint: true, openWorldHint: false },\n },\n async ({ board_id }) =>\n run(async () => {\n const members = await api.members(board_id);\n return members\n .map((m) => {\n const name = [m.firstName, m.lastName].filter(Boolean).join(' ') || m.nickname || '(sem nome)';\n return `- ${m.userId} · ${name} · ${m.role}`;\n })\n .join('\\n');\n })\n );\n\n server.registerTool(\n 'canvas_set_member',\n {\n title: 'Canvas: adicionar membro',\n description:\n 'Dá acesso ao board (ou troca o papel) para um usuário pelo userId (uuid). Só o dono pode. ' +\n 'Ainda não há busca por e-mail: peça o userId ou copie de canvas_list_members de outro board.',\n inputSchema: {\n board_id: boardId,\n user_id: z.string().uuid(),\n role: z.enum(['editor', 'viewer']).describe('editor edita; viewer só vê.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ board_id, user_id, role }) =>\n run(async () => {\n const r = await api.putMember(board_id, user_id, role);\n return `✅ ${r.userId} agora é ${r.role} no board.`;\n })\n );\n\n server.registerTool(\n 'canvas_remove_member',\n {\n title: 'Canvas: remover membro',\n description: 'Tira o acesso de alguém ao board (o dono tira qualquer um; quem não é dono só sai sozinho). O dono não sai.',\n inputSchema: { board_id: boardId, user_id: z.string().uuid() },\n annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: false },\n },\n async ({ board_id, user_id }) =>\n run(async () => {\n await api.removeMember(board_id, user_id);\n return `✅ ${user_id} não tem mais acesso ao board.`;\n })\n );\n\n registerCanvasCommentTools(server, api, run);\n registerCanvasMediaTools(server, { api, cfg, run, edit, seen, placeFor });\n registerCanvasLayoutTools(server, { api, run, edit });\n registerCanvasRunTools(server, api, run);\n registerCanvasFocusTools(server, api, run);\n}\n\n","/**\n * Cliente das rotas `/api/v1/canvas` (academy-backend, PR #309).\n *\n * coreVersion: o commit exige `coreVersion` igual ao `CORE_VERSION` do\n * canvas-core vendorizado no servidor, e nenhuma rota expõe esse valor. O único\n * lugar em que ele aparece é o corpo do `409 core-mismatch`, que o servidor\n * devolve DEPOIS de conferir o papel e ANTES de abrir a transação: nada foi\n * aplicado. Então o MCP manda o valor que conhece (fixado abaixo, ou o último\n * aprendido nesta execução) e, se vier `core-mismatch` com a versão no corpo,\n * aprende e reenvia UMA vez. Os ids das operações garantem que o reenvio não\n * aplica duas vezes. É seguro porque o MCP só emite o subconjunto básico de\n * operações e nunca aplica nada localmente.\n */\nimport type { BeplusClient } from '../api/client';\nimport { ApiError } from '../api/errors';\nimport type { Config } from '../config';\nimport type { BoardDoc, OpEnvelope } from './core';\n\n/** vendor/canvas-core/VERSION.json do academy-backend em 25/09/2026. */\nexport const PINNED_CORE_VERSION = 'ca7b3b406184c7f679f555c3a008013197182b23';\n\nexport type CanvasRole = 'owner' | 'editor' | 'viewer';\nexport type RejectReason = 'node-missing' | 'edge-endpoint-missing' | 'invalid-op' | 'too-large';\n\nexport interface BoardListItem {\n id: string;\n kind: string;\n title: string;\n seq: number;\n ownerId: string;\n thumbnailUrl: string | null;\n updatedAt: string;\n role: CanvasRole;\n}\n\nexport interface RunDTO {\n nodeId: string;\n state: unknown;\n claimedBy: { userId: string; clientId: string } | null;\n seq: number;\n updatedAt: string;\n}\n\n/** Tempo que o MCP espera o POST do pedido: acima dos 20 s que o servidor dá à aba. */\nexport const RUN_REQUEST_TIMEOUT_MS = 40_000;\n\nexport type RunTargetWire = { kind: 'nodes'; nodeIds: string[] } | { kind: 'from'; nodeId: string } | { kind: 'all' };\n\nexport interface RunRequestBody {\n requestId: string;\n target: RunTargetWire;\n maxDiamonds: number;\n dryRun: boolean;\n simulated: boolean;\n label?: string;\n}\n\nexport interface RunNodeEstimate {\n nodeId: string;\n title?: string;\n diamonds: number | null;\n willRun: boolean;\n afterApproval?: boolean;\n error?: string;\n}\n\nexport interface RunEstimateWire {\n total: number;\n unknown?: string[];\n nodes?: RunNodeEstimate[];\n later?: { total: number; nodes: string[] };\n /** CR2: nós em cache (não rodam e não entram em `nodes`). */\n cached?: number;\n /** CR2: nós que rodam ou esperam aprovação e ficaram fora de `nodes` pelo tamanho do fio. */\n omitted?: number;\n /** CR2: a contagem real, só quando `unknown` ou `later.nodes` foram cortados. */\n counts?: { unknown: number; later: number };\n}\n\n/** A resposta da aba ao pedido (dev/fatias/CR1.md): o servidor repassa como veio. */\nexport interface TabAnswer {\n ok: boolean;\n status?: 'estimate' | 'started' | 'nothing' | string;\n reason?: string;\n message?: string;\n requestId?: string;\n mode?: 'live' | 'simulated' | string;\n maxDiamonds?: number;\n estimate?: RunEstimateWire;\n /** O mesmo requestId de novo: a aba devolveu a resposta que já tinha dado. */\n repeated?: boolean;\n /** Nome de quem a aba mostra como pedinte, para conferência. */\n label?: string | null;\n}\n\nexport interface RunStatusNode {\n nodeId: string;\n title?: string;\n status: string;\n error?: string | null;\n message?: string | null;\n outputs?: number;\n}\n\nexport interface RunStatusAnswer {\n found: true;\n requestId: string;\n state: string;\n mode?: string;\n estimated?: number;\n spent?: number | null;\n startedAt?: number | null;\n finishedAt?: number | null;\n message?: string | null;\n nodes?: RunStatusNode[];\n /** CR2: nós do pedido que ficaram fora de `nodes` pelo tamanho do fio. */\n omitted?: number;\n}\n\n/** Tempo que o MCP espera o POST do enquadramento: acima dos 5 s que o servidor dá à aba. */\nexport const FOCUS_REQUEST_TIMEOUT_MS = 12_000;\n\n/** Corpo do `POST /boards/:id/focus-requests` (CF1). */\nexport interface FocusRequestBody {\n nodeIds?: string[];\n sectionId?: string;\n title?: string;\n zoom?: 'fit' | number;\n select?: boolean;\n /** true: a aba segue a área e fica presa no enquadramento até o \"×\". Padrão: uma vez só. */\n follow?: boolean;\n}\n\n/** Como a aba estava quando o pedido chegou. */\nexport interface FocusTabWire {\n title: string;\n visible: boolean;\n montage: boolean;\n wasFramed: boolean;\n /** A aba é do usuário (não é aba de agente aberta por link `?frame`). */\n human?: boolean;\n /** O pedido foi repassado pela aba que o servidor escolheu à aba que o usuário está olhando. */\n relayed?: boolean;\n}\n\n/** A resposta da aba ao enquadramento (dev/fatias/CF1.md): o servidor repassa como veio. */\nexport interface FocusAnswer {\n ok: boolean;\n status?: 'framed' | string;\n /** `light`: uma vez só; `follow`: a aba ficou no modo `?frame` (segue a área). */\n mode?: 'light' | 'follow' | string;\n reason?: string;\n message?: string;\n found?: number;\n missing?: string[];\n missingMore?: number;\n selected?: number;\n zoom?: 'fit' | number;\n tab?: FocusTabWire;\n}\n\nexport interface BoardSnapshot {\n id: string;\n kind: string;\n title: string;\n doc: BoardDoc;\n seq: number;\n runs: RunDTO[];\n role: CanvasRole;\n thumbnailUrl: string | null;\n updatedAt: string;\n}\n\nexport type CommitOutcome = { opId: string; seq: number } | { opId: string; rejected: RejectReason };\n\nexport interface MemberDTO {\n userId: string;\n role: CanvasRole;\n firstName: string | null;\n lastName: string | null;\n nickname: string | null;\n avatarUrl: string | null;\n addedAt: string;\n}\n\nexport type CommentStatus = 'open' | 'resolved' | 'all';\n\nexport type CommentAnchor =\n | { kind: 'point'; x: number; y: number }\n | { kind: 'node'; nodeId: string; dx: number; dy: number }\n | { kind: 'output'; nodeId: string; outputKey: string }\n | { kind: 'timecode'; nodeId: string; t: number };\n\nexport interface CommentAuthor {\n id: string;\n name: string | null;\n avatar: string | null;\n}\n\n/** Comentário apagado chega só com `{ id, deleted: true, createdAt }`. */\nexport interface CommentDTO {\n id: string;\n deleted?: boolean;\n body?: string;\n mentions?: string[];\n author?: CommentAuthor | null;\n createdAt: string;\n editedAt?: string | null;\n reactions?: { emoji: string; count: number; mine?: boolean }[];\n}\n\nexport interface CommentThread extends CommentDTO {\n anchor: CommentAnchor | null;\n resolvedAt: string | null;\n resolvedBy: string | null;\n replies: CommentDTO[];\n}\n\nexport interface ConfirmedEnvelope {\n id: string;\n clientId: string;\n actorId: string | null;\n seq: number;\n ts: number;\n op: { type: string } & Record<string, unknown>;\n}\n\n/** O `raw` que o `HttpError.toJson()` do backend põe em `error.raw`. */\nexport function errorRaw(err: unknown): Record<string, unknown> | undefined {\n if (!(err instanceof ApiError)) return undefined;\n const raw = (err.body as { error?: { raw?: unknown } } | undefined)?.error?.raw;\n return raw && typeof raw === 'object' ? (raw as Record<string, unknown>) : undefined;\n}\n\n/**\n * Ritmo das escritas de comentário. O back aceita 60/min por pessoa; o MCP fica\n * em 50 para sobrar para o que a pessoa faz no Canvas ao mesmo tempo. Mutável só\n * para os testes trocarem o relógio e o sono.\n */\nexport const commentPacing = {\n perMinute: 50,\n retryWaitsMs: [5_000, 15_000, 45_000] as number[],\n now: () => Date.now(),\n sleep: (ms: number) => new Promise<void>((r) => setTimeout(r, Math.max(0, ms))),\n};\n\nexport class CanvasApi {\n private coreVersion = PINNED_CORE_VERSION;\n private userId: string | null = null;\n /** Instantes das escritas de comentário no último minuto. */\n private writes: number[] = [];\n\n constructor(private client: BeplusClient, private cfg: Config) {}\n\n private req<T>(\n method: string,\n path: string,\n opts: { body?: unknown; query?: Record<string, string | number | undefined>; timeoutMs?: number } = {}\n ) {\n return this.client.request<T>(method, path, { ...opts, base: this.cfg.canvasBase });\n }\n\n /** Token do `beplus-mcp login` (OAuth) não abre `/api/v1/canvas`: só PAT. */\n get usesPat(): boolean {\n return this.cfg.token.startsWith('pat_');\n }\n\n /** `createdBy` dos nós que o MCP cria. Nulo seria \"motor de execução\" no Canvas. */\n async me(): Promise<string> {\n if (!this.userId) this.userId = (await this.client.me()).userId;\n return this.userId;\n }\n\n listBoards(kind: 'board' | 'template' = 'board'): Promise<BoardListItem[]> {\n return this.req('GET', '/boards', { query: { kind } });\n }\n\n createBoard(body: { title: string; kind?: 'board' | 'template'; doc: BoardDoc }) {\n return this.req<{ id: string; kind: string; title: string; seq: number; role: CanvasRole }>('POST', '/boards', { body });\n }\n\n snapshot(boardId: string): Promise<BoardSnapshot> {\n return this.req('GET', `/boards/${boardId}`);\n }\n\n /** Replay depois de `after`. `null` quando o servidor manda reler a foto (410). */\n async opsAfter(boardId: string, after: number): Promise<ConfirmedEnvelope[] | null> {\n try {\n const { envelopes } = await this.req<{ envelopes: ConfirmedEnvelope[] }>('GET', `/boards/${boardId}/ops`, {\n query: { after },\n });\n return envelopes;\n } catch (e) {\n if (e instanceof ApiError && e.httpStatus === 410) return null;\n throw e;\n }\n }\n\n async commit(boardId: string, ops: OpEnvelope[]): Promise<{ seq: number; outcomes: CommitOutcome[] }> {\n const send = () =>\n this.req<{ seq: number; outcomes: CommitOutcome[] }>('POST', `/boards/${boardId}/ops`, {\n body: { coreVersion: this.coreVersion, ops },\n });\n try {\n return await send();\n } catch (e) {\n const raw = errorRaw(e);\n if (!(e instanceof ApiError) || e.httpStatus !== 409 || raw?.reason !== 'core-mismatch') throw e;\n const serverVersion = typeof raw.coreVersion === 'string' ? raw.coreVersion : '';\n if (!serverVersion || serverVersion === this.coreVersion) throw new CoreMismatchError(serverVersion);\n this.coreVersion = serverVersion;\n try {\n return await send();\n } catch (again) {\n if (again instanceof ApiError && again.httpStatus === 409 && errorRaw(again)?.reason === 'core-mismatch') {\n throw new CoreMismatchError(String(errorRaw(again)?.coreVersion ?? ''));\n }\n throw again;\n }\n }\n }\n\n members(boardId: string): Promise<MemberDTO[]> {\n return this.req('GET', `/boards/${boardId}/members`);\n }\n\n putMember(boardId: string, userId: string, role: 'editor' | 'viewer') {\n return this.req<{ userId: string; role: string }>('PUT', `/boards/${boardId}/members/${userId}`, { body: { role } });\n }\n\n removeMember(boardId: string, userId: string) {\n return this.req<{ userId: string; removed: boolean }>('DELETE', `/boards/${boardId}/members/${userId}`);\n }\n\n // ── comentários (academy-backend #313) ────────────────────────────────────\n\n listComments(boardId: string, status: CommentStatus = 'open'): Promise<CommentThread[]> {\n return this.req('GET', `/boards/${boardId}/comments`, { query: { status } });\n }\n\n /**\n * Escrita de comentário passa por aqui: o back limita a 60 por minuto por pessoa\n * (balde fixo, sem Retry-After). O MCP se espaça abaixo do teto e, se ainda\n * assim vier 429 (a pessoa também comentando no Canvas), espera e tenta de novo.\n */\n private async write<T>(method: string, path: string, body?: unknown): Promise<T> {\n const p = commentPacing;\n const now = p.now();\n this.writes = this.writes.filter((t) => now - t < 60_000);\n if (this.writes.length >= p.perMinute) {\n await p.sleep(this.writes[0] + 60_000 - now);\n this.writes.shift();\n }\n for (let attempt = 0; ; attempt++) {\n this.writes.push(p.now());\n try {\n return await this.req<T>(method, path, body === undefined ? {} : { body });\n } catch (e) {\n if (!(e instanceof ApiError) || e.httpStatus !== 429 || attempt >= p.retryWaitsMs.length) throw e;\n await p.sleep(p.retryWaitsMs[attempt]);\n }\n }\n }\n\n /** Raiz ou resposta. O back devolve sempre a THREAD DA RAIZ (resposta nova = última de `replies`). */\n createComment(boardId: string, body: { body: string; mentions?: string[]; anchor?: CommentAnchor; parentId?: string }) {\n return this.write<CommentThread>('POST', `/boards/${boardId}/comments`, body);\n }\n\n resolveComment(boardId: string, commentId: string) {\n return this.write<CommentThread>('POST', `/boards/${boardId}/comments/${commentId}/resolve`);\n }\n\n reopenComment(boardId: string, commentId: string) {\n return this.write<CommentThread>('POST', `/boards/${boardId}/comments/${commentId}/reopen`);\n }\n\n // ── execução pela aba do Canvas (CR1, academy-backend #318) ───────────────\n\n /**\n * Pede para a aba do Canvas da pessoa rodar. O servidor espera a aba até 20 s;\n * aqui a espera é maior para o prazo do servidor vencer antes do nosso.\n */\n runRequest(boardId: string, body: RunRequestBody): Promise<TabAnswer> {\n return this.req('POST', `/boards/${boardId}/run-requests`, { body, timeoutMs: RUN_REQUEST_TIMEOUT_MS });\n }\n\n runStatus(boardId: string, requestId: string): Promise<RunStatusAnswer> {\n return this.req('GET', `/boards/${boardId}/run-requests/${requestId}`);\n }\n\n // ── enquadrar a aba do Canvas (CF1) ───────────────────────────────────────\n\n /** Pede para a aba do Canvas da pessoa enquadrar nós. O servidor espera a aba até 5 s. */\n focusRequest(boardId: string, body: FocusRequestBody): Promise<FocusAnswer> {\n return this.req('POST', `/boards/${boardId}/focus-requests`, { body, timeoutMs: FOCUS_REQUEST_TIMEOUT_MS });\n }\n\n /** Só para os testes conferirem o aprendizado. */\n get currentCoreVersion(): string {\n return this.coreVersion;\n }\n}\n\nexport class CoreMismatchError extends Error {\n constructor(public serverVersion: string) {\n super(\n 'O servidor do Canvas recusou a versão do canvas-core deste MCP (409 core-mismatch)' +\n (serverVersion ? ` e segue exigindo ${serverVersion.slice(0, 12)}` : ' sem informar a versão esperada') +\n '. Nada foi aplicado. Atualize o beplus-mcp (npx -y beplus-mcp@latest) ou avise o time.'\n );\n this.name = 'CoreMismatchError';\n }\n}\n\n/** Erro de uso das ferramentas canvas_*: a mensagem vai direto para o agente. */\nexport class CanvasToolError extends Error {}\n","/**\n * Catálogo estático dos tipos de nó do Canvas (packages/nodes/src/<kind>/logic.ts\n * do beplus-canvas, set/2026). O servidor não expõe o registro de tipos, então o\n * MCP carrega esta cópia enxuta: tamanho padrão, dado inicial e portas fixas.\n *\n * Todo nó de fluxo é `type: 'workflow'` e o tipo lógico mora em `data.kind`.\n * Portas marcadas como dinâmicas dependem do `data` (modelo, `{{var}}` do\n * Prompt, ideias do Roteiro): o MCP avisa quando a porta não está aqui, mas não\n * bloqueia.\n *\n * O `data` de cada tipo é o `defaultData()` INTEIRO do logic: o app não completa\n * campo que falta na leitura (só imagem, vídeo, voz e trilha normalizam). Tipo cujo\n * padrão depende de catálogo interno (Formatos, com os presets de formato) fica de\n * fora: a pessoa adiciona no Canvas.\n */\nimport type { Json } from './core';\n\nexport const WORKFLOW_NODE_TYPE = 'workflow';\nexport const KIND_FIELD = 'kind';\n\nexport interface KindSpec {\n title: string;\n size: { w: number; h: number };\n data: Record<string, Json>;\n inputs: string[];\n outputs: string[];\n /** Portas que nascem do `data` (modelo, variáveis, ideias). */\n dynamic?: string;\n /** Anotação (nota, seção...) pousa onde pediu e não entra no fluxo. */\n annotation?: boolean;\n /** Campo principal para o resumo de leitura. */\n main?: string;\n}\n\nexport const KINDS: Record<string, KindSpec> = {\n text: { title: 'Texto', size: { w: 300, h: 160 }, data: { text: '' }, inputs: [], outputs: ['text'], main: 'text' },\n block: { title: 'Bloco', size: { w: 260, h: 140 }, data: { text: '' }, inputs: [], outputs: ['text'], main: 'text' },\n prompt: {\n title: 'Prompt', size: { w: 1024, h: 516 }, data: { template: '' }, inputs: ['refs'], outputs: ['text', 'refs'],\n dynamic: 'uma entrada de texto por {{var}} do template', main: 'template',\n },\n llm: {\n title: 'Redator', size: { w: 340, h: 300 },\n data: { model: 'gemini-flash', system: '', instruction: '', outputMode: 'text' },\n inputs: ['instruction', 'media'], outputs: ['text'], main: 'instruction',\n },\n brief: {\n title: 'Diretor', size: { w: 420, h: 360 },\n data: {\n model: 'gemini-flash', sceneCount: 4, aspect_ratio: '16:9', secondsPerScene: 5,\n tone: 'Natural e próximo, como quem conta para um amigo', language: 'pt-BR',\n },\n inputs: ['briefing', 'refs'], outputs: ['script', 'narration', 'music', 'scenes', 'motion'],\n },\n narration: { title: 'Narração', size: { w: 360, h: 360 }, data: { blocks: [] }, inputs: [], outputs: ['text', 'blocks'], main: 'blocks' },\n shotlist: {\n title: 'Roteiro', size: { w: 780, h: 410 }, data: { rows: [], orphanedRows: [] }, inputs: ['blocks'], outputs: ['shotlist'],\n dynamic: 'uma saída shot:<ideaId> por ideia', main: 'rows',\n },\n context: { title: 'Contexto', size: { w: 320, h: 220 }, data: { kitId: null }, inputs: [], outputs: ['context'] },\n copy: {\n title: 'Textos da peça', size: { w: 340, h: 320 }, data: { title: '', body: '', cta: '', legal: '' },\n inputs: [], outputs: ['title', 'body', 'cta', 'legal'], main: 'title',\n },\n media: { title: 'Mídia', size: { w: 320, h: 280 }, data: { items: [] }, inputs: [], outputs: ['image'], dynamic: 'saída por tipo de item (image, video, audio, file)', main: 'items' },\n image: {\n title: 'Gerador de imagem', size: { w: 516, h: 516 }, data: { model: 'google/nano-banana-2', aspect_ratio: '1:1', count: 1 },\n inputs: ['prompt'], outputs: ['image'], dynamic: 'refs e negative conforme o modelo',\n },\n video: {\n title: 'Gerador de vídeo', size: { w: 917, h: 516 },\n data: { model: 'bytedance/seedance-2.0-mini', aspect_ratio: '16:9', duration: 5, generateAudio: true },\n inputs: ['prompt'], outputs: ['video'], dynamic: 'frame, refs e negative conforme o modelo',\n },\n tts: {\n title: 'Locução', size: { w: 320, h: 212 }, data: { model: 'gemini-3.8-flash-lite-tts', voice: 'Algieba', speed: 'normal' },\n inputs: ['text'], outputs: ['audio', 'approved'], dynamic: 'style conforme o modelo; SeedAudio 1.0 tem reference (audio), usa voice: seed-auto e seedConsent: true com referência; alternativa seedReferenceGenerationId de geração própria',\n },\n music: {\n title: 'Trilha', size: { w: 320, h: 212 }, data: { model: 'suno/v6', instrumental: true, negativeTags: ['vocals', 'choir', 'whistling', 'marching band', 'epic orchestral'] },\n inputs: ['prompt', 'negative'], outputs: ['audio', 'approved'], dynamic: 'lyrics quando não é instrumental',\n },\n review: {\n title: 'Revisor', size: { w: 400, h: 420 },\n data: {\n model: 'gemini-flash', strictness: 'normal', criteria: '',\n checks: { inventedText: true, inventedLogo: true, productFidelity: true, composition: true, artifacts: true },\n },\n inputs: ['items', 'prompt', 'refs'], outputs: ['reviewed'], main: 'criteria',\n },\n approval: { title: 'Aprovação', size: { w: 660, h: 580 }, data: {}, inputs: ['items'], outputs: ['approved'] },\n 'audio-demo': { title: 'Demo de áudio', size: { w: 460, h: 500 }, data: { chosenKey: null }, inputs: ['voice', 'music'], outputs: ['voice', 'music'] },\n compose: {\n title: 'Composição', size: { w: 440, h: 320 }, data: { formatIds: [], imageType: 'jpg', jpgQuality: 0.92 },\n inputs: ['background', 'title', 'body', 'cta', 'legal', 'logo'], outputs: ['pieces'],\n },\n montage: {\n title: 'Montagem', size: { w: 460, h: 560 },\n data: {\n order: 'chegada', musicGainDb: -14, duckingDb: -8, fadeMs: 1500, title: '', renderFilm: true, filmFps: 30, clipAudioGainDb: -12,\n },\n inputs: ['clips', 'voice', 'music'], outputs: ['film', 'cut', 'clips', 'voice', 'music'], main: 'title',\n },\n export: {\n title: 'Exportação', size: { w: 380, h: 420 },\n data: { client: '', campaign: '', version: 1, imageType: 'png', jpgQuality: 90, manifest: true, flat: false },\n inputs: ['items'], outputs: ['package'],\n },\n note: { title: 'Nota', size: { w: 220, h: 220 }, data: { text: '', color: 'yellow', fontSize: 'auto' }, inputs: [], outputs: [], annotation: true, main: 'text' },\n label: {\n title: 'Texto livre', size: { w: 320, h: 56 }, data: { text: '', size: 'titulo', weight: 'bold', color: 'neutral', align: 'left' },\n inputs: [], outputs: [], annotation: true, main: 'text',\n },\n section: { title: 'Seção', size: { w: 880, h: 560 }, data: { title: 'Seção', color: 'violet' }, inputs: [], outputs: [], annotation: true, main: 'title' },\n shape: {\n title: 'Forma', size: { w: 200, h: 140 }, data: { shape: 'rounded', fill: 'blue', stroke: 'blue', strokeWidth: 2, text: '' },\n inputs: [], outputs: [], annotation: true, main: 'text',\n },\n};\n\n/**\n * TX1 · A largura em que o Texto livre (label) nasce quando o pedido não traz size {w}, pelo tamanho\n * do texto (`data.size`). Título e subtítulo são uma frase numa linha só; numa caixa de 320 viravam\n * uma torre estreita de texto por cima dos cartões. Espelha LABEL_BIRTH_WIDTH de\n * packages/nodes/src/label/logic.ts do beplus-canvas: mexeu lá, mexa aqui.\n */\nexport const LABEL_BIRTH_WIDTH = { titulo: 2000, subtitulo: 1200, corpo: 320 } as const;\n\n/** Tamanho de texto que o Canvas não conhece é desenhado como título (`toLabelSize`), e nasce como título. */\nexport function labelBirthWidth(size: unknown): number {\n return typeof size === 'string' && Object.hasOwn(LABEL_BIRTH_WIDTH, size)\n ? LABEL_BIRTH_WIDTH[size as keyof typeof LABEL_BIRTH_WIDTH]\n : LABEL_BIRTH_WIDTH.titulo;\n}\n\n/**\n * LC1 · O Prompt nasce com 1024 × 516 e o gerador de imagem ou vídeo com a MESMA altura e a largura\n * do aspecto que o dado pede: 16:9 dá 917, 9:16 dá 290, 1:1 dá 516. `auto`, `adaptive` e o que não é\n * proporção ficam no aspecto padrão do tipo (1:1 na imagem, 16:9 no vídeo), e a proporção fica entre\n * 0,5 e 2,4 (a régua do palco). Espelha birthSizeOf de packages/nodes/src/shared/stage-size.ts do\n * beplus-canvas: mexeu lá, mexa aqui.\n */\nexport const CREATION_HEIGHT = 516;\nconst STAGE_RATIO_MIN = 0.5;\nconst STAGE_RATIO_MAX = 2.4;\n\n/** `16:9` vira 1,777…; `auto`, `adaptive`, vazio e o que não é proporção viram nulo. */\nexport function ratioOfAspect(aspect: unknown): number | null {\n if (typeof aspect !== 'string') return null;\n const match = /^(\\d+(?:\\.\\d+)?):(\\d+(?:\\.\\d+)?)$/.exec(aspect.trim());\n if (match === null) return null;\n const width = Number(match[1]);\n const height = Number(match[2]);\n return width > 0 && height > 0 ? width / height : null;\n}\n\nexport function isGeneratorKind(kind: string): kind is 'image' | 'video' {\n return kind === 'image' || kind === 'video';\n}\n\n/** A largura em que o gerador nasce, na altura de criação, pelo aspecto do dado. */\nexport function generatorBirthWidth(kind: 'image' | 'video', aspect: unknown): number {\n const ratio = ratioOfAspect(aspect) ?? (kind === 'video' ? 16 / 9 : 1);\n return Math.round(CREATION_HEIGHT * Math.min(STAGE_RATIO_MAX, Math.max(STAGE_RATIO_MIN, ratio)));\n}\n\n/** Lista curta para a descrição da ferramenta e para o erro de tipo desconhecido. */\nexport function kindList(): string {\n return Object.entries(KINDS)\n .map(([k, s]) => `${k} (${s.title})`)\n .join(', ');\n}\n\n/** Porta conhecida? `undefined` quando o tipo nem está no catálogo. */\nexport function knownPort(kind: string | null, side: 'in' | 'out', port: string): boolean | undefined {\n const spec = kind ? KINDS[kind] : undefined;\n if (!spec) return undefined;\n const list = side === 'in' ? spec.inputs : spec.outputs;\n if (list.includes(port)) return true;\n if (spec.dynamic) {\n // Portas derivadas: `shot:<id>`, `field:<id>`, `{{var}}` do Prompt, refs/negative/frame/style/lyrics.\n return undefined;\n }\n return false;\n}\n","/**\n * O pedaço do `@beplus/canvas-core` que o MCP precisa, reescrito à mão.\n *\n * O servidor NÃO valida a forma de `node.add`/`edge.add`: o `step()` do core só\n * confere se os nós existem e grava. Um nó com chave a mais ou número inválido\n * entra no documento e o `migrate()` de todo cliente passa a devolver `null`,\n * ou seja, o board para de abrir para todo mundo. Por isso as guardas abaixo\n * espelham `isValidNode`/`isValidEdge` do core (vendor/canvas-core/index.js do\n * academy-backend) e rodam antes de todo commit.\n *\n * O MCP só EMITE operações (node.add/remove/set, edge.add/remove, board.set,\n * history.remove, batch). Ele nunca aplica operação localmente: a foto do board\n * vem sempre do servidor.\n */\nimport { randomBytes, randomUUID } from 'node:crypto';\n\nexport type Json = null | boolean | number | string | Json[] | { [k: string]: Json };\n\nexport interface BoardNode {\n id: string;\n type: string;\n position: { x: number; y: number };\n size: { w: number; h: number };\n zIndex: number;\n parentId: string | null;\n data: Record<string, Json>;\n createdBy: string | null;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface BoardEdge {\n id: string;\n source: string;\n sourcePort: string;\n target: string;\n targetPort: string;\n data: Record<string, Json>;\n createdBy: string | null;\n createdAt: number;\n}\n\nexport interface BoardDoc {\n id: string;\n schemaVersion: 1;\n title: string;\n ownerId: string;\n folderId: string | null;\n version: number;\n nodes: Record<string, BoardNode>;\n edges: Record<string, BoardEdge>;\n results: Record<string, { nodeId?: string; kind?: string; url?: string | null; status?: string } & Record<string, unknown>>;\n nodeHistory: Record<string, string[]>;\n createdAt: number;\n updatedAt: number;\n meta?: { guide?: string | null; ialab?: Record<string, Json> | null; assetUrls?: Record<string, string> };\n}\n\nexport type PropValue = { kind: 'value'; value: Json } | { kind: 'unset' };\n\nexport type Op =\n | { type: 'node.add'; nodeId: string; node: BoardNode }\n | { type: 'node.remove'; nodeId: string }\n | { type: 'node.set'; nodeId: string; path: string; value: PropValue }\n | { type: 'edge.add'; edgeId: string; edge: BoardEdge }\n | { type: 'edge.remove'; edgeId: string }\n | { type: 'history.remove'; nodeId: string; resultId: string }\n | { type: 'board.set'; field: 'title' | 'guide'; value: PropValue }\n | { type: 'batch'; ops: Op[] };\n\nexport interface OpEnvelope {\n id: string;\n boardId: string;\n clientId: string;\n actorId: string | null;\n seq: null;\n ts: number;\n op: Op;\n}\n\nexport const SCHEMA_VERSION = 1;\n/** Mesmos tetos do servidor (commitRules.ts e ops/limits.ts do core). */\nexport const MAX_ENVELOPES_PER_COMMIT = 200;\nexport const MAX_OP_BYTES = 64 * 1024;\nexport const MAX_DATA_URL_BYTES = 8 * 1024;\n\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nexport const isUuid = (v: unknown): v is string => typeof v === 'string' && UUID_RE.test(v);\n\n/** Uma \"aba\" por processo: é o que separa as edições do MCP das do navegador no log. */\nexport const CLIENT_ID = `mcp-${randomBytes(6).toString('hex')}`;\n\n// ── guardas (espelho de doc/migrate.ts do core) ─────────────────────────────\n\nexport const NODE_KEYS = ['id', 'type', 'position', 'size', 'zIndex', 'parentId', 'data', 'createdBy', 'createdAt', 'updatedAt'];\nconst EDGE_KEYS = ['id', 'source', 'sourcePort', 'target', 'targetPort', 'data', 'createdBy', 'createdAt'];\nconst FORBIDDEN_SEGMENTS = ['__proto__', 'constructor', 'prototype'];\n\nconst isRecord = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && v !== null && !Array.isArray(v);\nconst isFiniteNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v);\nconst isStringOrNull = (v: unknown) => v === null || typeof v === 'string';\nconst hasOnlyKeys = (r: Record<string, unknown>, keys: string[]) => Object.keys(r).every((k) => keys.includes(k));\n\nexport function isJson(value: unknown): value is Json {\n if (value === null) return true;\n const kind = typeof value;\n if (kind === 'boolean' || kind === 'string') return true;\n if (kind === 'number') return Number.isFinite(value as number);\n if (Array.isArray(value)) return value.every(isJson);\n if (isRecord(value)) return Object.values(value).every(isJson);\n return false;\n}\nconst isJsonBag = (v: unknown): v is Record<string, Json> => isRecord(v) && Object.values(v).every(isJson);\nconst isPoint = (v: unknown) => isRecord(v) && hasOnlyKeys(v, ['x', 'y']) && isFiniteNumber(v.x) && isFiniteNumber(v.y);\nconst isSize = (v: unknown) => isRecord(v) && hasOnlyKeys(v, ['w', 'h']) && isFiniteNumber(v.w) && isFiniteNumber(v.h);\n\nexport function isValidNode(key: string, v: unknown): v is BoardNode {\n return (\n isRecord(v) &&\n hasOnlyKeys(v, NODE_KEYS) &&\n v.id === key &&\n typeof v.type === 'string' &&\n isPoint(v.position) &&\n isSize(v.size) &&\n isFiniteNumber(v.zIndex) &&\n isStringOrNull(v.parentId) &&\n isJsonBag(v.data) &&\n isStringOrNull(v.createdBy) &&\n isFiniteNumber(v.createdAt) &&\n isFiniteNumber(v.updatedAt)\n );\n}\n\nexport function isValidEdge(key: string, v: unknown): v is BoardEdge {\n return (\n isRecord(v) &&\n hasOnlyKeys(v, EDGE_KEYS) &&\n v.id === key &&\n typeof v.source === 'string' &&\n typeof v.sourcePort === 'string' &&\n typeof v.target === 'string' &&\n typeof v.targetPort === 'string' &&\n isJsonBag(v.data) &&\n isStringOrNull(v.createdBy) &&\n isFiniteNumber(v.createdAt)\n );\n}\n\n/**\n * Tamanho que o cartão tem na tela, gravado pelo studio (fatia MS1 do Canvas)\n * quando o cartão passa do piso: `data.__measured = { w, h, at }`. Mora no `data`\n * porque o `NODE_KEYS` do core é fechado (chave nova na raiz derruba o board).\n * É campo interno: o MCP lê, não mostra como dado e nunca grava.\n */\nexport const MEASURED_KEY = '__measured';\n\n/** Caminho de `node.set` que o MCP aceita: só dentro de `data` (e posição/tamanho). */\nexport function checkNodePath(path: string): string | null {\n const segments = path.split('.');\n if (segments.some((s) => s.length === 0)) return `caminho inválido \"${path}\"`;\n if (segments.some((s) => FORBIDDEN_SEGMENTS.includes(s))) return `segmento proibido em \"${path}\"`;\n const [root, ...rest] = segments;\n if (root === 'data' && rest[0] === MEASURED_KEY)\n return `data.${MEASURED_KEY} é o tamanho medido pela tela do Canvas: só o Canvas grava`;\n if (root === 'data' && rest.length >= 1) return null;\n if ((root === 'position' && rest.length === 1 && ['x', 'y'].includes(rest[0])) ||\n (root === 'size' && rest.length === 1 && ['w', 'h'].includes(rest[0]))) return null;\n return `só dá para editar data.*, position.x/y e size.w/h (recebido \"${path}\")`;\n}\n\nfunction hasLargeDataUrl(value: unknown): boolean {\n const stack: unknown[] = [value];\n while (stack.length) {\n const cur = stack.pop();\n if (typeof cur === 'string') {\n if (cur.length > MAX_DATA_URL_BYTES && cur.startsWith('data:')) return true;\n } else if (Array.isArray(cur)) stack.push(...cur);\n else if (isRecord(cur)) stack.push(...Object.values(cur));\n }\n return false;\n}\n\n/**\n * Confere uma operação antes de ela sair. Devolve o motivo em PT-BR ou `null`.\n * `node.set` em `position`/`size` exige número finito: string ali quebraria o\n * `isPoint` do core e o board inteiro.\n */\nexport function checkOp(op: Op): string | null {\n switch (op.type) {\n case 'node.add':\n if (op.node.id !== op.nodeId || !isValidNode(op.nodeId, op.node)) return `nó ${op.nodeId} fora do formato do Canvas`;\n return null;\n case 'edge.add':\n if (op.edge.id !== op.edgeId || !isValidEdge(op.edgeId, op.edge)) return `ligação ${op.edgeId} fora do formato do Canvas`;\n return null;\n case 'node.set': {\n const bad = checkNodePath(op.path);\n if (bad) return bad;\n if (op.value.kind === 'value') {\n if (!isJson(op.value.value)) return `valor de ${op.path} não é JSON`;\n if (!op.path.startsWith('data.') && !isFiniteNumber(op.value.value)) return `${op.path} precisa ser número`;\n } else if (!op.path.startsWith('data.')) return `${op.path} não pode ser apagado`;\n return null;\n }\n case 'board.set':\n if (op.field === 'title' && (op.value.kind !== 'value' || typeof op.value.value !== 'string' || !op.value.value.trim()))\n return 'título vazio';\n return null;\n case 'batch':\n for (const inner of op.ops) {\n const bad = checkOp(inner);\n if (bad) return bad;\n }\n return null;\n default:\n return null;\n }\n}\n\nexport function envelope(boardId: string, op: Op, actorId: string | null): OpEnvelope {\n return { id: randomUUID(), boardId, clientId: CLIENT_ID, actorId, seq: null, ts: Date.now(), op };\n}\n\n/** Confere tamanho e mídia embutida do envelope, com os tetos do servidor. */\nexport function checkEnvelope(env: OpEnvelope): string | null {\n const bad = checkOp(env.op);\n if (bad) return bad;\n if (Buffer.byteLength(JSON.stringify(env)) > MAX_OP_BYTES)\n return 'operação maior que 64 KB: divida em partes menores';\n if (hasLargeDataUrl(env.op)) return 'mídia embutida (data:) no board: suba o arquivo e use a URL';\n return null;\n}\n\n// ── fábricas ────────────────────────────────────────────────────────────────\n\nexport function emptyBoard(title: string, now = Date.now()): BoardDoc {\n // `id` e `ownerId` o servidor sobrescreve; vão preenchidos para passar no `migrate`.\n return {\n id: randomUUID(),\n schemaVersion: SCHEMA_VERSION,\n title,\n ownerId: '',\n folderId: null,\n version: 0,\n nodes: {},\n edges: {},\n results: {},\n nodeHistory: {},\n createdAt: now,\n updatedAt: now,\n };\n}\n\nexport function makeNode(init: {\n type: string;\n data: Record<string, Json>;\n position: { x: number; y: number };\n size: { w: number; h: number };\n zIndex: number;\n createdBy: string | null;\n id?: string;\n now?: number;\n}): BoardNode {\n const now = init.now ?? Date.now();\n return {\n id: init.id ?? randomUUID(),\n type: init.type,\n position: { x: init.position.x, y: init.position.y },\n size: { w: init.size.w, h: init.size.h },\n zIndex: init.zIndex,\n parentId: null,\n data: init.data,\n createdBy: init.createdBy,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nexport function makeEdge(init: {\n source: string;\n sourcePort: string;\n target: string;\n targetPort: string;\n createdBy: string | null;\n now?: number;\n}): BoardEdge {\n return {\n id: randomUUID(),\n source: init.source,\n sourcePort: init.sourcePort,\n target: init.target,\n targetPort: init.targetPort,\n data: {},\n createdBy: init.createdBy,\n createdAt: init.now ?? Date.now(),\n };\n}\n\nexport const setValue = (value: Json): PropValue => ({ kind: 'value', value });\nexport const unsetValue = (): PropValue => ({ kind: 'unset' });\n\n/**\n * Remoção de nó igual à `removeNode` do core: ligações do nó, variações do\n * histórico (da última para a primeira) e o nó, num `batch` só (um seq).\n */\nexport function removeNodeOps(doc: BoardDoc, nodeId: string): Op[] {\n const ops: Op[] = [];\n const edgeIds = Object.keys(doc.edges)\n .filter((id) => doc.edges[id].source === nodeId || doc.edges[id].target === nodeId)\n .sort();\n for (const edgeId of edgeIds) ops.push({ type: 'edge.remove', edgeId });\n const history = Object.hasOwn(doc.nodeHistory, nodeId) ? doc.nodeHistory[nodeId] : undefined;\n if (history) for (const resultId of [...history].reverse()) ops.push({ type: 'history.remove', nodeId, resultId });\n ops.push({ type: 'node.remove', nodeId });\n return ops;\n}\n\nexport function batchOf(ops: Op[]): Op {\n return ops.length === 1 ? ops[0] : { type: 'batch', ops };\n}\n\n/** Operação sozinha já passa do teto do envelope: não há como quebrar por aqui. */\nexport class OpTooLargeError extends Error {\n constructor(public op: Op, public bytes: number) {\n super(`operação de ${bytes} bytes`);\n this.name = 'OpTooLargeError';\n }\n}\n\n/**\n * Empacota operações em envelopes de até 64 KB (`MAX_OP_BYTES`), na ordem, cada\n * um com id próprio (o servidor julga um a um e reenvio com o mesmo id devolve o\n * seq original). Não há atomicidade entre envelopes: serve para escrita em lote\n * por caminho, em que cada `node.set` vale sozinho. Enche até 63 KB: o servidor\n * remonta o envelope (actorId dele), e 1 KB de folga evita recusa na borda.\n */\nexport function packEnvelopes(boardId: string, ops: Op[], actorId: string | null, limit = MAX_OP_BYTES - 1024): OpEnvelope[] {\n const bytes = (v: unknown) => Buffer.byteLength(JSON.stringify(v));\n const overhead = bytes(envelope(boardId, { type: 'batch', ops: [] }, actorId));\n const out: OpEnvelope[] = [];\n let cur: Op[] = [];\n let size = overhead;\n const flush = () => {\n if (cur.length) out.push(envelope(boardId, batchOf(cur), actorId));\n cur = [];\n size = overhead;\n };\n for (const op of ops) {\n const b = bytes(op);\n if (overhead + b > limit) throw new OpTooLargeError(op, b);\n const next = size + b + (cur.length ? 1 : 0);\n if (next > limit) flush();\n size += b + (cur.length ? 1 : 0);\n cur.push(op);\n }\n flush();\n return out;\n}\n","/**\n * Tamanho do cartão na tela e arranjo em linhas (fatia MCP-L1).\n *\n * O `size` gravado é PISO: o cartão cresce com o conteúdo (um Prompt de 340 de\n * largura com o `!!ESTILO` resolvido vira uma coluna de 1.800 de altura). Desde\n * a MS1 o studio grava em `data.__measured = { w, h, at }` o tamanho desenhado\n * quando o cartão passa do piso; é esse que vale para arrumar o board. Sem\n * medida, vale o gravado, e quem chama fica sabendo que a altura pode crescer\n * quando o board abrir.\n *\n * Quando a largura muda (a convenção põe o Prompt em 1024 e o gerador na largura do aspecto), a\n * altura medida era de outra largura. A estimativa é conservadora, para nunca\n * encavalar: texto que estreita cresce na proporção; imagem que alarga cresce na\n * proporção; no sentido contrário a altura antiga fica (sobra espaço, não\n * sobrepõe). Depois que o board abre, o studio mede de novo e uma segunda\n * passada fecha os vãos.\n */\nimport { KIND_FIELD, generatorBirthWidth } from './catalog';\nimport { MEASURED_KEY, type BoardDoc, type BoardNode, type Json } from './core';\n\nexport type SizeSource = 'medido' | 'gravado';\n\nexport interface Measured {\n w: number;\n h: number;\n at: string | null;\n}\n\nexport function readMeasured(node: BoardNode): Measured | null {\n const m = node.data[MEASURED_KEY];\n if (!m || typeof m !== 'object' || Array.isArray(m)) return null;\n const { w, h, at } = m as Record<string, Json>;\n if (typeof w !== 'number' || typeof h !== 'number' || !Number.isFinite(w) || !Number.isFinite(h) || w <= 0 || h <= 0) return null;\n return { w, h, at: typeof at === 'string' ? at : null };\n}\n\n/** Até 2 px de diferença é arredondamento da tela, não largura nova. */\nconst SAME_WIDTH = 2;\n/** Texto que quebra linha: estreitar faz crescer. */\nconst WRAP_KINDS = new Set(['prompt', 'text', 'block', 'note', 'label', 'llm', 'narration', 'copy', 'review', 'shotlist']);\n/** Imagem no cartão: a altura acompanha a largura. */\nconst SCALE_KINDS = new Set(['image', 'video', 'media']);\n\nconst kindOf = (node: BoardNode) => (typeof node.data[KIND_FIELD] === 'string' ? (node.data[KIND_FIELD] as string) : '');\n\nfunction heightAt(kind: string, baseW: number, baseH: number, newW: number): number {\n if (Math.abs(newW - baseW) <= SAME_WIDTH) return baseH;\n if (SCALE_KINDS.has(kind) && newW > baseW) return Math.ceil((baseH * newW) / baseW);\n if (WRAP_KINDS.has(kind) && newW < baseW) return Math.ceil((baseH * baseW) / newW);\n return baseH;\n}\n\nexport interface UsedSize {\n w: number;\n h: number;\n source: SizeSource;\n at: string | null;\n /** A altura não é a medida nem o piso: foi estimada para outra largura. */\n estimated: boolean;\n}\n\n/**\n * Tamanho que o cartão ocupa com o piso de largura `floorW` (padrão: o gravado).\n * Com medida: a largura desenhada (se ninguém muda a largura) e a altura medida,\n * nunca abaixo do piso. Sem medida: o gravado.\n */\nexport function usedSize(node: BoardNode, floorW = node.size.w): UsedSize {\n const kind = kindOf(node);\n const m = readMeasured(node);\n if (!m) {\n const h = Math.max(node.size.h, heightAt(kind, node.size.w, node.size.h, floorW));\n return { w: floorW, h, source: 'gravado', at: null, estimated: h !== node.size.h };\n }\n const keepsWidth = Math.abs(floorW - node.size.w) <= SAME_WIDTH;\n return {\n w: keepsWidth ? Math.max(floorW, m.w) : floorW,\n h: Math.max(node.size.h, heightAt(kind, m.w, m.h, floorW)),\n source: 'medido',\n at: m.at,\n estimated: Math.abs(floorW - m.w) > SAME_WIDTH,\n };\n}\n\n/** \"1024×620 medido\", para as leituras. */\nexport function sizeLabel(node: BoardNode): string {\n const u = usedSize(node);\n const base = `${Math.round(u.w)}×${Math.round(u.h)} ${u.source}`;\n if (u.source === 'medido' && u.estimated) return `${base} (medido em ${Math.round(readMeasured(node)!.w)} de largura: altura estimada)`;\n return base;\n}\n\n// ── arranjo em linhas ───────────────────────────────────────────────────────\n\nexport type Role = 'title' | 'prompt' | 'image' | 'video' | 'reference' | 'frame' | 'other';\nexport type Widths = Partial<Record<Exclude<Role, 'other'>, number>>;\n\n/**\n * Convenção aprovada pelo Marco (27/09): prompt largo para ler, referência\n * pequena, título na largura do prompt. A linha de take da animação usa a mesma\n * régua: o frame de entrada do tamanho da referência. O gerador de imagem e o de\n * vídeo não têm largura fixa (06/10): saem na largura do aspecto do dado na\n * altura de criação, a mesma regra de nascimento do `canvas_add_node`\n * (`generatorBirthWidth`: 16:9 dá 917, 9:16 dá 290, 1:1 dá 516). Só `widths.image`,\n * `widths.video` ou `widths.generator` no pedido trocam isso.\n */\nexport const DEFAULT_WIDTHS: Widths = { prompt: 1024, reference: 320, frame: 320, title: 1024 };\nexport const DEFAULT_GAP = 80;\n\n/** Portas do gerador de vídeo que recebem o primeiro quadro (`FRAME_PORT` de packages/nodes/src/video/logic.ts). */\nconst FRAME_PORTS = new Set(['frame']);\nconst FEEDS = new Set(['prompt', 'image', 'video']);\n\nconst outOf = (doc: BoardDoc, id: string) => Object.values(doc.edges).filter((e) => e.source === id);\n\n/** Papel do nó na linha, pelo tipo real no doc e pelas ligações que saem dele. */\nexport function roleOf(doc: BoardDoc, node: BoardNode, asTitle: boolean): Role {\n if (asTitle) return 'title';\n const kind = kindOf(node);\n if (kind === 'prompt' || kind === 'video') return kind;\n if (kind !== 'media' && kind !== 'image') return 'other';\n const feedsFrame = outOf(doc, node.id).some((e) => FRAME_PORTS.has(e.targetPort) && doc.nodes[e.target] && kindOf(doc.nodes[e.target]) === 'video');\n if (feedsFrame) return 'frame';\n return kind === 'media' ? 'reference' : 'image';\n}\n\n/**\n * Pendurado à direita embaixo do prompt: mídia ou imagem que alimenta o prompt\n * ou um gerador (a referência, o frame de entrada), para o fio sair curto e sem\n * cruzar. Mídia ainda sem ligação conta como referência.\n */\nexport function hangsRight(doc: BoardDoc, node: BoardNode): boolean {\n const kind = kindOf(node);\n if (kind !== 'media' && kind !== 'image') return false;\n const out = outOf(doc, node.id);\n if (!out.length) return kind === 'media';\n return out.some((e) => doc.nodes[e.target] && FEEDS.has(kindOf(doc.nodes[e.target])));\n}\n\nexport interface RowSpec {\n title?: string;\n left: string[];\n right: string[];\n}\n\nexport interface Placed {\n id: string;\n row: number;\n role: Role;\n x: number;\n y: number;\n /** Caixa usada no cálculo (medida, estimada ou gravada). */\n w: number;\n h: number;\n source: SizeSource;\n estimated: boolean;\n /** Piso de largura a gravar em `size.w` (a convenção, ou o que já estava). */\n floorW: number;\n}\n\nexport interface Box {\n id: string;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nexport interface Arrangement {\n placed: Placed[];\n /** Pares que se sobrepõem entre os arrumados (com os tamanhos usados). */\n inner: [string, string][];\n /** Arrumado × nó de fora do arranjo (seções não contam: são fundo). */\n outer: [string, string][];\n /** Onde a área cabe sem encostar em nada de fora: abaixo de tudo na mesma faixa de x. */\n freeOrigin: { x: number; y: number };\n}\n\nconst overlap = (a: Box, b: Box) => a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h;\n\n/**\n * Uma linha por versão (ou por take), de cima para baixo: título em cima; à\n * esquerda a coluna `left` (prompt, e a referência ou o frame de entrada\n * alinhados à direita embaixo dele); à direita a coluna `right` (gerador) com o\n * topo no topo do prompt. Qualquer tipo entra em qualquer coluna. `gap` entre\n * cartões, metade entre o título e a linha, o dobro entre linhas.\n *\n * AB9 · `scope` (os ids dos nós da aba onde o arranjo mora) limita o \"nó de fora\" aos cartões\n * da mesma aba: cada aba é um plano, e o que mora em outra não esbarra. Sem `scope`, vale o\n * board inteiro, como antes. A origem livre sugerida sai da mesma lista.\n */\nexport function arrangeRows(\n doc: BoardDoc,\n rows: RowSpec[],\n origin: { x: number; y: number },\n gap = DEFAULT_GAP,\n widths: Widths = {},\n scope?: ReadonlySet<string>\n): Arrangement {\n const placed: Placed[] = [];\n const floorOf = (node: BoardNode, role: Role) => {\n if (role === 'other') return node.size.w;\n const given = widths[role] ?? DEFAULT_WIDTHS[role];\n if (given !== undefined) return given;\n return generatorBirthWidth(role === 'video' ? 'video' : 'image', node.data.aspect_ratio);\n };\n const place = (id: string, row: number, asTitle: boolean, x: number, y: number, alignRight?: number): Placed => {\n const node = doc.nodes[id];\n const role = roleOf(doc, node, asTitle);\n const floorW = floorOf(node, role);\n const u = usedSize(node, floorW);\n const w = Math.ceil(u.w);\n const h = Math.ceil(u.h);\n const px = alignRight !== undefined ? alignRight - w : x;\n const p = { id, row, role, x: Math.round(px), y: Math.round(y), w, h, source: u.source, estimated: u.estimated, floorW };\n placed.push(p);\n return p;\n };\n\n let y = origin.y;\n rows.forEach((row, r) => {\n if (row.title) {\n const t = place(row.title, r, true, origin.x, y);\n y = t.y + t.h + Math.round(gap / 2);\n }\n const top = y;\n const leftW = Math.max(0, ...row.left.map((id) => Math.ceil(usedSize(doc.nodes[id], floorOf(doc.nodes[id], roleOf(doc, doc.nodes[id], false))).w)));\n // Coluna da esquerda: prompt e o resto empilhados; referência e frame encostados na borda direita da coluna.\n let leftEnd = top;\n row.left.forEach((id, i) => {\n const right = hangsRight(doc, doc.nodes[id]);\n const p = place(id, r, false, origin.x, i === 0 ? top : leftEnd + gap, right ? origin.x + leftW : undefined);\n leftEnd = p.y + p.h;\n });\n // Coluna da direita: topo no topo do prompt.\n const rightX = origin.x + (row.left.length ? leftW + gap : 0);\n let rightEnd = top;\n row.right.forEach((id, i) => {\n const p = place(id, r, false, rightX, i === 0 ? top : rightEnd + gap);\n rightEnd = p.y + p.h;\n });\n y = Math.max(leftEnd, rightEnd, top) + gap * 2;\n });\n\n const inner: [string, string][] = [];\n for (let i = 0; i < placed.length; i++) {\n for (let j = i + 1; j < placed.length; j++) if (overlap(placed[i], placed[j])) inner.push([placed[i].id, placed[j].id]);\n }\n const ids = new Set(placed.map((p) => p.id));\n const others: Box[] = Object.values(doc.nodes)\n .filter((n) => !ids.has(n.id) && kindOf(n) !== 'section' && (scope === undefined || scope.has(n.id)))\n .map((n) => ({ id: n.id, x: n.position.x, y: n.position.y, ...usedSize(n) }));\n const outer: [string, string][] = [];\n for (const p of placed) for (const o of others) if (overlap(p, o)) outer.push([p.id, o.id]);\n\n const left = Math.min(origin.x, ...placed.map((p) => p.x));\n const right = Math.max(origin.x, ...placed.map((p) => p.x + p.w));\n const below = others.filter((o) => o.x < right && left < o.x + o.w).map((o) => o.y + o.h);\n const freeOrigin = { x: origin.x, y: below.length ? Math.max(origin.y, Math.ceil(Math.max(...below) + gap * 2)) : origin.y };\n return { placed, inner, outer, freeOrigin };\n}\n","/**\n * AB9 · A pertença de um cartão a uma aba (Fase C: as ferramentas canvas_* leem a mesma regra\n * que o Canvas lê na tela).\n *\n * ESPELHA `apps/studio/src/board/tab-membership.ts` do beplus-canvas, no commit 749919e6 (AB9\n * Fase A no ar). Mesmas regras, mesma ordem, mesmos números. Quando uma mudar, a outra muda\n * junto: `src/canvas-tabs.test.ts` usa os mesmos casos do `ab9-pertenca.test.ts` do Canvas.\n *\n * Cada aba é um plano sem borda: o cartão guarda a aba dele em `data.abaId` (o id da seção da\n * aba), e a posição só decide quando o campo falta (navegador antigo, MCP de antes da 0.37).\n *\n * A ordem, para qualquer cartão vivo:\n *\n * 1. `data.abaId`, se aponta para uma seção de aba viva. Apontando para aba apagada, arquivada\n * ou que deixou de ser aba, o cartão mora em \"Avulsos\": ele pertencia a uma aba que não existe.\n * 2. Sem o campo, a regra de sempre: o centro do cartão dentro do retângulo gravado da seção\n * (a primeira na ordem da barra, quando duas se sobrepõem).\n * 3. Sem estar em retângulo nenhum, a aba cujo retângulo fica a até `TAB_NEAR` pontos do\n * centro, a mais perto.\n * 4. Senão, \"Avulsos\" (`AVULSOS_TAB`).\n *\n * Filho (`parentId`) mora onde o pai mora, e a seção de aba pertence a si mesma.\n *\n * Só lê o documento (`size`, a medida gravada `data.__measured` e a posição). O resultado de um\n * documento é guardado: o documento é imutável, cada leitura do servidor traz um objeto novo.\n * NUNCA mute um documento depois de consultá-lo; para um \"documento de depois\", monte um\n * objeto novo.\n *\n * Módulo folha: importa só `core` e `catalog`, para os outros módulos (resumo, cadeado) poderem\n * usá-lo sem ciclo.\n */\nimport { KIND_FIELD } from './catalog';\nimport { MEASURED_KEY, setValue, type BoardDoc, type BoardNode, type Op } from './core';\n\n/** O campo em `data` que faz a seção virar aba. */\nexport const TAB_FIELD = 'aba';\n/** O campo em `data` do cartão com o id da seção da aba onde ele mora. */\nexport const TAB_ID_FIELD = 'abaId';\n/** O campo em `data` com o lugar da aba na barra (0, 1, 2…). */\nexport const TAB_ORDER_FIELD = 'abaOrdem';\n/** Até onde a posição segura o cartão sem o campo: a distância do centro ao retângulo da aba. */\nexport const TAB_NEAR = 2000;\n\n/**\n * A aba virtual com tudo o que não mora em aba nenhuma. Ela não é seção: os membros são\n * calculados. Os ids dos nós são UUIDs, então este nunca colide com uma seção.\n */\nexport const AVULSOS_TAB = 'avulsos';\n\nconst SECTION = 'section';\n\nconst isFiniteNumber = (v: unknown): v is number => typeof v === 'number' && Number.isFinite(v);\n\n/** Arquivado é `data.archived` com um objeto (`{ at, reason, … }`); `true` solto não conta. */\nexport function isArchived(node: BoardNode | undefined): boolean {\n const flag = node?.data['archived'];\n return typeof flag === 'object' && flag !== null;\n}\n\nexport function isSectionNode(node: BoardNode | undefined): boolean {\n return node !== undefined && node.data[KIND_FIELD] === SECTION;\n}\n\n/** Seção marcada como aba (e não arquivada). */\nexport function isTabSection(node: BoardNode | undefined): boolean {\n return node !== undefined && isSectionNode(node) && node.data[TAB_FIELD] === true && !isArchived(node);\n}\n\n// ------------------------------------------------------------------ geometria\n\nexport interface Rect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport const rectHas = (r: Rect, x: number, y: number): boolean =>\n x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;\n\n/** A distância do ponto ao retângulo (0 dentro dele). */\nfunction distanceTo(r: Rect, x: number, y: number): number {\n const dx = Math.max(r.left - x, 0, x - r.right);\n const dy = Math.max(r.top - y, 0, y - r.bottom);\n return Math.hypot(dx, dy);\n}\n\n/** Onde o nó está no board: a posição de filho (`parentId`) é relativa ao pai. */\nexport function boardPosition(doc: BoardDoc, node: BoardNode): { x: number; y: number } {\n let x = node.position.x;\n let y = node.position.y;\n const seen = new Set<string>([node.id]);\n let parent = node.parentId === null ? undefined : doc.nodes[node.parentId];\n while (parent !== undefined && !seen.has(parent.id)) {\n seen.add(parent.id);\n x += parent.position.x;\n y += parent.position.y;\n parent = parent.parentId === null ? undefined : doc.nodes[parent.parentId];\n }\n return { x, y };\n}\n\n/** O retângulo gravado da seção no board. */\nexport function sectionRect(doc: BoardDoc, node: BoardNode): Rect {\n const at = boardPosition(doc, node);\n return { left: at.x, top: at.y, right: at.x + node.size.w, bottom: at.y + node.size.h };\n}\n\n/** A medida que a tela gravou (`data.__measured`), ou nada quando falta ou está fora do formato. */\nfunction savedMeasure(node: BoardNode): { w: number; h: number } | undefined {\n const value = node.data[MEASURED_KEY];\n if (value === null || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n if (!isFiniteNumber(record['w']) || !isFiniteNumber(record['h'])) return undefined;\n return { w: record['w'], h: record['h'] };\n}\n\n/** A caixa que o cartão ocupa no board: a medida gravada, nunca menor que o `size`. */\nexport function drawnRect(doc: BoardDoc, node: BoardNode): Rect {\n const at = boardPosition(doc, node);\n const saved = savedMeasure(node);\n const w = Math.max(node.size.w, saved?.w ?? 0);\n const h = Math.max(node.size.h, saved?.h ?? 0);\n return { left: at.x, top: at.y, right: at.x + w, bottom: at.y + h };\n}\n\n/**\n * O centro do cartão, lendo só o documento: o `size` e, quando a tela já mediu e gravou, a\n * medida (`data.__measured`), nunca menor que o `size`.\n */\nexport function savedCenter(doc: BoardDoc, node: BoardNode): { x: number; y: number } {\n const at = boardPosition(doc, node);\n const saved = savedMeasure(node);\n const w = Math.max(node.size.w, saved?.w ?? 0);\n const h = Math.max(node.size.h, saved?.h ?? 0);\n return { x: at.x + w / 2, y: at.y + h / 2 };\n}\n\n// ------------------------------------------------------------------ a barra\n\nfunction tabOrderOf(node: BoardNode): number | null {\n const raw = node.data[TAB_ORDER_FIELD];\n return typeof raw === 'number' && Number.isFinite(raw) ? raw : null;\n}\n\n/**\n * As seções de aba vivas, na ordem da barra: primeiro as com lugar gravado, pelo lugar; depois\n * as sem lugar (a criada pelo MCP, por exemplo). Empate e sem lugar: ordem de leitura (de cima\n * para baixo, da esquerda para a direita), pela posição gravada.\n */\nexport function orderedTabSections(doc: BoardDoc): BoardNode[] {\n return Object.values(doc.nodes)\n .filter((node) => isTabSection(node))\n .sort((a, b) => {\n const oa = tabOrderOf(a);\n const ob = tabOrderOf(b);\n if (oa !== null && ob === null) return -1;\n if (oa === null && ob !== null) return 1;\n if (oa !== null && ob !== null && oa !== ob) return oa - ob;\n return a.position.y - b.position.y || a.position.x - b.position.x;\n });\n}\n\n// ------------------------------------------------------------------ a partição\n\nexport interface TabBox extends Rect {\n id: string;\n}\n\n/** Os nós vivos repartidos pelas abas, numa passada só. */\nexport interface TabPartition {\n /** As abas vivas na ordem da barra, com o retângulo gravado de cada seção. */\n readonly tabs: readonly TabBox[];\n /** A aba de cada nó vivo (arquivado fica de fora): o id da seção, ou `AVULSOS_TAB`. */\n readonly home: ReadonlyMap<string, string>;\n /** Os nós de cada aba (e da `AVULSOS_TAB`), na ordem do documento. A seção entra na própria aba. */\n readonly members: ReadonlyMap<string, readonly string[]>;\n}\n\nconst partitions = new WeakMap<BoardDoc, TabPartition>();\n\nfunction build(doc: BoardDoc): TabPartition {\n const tabs: TabBox[] = orderedTabSections(doc).map((node) => ({\n id: node.id,\n ...sectionRect(doc, node),\n }));\n const live = new Map(tabs.map((tab) => [tab.id, tab]));\n const home = new Map<string, string>();\n const walking = new Set<string>();\n\n const byPlace = (node: BoardNode): string => {\n const center = savedCenter(doc, node);\n for (const tab of tabs) if (rectHas(tab, center.x, center.y)) return tab.id;\n let near: TabBox | null = null;\n let best = TAB_NEAR;\n for (const tab of tabs) {\n const distance = distanceTo(tab, center.x, center.y);\n // `<` mantém a primeira da barra no empate.\n if (distance <= best && (near === null || distance < best)) {\n near = tab;\n best = distance;\n }\n }\n return near === null ? AVULSOS_TAB : near.id;\n };\n\n const resolve = (node: BoardNode): string => {\n const known = home.get(node.id);\n if (known !== undefined) return known;\n let tab: string;\n const mark = node.data[TAB_ID_FIELD];\n if (live.has(node.id)) {\n tab = node.id;\n } else if (typeof mark === 'string' && mark !== '') {\n // O campo manda: aba que não existe mais manda o cartão para Avulsos.\n tab = live.has(mark) ? mark : AVULSOS_TAB;\n } else if (node.parentId !== null && !walking.has(node.id)) {\n // Filho herda a aba do pai (a posição dele é relativa à do pai).\n const parent = doc.nodes[node.parentId];\n if (parent === undefined) {\n tab = byPlace(node);\n } else {\n walking.add(node.id);\n tab = resolve(parent);\n walking.delete(node.id);\n }\n } else {\n tab = byPlace(node);\n }\n home.set(node.id, tab);\n return tab;\n };\n\n const members = new Map<string, string[]>();\n for (const node of Object.values(doc.nodes)) {\n if (isArchived(node)) continue;\n const tab = resolve(node);\n const list = members.get(tab);\n if (list === undefined) members.set(tab, [node.id]);\n else list.push(node.id);\n }\n return { tabs, home, members };\n}\n\n/** A partição do documento (guardada por documento). */\nexport function partitionOf(doc: BoardDoc): TabPartition {\n let part = partitions.get(doc);\n if (part === undefined) {\n part = build(doc);\n partitions.set(doc, part);\n }\n return part;\n}\n\n/**\n * A aba do nó: o id da seção, `AVULSOS_TAB` quando ele não mora em aba nenhuma, e nulo para o\n * nó que não existe ou está arquivado.\n */\nexport function tabOfNodeId(doc: BoardDoc, nodeId: string): string | null {\n return partitionOf(doc).home.get(nodeId) ?? null;\n}\n\n/** A operação que grava a aba do cartão (`data.abaId`). */\nexport function stampOp(nodeId: string, tab: string): Op {\n return { type: 'node.set', nodeId, path: `data.${TAB_ID_FIELD}`, value: setValue(tab) };\n}\n\n/**\n * A aba que um cartão com `abaId` aponta, se ela está viva. Cartão sem o campo (ou com o campo\n * apontando para aba que não existe): nulo. É o que diz \"este cartão já tem casa gravada\".\n */\nexport function stampedTab(doc: BoardDoc, node: BoardNode): string | null {\n const mark = node.data[TAB_ID_FIELD];\n if (typeof mark !== 'string' || mark === '') return null;\n return isTabSection(doc.nodes[mark]) ? mark : null;\n}\n","/**\n * AB9 Fase C · O que as ferramentas canvas_* fazem com a pertença de `tabs.ts`: achar a aba que\n * a pessoa pediu, dar nome e contagem a cada aba, escolher o lugar do cartão novo e conferir\n * que `data.abaId` aponta para uma aba viva.\n *\n * A regra de pertença mora em `tabs.ts` (espelho do Canvas). Aqui ficam só as decisões do MCP.\n * Não importa `summary.ts` nem `lock.ts`: os dois importam este.\n */\nimport { CanvasToolError } from './api';\nimport type { BoardDoc, BoardNode, Op } from './core';\nimport {\n AVULSOS_TAB,\n TAB_FIELD,\n TAB_ID_FIELD,\n drawnRect,\n isArchived,\n isSectionNode,\n isTabSection,\n partitionOf,\n rectHas,\n sectionRect,\n type Rect,\n} from './tabs';\n\n/** O campo do cadeado (CD1): a seção com `data.travada === true`. */\nconst LOCK_FIELD = 'travada';\n\n/**\n * A folga entre o conteúdo da aba e o cartão que chega ao fim dele; em aba vazia, a folga do\n * canto e a altura do título da seção. Valores do \"Mover pra aba…\" do Canvas (`MOVE_GAP`,\n * `TAB_GROW_PAD` e `MOVE_TOP_ROOM` de board-tabs.ts, commit 749919e6).\n */\nexport const TAB_END_GAP = 120;\nexport const TAB_GROW_PAD = 48;\nexport const TAB_TOP_ROOM = 96;\n/** A folga que o cartão deixa da borda de outra aba quando precisa descer para sair dela (`TAB_CLEAR_GAP` do Canvas). */\nexport const TAB_CLEAR_GAP = 48;\n\n/** Tamanho do id curto que a leitura mostra (`aba=3f2a9c1d`): o começo do uuid. */\nconst SHORT_ID = 8;\n/** O começo de id que a ferramenta aceita no lugar do id inteiro. */\nconst MIN_PREFIX = 4;\n/** Quantas abas as mensagens de erro listam. */\nconst LISTED = 12;\n\nconst oneLine = (text: string, max: number) => {\n const flat = text.replace(/\\s+/g, ' ').trim();\n return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;\n};\n\n/** O nome da aba como a barra mostra: `data.title`; na falta, `label`; na falta, \"Seção\". */\nexport function tabTitle(node: BoardNode): string {\n const title = typeof node.data.title === 'string' ? node.data.title.trim() : '';\n const label = typeof node.data.label === 'string' ? node.data.label.trim() : '';\n // \"Seção\" é o título que toda seção nasce; um `label` que alguém deu vale mais que ele.\n if (title !== '' && title !== 'Seção') return title;\n return label || title || 'Seção';\n}\n\nexport const isLockedTab = (node: BoardNode | undefined): boolean => node !== undefined && node.data[LOCK_FIELD] === true;\n\n// ------------------------------------------------------------------ o índice das abas\n\nexport interface TabInfo {\n id: string;\n /** O começo do id que a leitura mostra em `aba=…`. */\n short: string;\n title: string;\n locked: boolean;\n /** Os cartões da aba, sem contar a seção dela (como o painel de abas do Canvas). */\n cards: number;\n}\n\nexport interface TabIndex {\n /** Na ordem da barra. */\n tabs: TabInfo[];\n /** Os cartões vivos que não moram em aba nenhuma. */\n loose: number;\n /** O rótulo curto de uma aba, ou `avulsos`. */\n label(tab: string): string;\n info(tab: string): TabInfo | undefined;\n}\n\n/** O começo do id que basta para distinguir as abas entre si (no mínimo `SHORT_ID` caracteres). */\nexport function shortTabIds(ids: readonly string[]): Map<string, string> {\n const longest = Math.max(0, ...ids.map((id) => id.length));\n let length = SHORT_ID;\n while (length < longest && new Set(ids.map((id) => id.slice(0, length))).size < ids.length) length += 1;\n return new Map(ids.map((id) => [id, id.slice(0, length)]));\n}\n\nexport function tabIndex(doc: BoardDoc): TabIndex {\n const part = partitionOf(doc);\n const shorts = shortTabIds(part.tabs.map((tab) => tab.id));\n const tabs: TabInfo[] = part.tabs.map((tab) => {\n const node = doc.nodes[tab.id];\n return {\n id: tab.id,\n short: shorts.get(tab.id)!,\n title: tabTitle(node),\n locked: isLockedTab(node),\n cards: Math.max(0, (part.members.get(tab.id)?.length ?? 0) - 1),\n };\n });\n const byId = new Map(tabs.map((tab) => [tab.id, tab]));\n return {\n tabs,\n loose: part.members.get(AVULSOS_TAB)?.length ?? 0,\n label: (tab) => (tab === AVULSOS_TAB ? AVULSOS_TAB : byId.get(tab)?.short ?? tab),\n info: (tab) => byId.get(tab),\n };\n}\n\n/** O board tem alguma aba viva? Sem aba, o board é um só: não existe Avulsos nem etiqueta de aba. */\nexport const hasTabs = (doc: BoardDoc): boolean => partitionOf(doc).tabs.length > 0;\n\n/**\n * A aba do nó (o id da seção, ou `avulsos`). Nulo para o nó arquivado ou que não existe, e para\n * qualquer nó de um board sem aba nenhuma.\n */\nexport function homeTabOf(doc: BoardDoc, nodeId: string): string | null {\n const part = partitionOf(doc);\n return part.tabs.length === 0 ? null : (part.home.get(nodeId) ?? null);\n}\n\n/** Os ids dos nós que moram na aba (a seção dela inclusive), ou em `avulsos`. */\nexport function membersOfTab(doc: BoardDoc, tab: string): Set<string> {\n return new Set(partitionOf(doc).members.get(tab) ?? []);\n}\n\n// ------------------------------------------------------------------ achar a aba do pedido\n\nfunction tabList(doc: BoardDoc): string {\n const tabs = partitionOf(doc).tabs;\n if (tabs.length === 0) return 'Este board não tem abas (uma aba é uma seção com aba=true).';\n const shown = tabs.slice(0, LISTED).map((tab) => `\"${oneLine(tabTitle(doc.nodes[tab.id]), 40)}\" (${tab.id})`);\n const more = tabs.length > LISTED ? `, … e mais ${tabs.length - LISTED}` : '';\n return `Abas do board: ${shown.join(', ')}${more}.`;\n}\n\nfunction kindLabel(node: BoardNode): string {\n const kind = node.data.kind;\n return typeof kind === 'string' && kind ? kind : node.type;\n}\n\n/**\n * O id da seção da aba que o pedido nomeia. Aceita o id inteiro ou o começo único dele (o `aba=`\n * da leitura mostra só o começo) e, com `allowAvulsos`, a aba virtual. Recusa com a lista das\n * abas quando não existe, quando o nó não é aba (seção comum, cartão), quando está arquivada\n * ou quando o começo serve a mais de uma.\n */\nexport function resolveTab(doc: BoardDoc, ref: string, opts: { allowAvulsos?: boolean } = {}): string {\n const value = ref.trim();\n if (value === AVULSOS_TAB) {\n if (opts.allowAvulsos && hasTabs(doc)) return AVULSOS_TAB;\n throw new CanvasToolError(\n hasTabs(doc)\n ? '\"avulsos\" não é uma aba: é onde ficam os cartões que não moram em aba. Para criar sem aba, omita aba.'\n : `Aba \"avulsos\" não existe. ${tabList(doc)}`\n );\n }\n if (Object.hasOwn(doc.nodes, value)) {\n const node = doc.nodes[value];\n if (isTabSection(node)) return node.id;\n const name = `\"${oneLine(tabTitle(node), 40)}\"`;\n if (isSectionNode(node) && node.data[TAB_FIELD] === true && isArchived(node)) {\n throw new CanvasToolError(\n `A aba ${name} (${value}) está arquivada: os cartões que apontam para ela ficam em Avulsos. Escolha outra aba. ${tabList(doc)}`\n );\n }\n throw new CanvasToolError(\n `${value} é ${isSectionNode(node) ? 'uma seção comum' : `um nó ${kindLabel(node)}`} (${name}), não uma aba. ` +\n `Aba é a seção com aba=true. ${tabList(doc)}`\n );\n }\n if (value.length >= MIN_PREFIX) {\n const hits = partitionOf(doc).tabs.filter((tab) => tab.id.startsWith(value));\n if (hits.length === 1) return hits[0]!.id;\n if (hits.length > 1) {\n const names = hits.slice(0, LISTED).map((tab) => `\"${oneLine(tabTitle(doc.nodes[tab.id]), 40)}\" (${tab.id})`);\n throw new CanvasToolError(`\"${value}\" serve a mais de uma aba: ${names.join(', ')}. Use o id inteiro.`);\n }\n }\n throw new CanvasToolError(`Aba \"${oneLine(value, 60)}\" não existe neste board. ${tabList(doc)}`);\n}\n\n// ------------------------------------------------------------------ o lugar do cartão novo\n\nfunction unionOf(rects: readonly Rect[]): Rect | null {\n let out: Rect | null = null;\n for (const r of rects) {\n out =\n out === null\n ? { ...r }\n : {\n left: Math.min(out.left, r.left),\n top: Math.min(out.top, r.top),\n right: Math.max(out.right, r.right),\n bottom: Math.max(out.bottom, r.bottom),\n };\n }\n return out;\n}\n\n/**\n * Onde um cartão de tamanho `size` nasce quando a aba é conhecida e o pedido não traz posição:\n * no fim do conteúdo dela, abaixo do cartão mais baixo, com folga, alinhado à esquerda do\n * conteúdo. É o \"Mover pra aba…\" do Canvas. O conteúdo é a caixa que une o que mora na aba (a\n * medida gravada, nunca menor que o `size`), sem a seção dela e sem arquivado. Aba vazia: logo\n * abaixo do título da seção.\n *\n * Enquanto as abas estiverem coladas, o centro do cartão não pode cair no retângulo de outra\n * aba (a regra do AB6: é o que faz um cartão sem `abaId` morar nela). Se cair, o cartão DESCE\n * até o topo dele passar da borda de baixo dela, e só desce: o Canvas também o tira de lá para\n * cima ou para os lados, mas aqui o lugar é o fim da aba, e subir o poria em cima do conteúdo.\n * Nas faixas da Fase B (abas a 100 mil pontos uma da outra) nunca anda.\n */\nexport function endOfTabContent(doc: BoardDoc, tabId: string, size: { w: number; h: number }): { x: number; y: number } {\n const part = partitionOf(doc);\n const section = doc.nodes[tabId];\n const boxes = (part.members.get(tabId) ?? []).flatMap((id) => {\n const node = doc.nodes[id];\n return id === tabId || node === undefined || isArchived(node) ? [] : [drawnRect(doc, node)];\n });\n const content = unionOf(boxes);\n const frame = sectionRect(doc, section);\n const spot =\n content === null\n ? { x: frame.left + TAB_GROW_PAD, y: frame.top + TAB_TOP_ROOM }\n : { x: content.left, y: content.bottom + TAB_END_GAP };\n const others = part.tabs.filter((tab) => tab.id !== tabId);\n const cx = spot.x + size.w / 2;\n let y = spot.y;\n for (let guard = 0; guard <= others.length; guard += 1) {\n const hit = others.find((rect) => rectHas(rect, cx, y + size.h / 2));\n if (hit === undefined) break;\n y = hit.bottom + TAB_CLEAR_GAP;\n }\n return { x: Math.round(spot.x), y: Math.round(y) };\n}\n\n/**\n * A frase que fecha a criação de um cartão: em que aba ele ficou, ou o aviso de que ficou em\n * Avulsos (nenhuma aba o segura), que é o erro silencioso de quem esquece o `aba`. Vazia em\n * board sem aba e para a seção que é a própria aba. Julga o documento como fica com o cartão.\n */\nexport function placementNote(doc: BoardDoc, node: BoardNode): string {\n if (isTabSection(node)) return '';\n const after: BoardDoc = { ...doc, nodes: { ...doc.nodes, [node.id]: node } };\n const index = tabIndex(after);\n if (index.tabs.length === 0) return '';\n const home = partitionOf(after).home.get(node.id);\n if (home === undefined) return '';\n const info = index.info(home);\n if (info === undefined) {\n return ' Atenção: ficou em Avulsos (nenhuma aba o segura); passe aba=<id da aba> para ele morar numa aba.';\n }\n return ` Aba: \"${oneLine(info.title, 40)}\" (aba=${info.short}).`;\n}\n\n// ------------------------------------------------------------------ data.abaId só aponta para aba viva\n\nfunction flatten(ops: readonly Op[]): Op[] {\n return ops.flatMap((op) => (op.type === 'batch' ? flatten(op.ops) : [op]));\n}\n\nfunction badAbaId(doc: BoardDoc, value: unknown): string | null {\n if (value === null) return null;\n if (typeof value !== 'string') return `data.${TAB_ID_FIELD} precisa ser o id (texto) de uma aba, ou null para tirar o campo.`;\n if (Object.hasOwn(doc.nodes, value) && isTabSection(doc.nodes[value])) return null;\n let hint: string;\n try {\n const full = resolveTab(doc, value);\n hint = `Use o id inteiro: ${full}.`;\n } catch (e) {\n hint = e instanceof Error ? e.message : '';\n }\n return `data.${TAB_ID_FIELD} \"${oneLine(value, 60)}\" não é o id de uma aba viva. ${hint} Para tirar o campo, mande null.`;\n}\n\n/**\n * O motivo da recusa, ou nulo. Um cartão com `data.abaId` apontando para o que não é aba viva\n * cairia calado em Avulsos (a pertença do Canvas); a ferramenta recusa antes, com a lista das\n * abas. Vale para `node.add` e para `node.set` em `data.abaId`. Apagar o campo (ou null) passa.\n */\nexport function abaIdViolation(doc: BoardDoc, ops: readonly Op[]): string | null {\n for (const op of flatten(ops)) {\n if (op.type === 'node.add') {\n const value = op.node.data[TAB_ID_FIELD];\n if (value !== undefined) {\n const bad = badAbaId(doc, value);\n if (bad) return bad;\n }\n } else if (op.type === 'node.set' && op.path === `data.${TAB_ID_FIELD}` && op.value.kind === 'value') {\n const bad = badAbaId(doc, op.value.value);\n if (bad) return bad;\n }\n }\n return null;\n}\n","/**\n * Resumo compacto de um board para o agente: tipo, nome e campo principal de\n * cada nó, ligações e execuções. Nunca manda blob: histórico de geração,\n * sequência da montagem, traço de desenho, URLs e `data:` viram contagem.\n * Todo corte diz o tamanho e aponta para o `canvas_read_node`, que devolve\n * o valor inteiro.\n */\nimport { KINDS, KIND_FIELD } from './catalog';\nimport { MEASURED_KEY, type BoardDoc, type BoardNode, type Json } from './core';\nimport type { BoardSnapshot, ConfirmedEnvelope } from './api';\nimport { sizeLabel } from './layout';\nimport { tabIndex } from './tab-scope';\nimport { AVULSOS_TAB, TAB_FIELD, TAB_ID_FIELD, isTabSection, partitionOf } from './tabs';\n\nconst MAX_TEXT = 160;\nconst MAX_BLOCKS = 40;\n\n/** Chaves de `data` que nunca entram no resumo (pesadas ou só de tela). */\nconst HEAVY_KEYS = new Set([\n 'history', 'pinned', 'main', 'lastFrame', 'sequence', 'timeline', 'points', 'extra', 'mentions', 'mediaMentions',\n 'refs', 'fields', 'orphanedRows', 'holds', 'appearance', 'settings', 'enabledKeys', 'checks', 'versions', MEASURED_KEY,\n]);\n\n/** `data` sem o campo interno do tamanho medido (ele sai no cabeçalho, não como dado). */\nexport function visibleData(data: Record<string, Json>): Record<string, Json> {\n if (!Object.hasOwn(data, MEASURED_KEY)) return data;\n const { [MEASURED_KEY]: _measured, ...rest } = data;\n return rest;\n}\nconst NAME_KEYS = new Set([KIND_FIELD, 'label', 'nodeTitle']);\n\nexport function oneLine(text: string, max = MAX_TEXT): string {\n const flat = text.replace(/\\s+/g, ' ').trim();\n return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;\n}\n\nexport function nodeKind(node: BoardNode): string | null {\n const k = node.data[KIND_FIELD];\n return typeof k === 'string' && k ? k : null;\n}\n\n/** Nome do nó como o Canvas mostra: `data.label`, depois `data.nodeTitle`, depois o título do tipo. */\nexport function nodeName(node: BoardNode): string {\n const { label, nodeTitle } = node.data;\n if (typeof label === 'string' && label.trim()) return label.trim();\n if (typeof nodeTitle === 'string' && nodeTitle.trim()) return nodeTitle.trim();\n const kind = nodeKind(node);\n return (kind && KINDS[kind]?.title) || kind || node.type;\n}\n\nfunction scalar(v: Json): string | null {\n if (typeof v === 'string') {\n if (v.startsWith('data:')) return '[data-url]';\n if (/^https?:\\/\\//.test(v)) return '[url]';\n return JSON.stringify(oneLine(v, 60));\n }\n if (typeof v === 'number' || typeof v === 'boolean' || v === null) return String(v);\n return null;\n}\n\nfunction blocksLines(blocks: Json): string[] {\n if (!Array.isArray(blocks)) return [];\n const out = blocks.slice(0, MAX_BLOCKS).map((b) => {\n const rec = (b ?? {}) as Record<string, Json>;\n return ` · ${String(rec.id ?? '?')}: ${oneLine(String(rec.text ?? ''), 120)}`;\n });\n if (blocks.length > MAX_BLOCKS) out.push(` · … +${blocks.length - MAX_BLOCKS} blocos`);\n return out;\n}\n\nfunction rowsLines(rows: Json): string[] {\n if (!Array.isArray(rows)) return [];\n const out: string[] = [];\n for (const r of rows.slice(0, MAX_BLOCKS)) {\n const rec = (r ?? {}) as Record<string, Json>;\n const ideas = Array.isArray(rec.ideas) ? rec.ideas : [];\n const ideaText = ideas\n .slice(0, 6)\n .map((i) => {\n const idea = (i ?? {}) as Record<string, Json>;\n return `${String(idea.id ?? '?')}=\"${oneLine(String(idea.text ?? ''), 60)}\"`;\n })\n .join('; ');\n out.push(` · linha ${String(rec.id ?? '?')} (bloco ${String(rec.narrationBlockId ?? '?')}): ${ideas.length} ideia(s) ${ideaText}`);\n }\n if (rows.length > MAX_BLOCKS) out.push(` · … +${rows.length - MAX_BLOCKS} linhas`);\n return out;\n}\n\n/**\n * `aba` é a etiqueta da aba onde o cartão mora (o começo do id da seção, ou `avulsos`), que\n * entra na cabeça da linha: nos fatos ela poderia ser cortada. Sem etiqueta (board sem aba, nó\n * arquivado), a linha sai como sempre. Com ela, o `data.abaId` não repete como fato, e a seção\n * que é aba diz \"é aba\" no lugar do `aba=true`, que se confundiria com a etiqueta.\n */\nexport function nodeLines(node: BoardNode, run?: BoardSnapshot['runs'][number], aba?: string): string[] {\n const kind = nodeKind(node);\n const spec = kind ? KINDS[kind] : undefined;\n const head =\n `- ${node.id} · ${kind ?? node.type} · \"${oneLine(nodeName(node), 60)}\" ` +\n `@(${Math.round(node.position.x)},${Math.round(node.position.y)}) ${sizeLabel(node)}` +\n (aba ? ` · aba=${aba}` : '');\n const facts: string[] = [];\n const extra: string[] = [];\n const d = node.data;\n\n if (d.archived) facts.push('ARQUIVADO');\n if (aba && isTabSection(node)) facts.push('é aba');\n const approval = (d.approval as Record<string, Json> | undefined)?.state;\n if (typeof approval === 'string') facts.push(`aprovação: ${approval}`);\n if (Array.isArray(d.history)) facts.push(`${d.history.length} geração(ões)`);\n if (Array.isArray(d.items)) {\n const names = d.items.slice(0, 5).map((i) => String((i as Record<string, Json>)?.name ?? '?'));\n facts.push(`${d.items.length} arquivo(s)${names.length ? `: ${names.join(', ')}` : ''}`);\n }\n if (Array.isArray(d.blocks)) {\n facts.push(`${d.blocks.length} bloco(s)`);\n extra.push(...blocksLines(d.blocks));\n }\n if (Array.isArray(d.rows)) {\n facts.push(`${d.rows.length} linha(s)`);\n extra.push(...rowsLines(d.rows));\n }\n if (kind === 'montage') {\n const fact = timelineFact(d);\n if (fact) facts.push(fact);\n }\n const main = spec?.main;\n if (main && typeof d[main] === 'string' && d[main]) facts.push(`${main}: \"${oneLine(d[main] as string)}\"`);\n\n for (const [key, value] of Object.entries(d)) {\n if (NAME_KEYS.has(key) || HEAVY_KEYS.has(key) || key === main) continue;\n if (['blocks', 'rows', 'items', 'archived', 'approval'].includes(key)) continue;\n if (aba && (key === TAB_ID_FIELD || (key === TAB_FIELD && isTabSection(node)))) continue;\n const s = scalar(value);\n if (s !== null) facts.push(`${key}=${s}`);\n else if (Array.isArray(value)) facts.push(`${key}=[${value.length}]`);\n else if (value && typeof value === 'object') facts.push(`${key}={…}`);\n if (facts.length > 12) break;\n }\n\n if (run?.claimedBy) facts.push('rodando agora');\n return [facts.length ? `${head} · ${facts.join(' · ')}` : head, ...extra];\n}\n\n/**\n * A timeline da Montagem numa linha. `musicGainDb`/`duckingDb` do nó aparecem no\n * mesmo resumo e confundem: eles só valem para a montagem automática (clipes\n * ligados), e a timeline tem volume próprio nos clipes e faixas.\n *\n * Desde a EP1 do Canvas (26/09) a timeline mora em `data.timeline` (v3) e\n * `data.sequence` é legado congelado. O MCP não interpreta o v3: diz o tamanho e\n * aponta para a leitura inteira. Do legado conta planos e clipes, como antes.\n */\nfunction timelineFact(d: Record<string, Json>): string | null {\n const volume = 'musicGainDb/duckingDb não valem para ela: o volume fica nos clipes e faixas';\n if (d.timeline !== undefined) {\n const legacy = d.sequence !== undefined ? '; data.sequence é o legado congelado' : '';\n return `timeline (v3): ${JSON.stringify(d.timeline).length} caracteres (inteira em canvas_read_node sem path${legacy}; ${volume})`;\n }\n const seq = d.sequence;\n if (!seq || typeof seq !== 'object' || Array.isArray(seq)) return null;\n const plans = Array.isArray(seq.plans) ? seq.plans.length : 0;\n const clips = seq.audioClips && typeof seq.audioClips === 'object' && !Array.isArray(seq.audioClips)\n ? Object.values(seq.audioClips).reduce<number>((t, list) => t + (Array.isArray(list) ? list.length : 0), 0)\n : 0;\n return (\n `sequência (legado, sem data.timeline): ${plans} plano(s), ${clips} clipe(s) de áudio, ${JSON.stringify(seq).length} caracteres ` +\n `(inteira em canvas_read_node sem path; ${volume})`\n );\n}\n\nexport interface SummaryOptions {\n /**\n * O id da seção da aba (ou `avulsos`) a ler sozinha: a seção, quem mora nela e só os fios que\n * tocam nesses nós. O fio que vai para fora da aba sai marcado como externo.\n */\n tab?: string;\n}\n\nconst cardsText = (n: number) => (n === 1 ? '1 cartão' : `${n} cartões`);\n\nexport function boardSummary(snap: BoardSnapshot, opts: SummaryOptions = {}): string {\n const doc = snap.doc;\n const part = partitionOf(doc);\n const index = tabIndex(doc);\n // Board sem aba é um só: nada de etiqueta nem de Avulsos.\n const tabbed = index.tabs.length > 0;\n const scope = opts.tab === undefined ? null : new Set(part.members.get(opts.tab) ?? []);\n const everyNode = Object.values(doc.nodes).sort((a, b) => a.position.x - b.position.x || a.position.y - b.position.y);\n const everyEdge = Object.values(doc.edges);\n const nodes = scope ? everyNode.filter((n) => scope.has(n.id)) : everyNode;\n const edges = scope ? everyEdge.filter((e) => scope.has(e.source) || scope.has(e.target)) : everyEdge;\n const runs = new Map(snap.runs.map((r) => [r.nodeId, r]));\n const who = `Board \"${snap.title}\" · id ${snap.id} · seq ${snap.seq} · seu papel: ${snap.role}`;\n const lines: string[] = [];\n if (scope === null) {\n lines.push(`${who} · ${nodes.length} nó(s) · ${edges.length} ligação(ões)`);\n } else {\n const external = edges.filter((e) => !(scope.has(e.source) && scope.has(e.target))).length;\n const info = index.info(opts.tab!);\n const name = info ? `a aba \"${oneLine(info.title, 60)}\" (aba=${info.short})` : 'os avulsos (aba=avulsos)';\n lines.push(\n `${who} · só ${name}: ${nodes.length} nó(s) · ${edges.length} ligação(ões)${external ? `, ${external} externa(s)` : ''}`,\n `O board inteiro tem ${everyNode.length} nó(s) e ${everyEdge.length} ligação(ões); leia sem aba para ver tudo.`\n );\n }\n const ialab = doc.meta?.ialab;\n if (ialab === null) lines.push('IA Lab: sem vínculo (gerações saem dos diamantes de quem roda).');\n else if (ialab && typeof ialab === 'object') {\n const label = ['code', 'name', 'projectCode', 'projectName'].map((k) => ialab[k]).find((v) => typeof v === 'string');\n lines.push(`IA Lab: vinculado${label ? ` a ${String(label)}` : ''}.`);\n }\n if (doc.meta?.guide) lines.push(`Guia: ${oneLine(doc.meta.guide)}`);\n if (tabbed) {\n lines.push('', `Abas (${index.tabs.length}), cartões de cada uma sem contar a seção (canvas_read_board com aba=<id> lê uma só):`);\n for (const t of index.tabs) {\n const id = t.id === t.short ? '' : ` · id ${t.id}`;\n lines.push(`- aba=${t.short} · \"${oneLine(t.title, 60)}\" · ${cardsText(t.cards)}${t.locked ? ' · travada' : ''}${id}`);\n }\n if (index.loose) lines.push(`- aba=${AVULSOS_TAB} · ${cardsText(index.loose)} (não moram em aba)`);\n }\n lines.push('', 'Nós (tamanho: medido = como está na tela; gravado = piso, o cartão pode ser maior):');\n if (!nodes.length) lines.push('(vazio)');\n for (const n of nodes) {\n const home = tabbed ? part.home.get(n.id) : undefined;\n lines.push(...nodeLines(n, runs.get(n.id), home === undefined ? undefined : index.label(home)));\n }\n lines.push('', 'Ligações:');\n if (!edges.length) lines.push('(nenhuma)');\n for (const e of edges) {\n let note = '';\n if (scope && !(scope.has(e.source) && scope.has(e.target))) {\n const far = part.home.get(scope.has(e.source) ? e.target : e.source);\n const farInfo = far === undefined ? undefined : index.info(far);\n note =\n far === undefined\n ? ' · externo (o outro lado é um nó arquivado ou ausente)'\n : farInfo\n ? ` · externo (outro lado: aba \"${oneLine(farInfo.title, 40)}\" aba=${farInfo.short})`\n : ` · externo (outro lado: ${AVULSOS_TAB})`;\n }\n lines.push(`- ${e.id}: ${e.source}.${e.sourcePort} → ${e.target}.${e.targetPort}${note}`);\n }\n return lines.join('\\n');\n}\n\n/**\n * `data` de um nó, sem blob. Cada corte fica marcado com o tamanho e o caminho\n * para ler inteiro com `canvas_read_node` (nada some sem aviso).\n */\nexport function nodeDetail(node: BoardNode): string {\n let cuts = 0;\n const strip = (v: Json, depth: number, path: string): Json => {\n if (typeof v === 'string') {\n if (v.startsWith('data:')) return `[data-url ${v.length}b]`;\n if (v.length <= 2000) return v;\n cuts++;\n return `${v.slice(0, 2000)}… [+${v.length - 2000} caracteres: path=${path}]`;\n }\n if (Array.isArray(v)) {\n if (depth > 4) {\n cuts++;\n return `[${v.length} itens, ${JSON.stringify(v).length} caracteres: path=${path}]`;\n }\n const head = v.slice(0, 60).map((x, i) => strip(x, depth + 1, `${path}.${i}`));\n if (v.length <= 60) return head;\n cuts++;\n return [...head, `… +${v.length - 60} itens: path=${path}`];\n }\n if (v && typeof v === 'object') {\n if (depth > 4) {\n cuts++;\n return `{${JSON.stringify(v).length} caracteres: path=${path}}`;\n }\n const out: Record<string, Json> = {};\n for (const [k, x] of Object.entries(v)) {\n const at = path ? `${path}.${k}` : k;\n if (depth === 0 && (k === 'points' || k === 'sequence' || k === 'timeline')) {\n cuts++;\n out[k] = `[omitido: ${JSON.stringify(x).length} caracteres: path=${k}]`;\n } else out[k] = strip(x, depth + 1, at);\n }\n return out;\n }\n return v;\n };\n const json = JSON.stringify(strip(visibleData(node.data), 0, ''));\n const note = cuts ? `\\n(${cuts} corte(s) marcado(s) com path=…: leia inteiro com canvas_read_node e esse path)` : '';\n return `${node.id} · ${nodeKind(node) ?? node.type} · \"${nodeName(node)}\" · ${sizeLabel(node)}\\n${json}${note}`;\n}\n\n/** O studio grava `data.__measured` sozinho ao desenhar o cartão: não é edição de ninguém. */\nconst isMeasureNoise = (op: Record<string, unknown>) =>\n op.type === 'node.set' && typeof op.path === 'string' &&\n (op.path === `data.${MEASURED_KEY}` || op.path.startsWith(`data.${MEASURED_KEY}.`));\n\n/**\n * Envelopes de outras pessoas sem as medidas automáticas da tela, operação por\n * operação (dentro de `batch` também). Envelope que só media some.\n */\nexport function withoutMeasureNoise<T extends { op: unknown }>(envelopes: T[]): T[] {\n const clean = (op: Record<string, unknown>): Record<string, unknown> | null => {\n if (op.type === 'batch' && Array.isArray(op.ops)) {\n const ops = op.ops.map((o) => clean(o as Record<string, unknown>)).filter((o) => o !== null);\n return ops.length ? { ...op, ops } : null;\n }\n return isMeasureNoise(op) ? null : op;\n };\n const out: T[] = [];\n for (const e of envelopes) {\n const op = clean(e.op as Record<string, unknown>);\n if (op) out.push({ ...e, op });\n }\n return out;\n}\n\n/** Quem mudou o quê desde a leitura do agente, a partir do replay. */\nexport function changesSince(envelopes: ConfirmedEnvelope[], doc: BoardDoc): string {\n const count = new Map<string, number>();\n for (const e of envelopes) {\n const key = e.op.type;\n count.set(key, (count.get(key) ?? 0) + 1);\n }\n const parts = [...count].map(([t, n]) => `${n}× ${t}`);\n const names = [...touchedNodes(envelopes)]\n .map((id) => (doc.nodes[id] ? `\"${oneLine(nodeName(doc.nodes[id]), 40)}\"` : `${id} (apagado)`))\n .slice(0, 8);\n return `${envelopes.length} operação(ões) de outras pessoas desde a sua leitura (${parts.join(', ')})` +\n (names.length ? `; nós tocados: ${names.join(', ')}` : '');\n}\n\n/** Ids de nó que um conjunto de operações toca (inclusive as pontas de ligação). */\nexport function touchedNodes(envelopes: { op: unknown }[]): Set<string> {\n const out = new Set<string>();\n const visit = (op: Record<string, unknown>) => {\n if (op.type === 'batch' && Array.isArray(op.ops)) {\n for (const inner of op.ops) visit(inner as Record<string, unknown>);\n return;\n }\n if (typeof op.nodeId === 'string') out.add(op.nodeId);\n const edge = op.edge as { source?: unknown; target?: unknown } | undefined;\n if (edge && typeof edge.source === 'string') out.add(edge.source);\n if (edge && typeof edge.target === 'string') out.add(edge.target);\n };\n for (const e of envelopes) visit(e.op as Record<string, unknown>);\n return out;\n}\n","/**\n * Comentários do Canvas em texto para o agente: onde cada um está (em cima do\n * board lido), quem escreveu, o pedido e as respostas. O \"onde\" é o que o\n * agente usa para achar o nó a editar, e o aviso de alvo sumido é o que o\n * impede de resolver um comentário que não tem mais onde ser aplicado.\n */\nimport type { BoardDoc } from './core';\nimport type { CommentAnchor, CommentThread } from './api';\nimport { nodeKind, nodeName, oneLine } from './summary';\nimport { KINDS } from './catalog';\n\nexport interface Where {\n /** Texto humano: \"no nó \"Narração\" (narration)\". */\n text: string;\n /** Nó ancorado, quando existe no board. */\n nodeId?: string;\n /** O alvo não existe mais (nó apagado ou versão que saiu do histórico). */\n gone?: string;\n}\n\n/** Segundos → mm:ss (ou h:mm:ss). */\nexport function mmss(t: number): string {\n const total = Math.max(0, Math.floor(t));\n const h = Math.floor(total / 3600);\n const m = Math.floor((total % 3600) / 60);\n const s = total % 60;\n const pad = (n: number) => String(n).padStart(2, '0');\n return h ? `${h}:${pad(m)}:${pad(s)}` : `${pad(m)}:${pad(s)}`;\n}\n\nfunction nodeRef(doc: BoardDoc, nodeId: string): string {\n const node = doc.nodes[nodeId];\n const kind = nodeKind(node) ?? node.type;\n return `\"${oneLine(nodeName(node), 60)}\" (${kind}, ${node.id})`;\n}\n\n/**\n * `hashString` de packages/engine/src/hash.ts do beplus-canvas (cyrb53 em 64 bits,\n * hex). Cópia fiel: é com ela que a tela chaveia a versão do Simulado pela URL.\n */\nexport function hashString(text: string): string {\n let h1 = 0xdeadbeef;\n let h2 = 0x41c6ce57;\n for (let i = 0; i < text.length; i += 1) {\n const ch = text.charCodeAt(i);\n h1 = Math.imul(h1 ^ ch, 2654435761);\n h2 = Math.imul(h2 ^ ch, 1597334677);\n }\n h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);\n h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);\n const hex = (n: number) => (n >>> 0).toString(16).padStart(8, '0');\n return hex(h2) + hex(h1);\n}\n\n/**\n * Chave de uma versão como a tela grava no comentário (packages/nodes/src/shared/\n * output-key.ts do beplus-canvas, d544ce7): `resultId`, `id`, `generationId`,\n * senão `url-<hash da URL>`.\n */\nexport function outputKeyOf(entry: Record<string, unknown>): string | null {\n for (const field of [entry.resultId, entry.id, entry.generationId]) {\n if (typeof field === 'string' && field !== '' && field.length <= 128) return field;\n }\n if (typeof entry.url === 'string' && entry.url !== '') return `url-${hashString(entry.url)}`;\n return null;\n}\n\n/**\n * Número da versão (1 = a primeira gerada), ou null se saiu do histórico. Igual ao\n * `versionOf` da tela: `nodeHistory` vai da mais velha para a mais nova;\n * `data.history` dos cartões, da mais nova para a mais velha.\n */\nexport function versionOf(doc: BoardDoc, nodeId: string, outputKey: string): number | null {\n const ids = doc.nodeHistory?.[nodeId];\n if (Array.isArray(ids)) {\n const i = ids.indexOf(outputKey);\n if (i >= 0) return i + 1;\n }\n const history = doc.nodes[nodeId]?.data.history;\n if (Array.isArray(history)) {\n const i = history.findIndex(\n (h) => typeof h === 'object' && h !== null && !Array.isArray(h) && outputKeyOf(h as Record<string, unknown>) === outputKey\n );\n if (i >= 0) return history.length - i;\n }\n return null;\n}\n\nexport function describeAnchor(anchor: CommentAnchor | null | undefined, doc: BoardDoc): Where {\n if (!anchor || anchor.kind === 'point') return { text: 'no board' };\n const exists = !!doc.nodes[anchor.nodeId];\n if (!exists) {\n return { text: `no nó ${anchor.nodeId}`, gone: 'o nó foi apagado' };\n }\n const ref = nodeRef(doc, anchor.nodeId);\n switch (anchor.kind) {\n case 'node':\n return { text: `no nó ${ref}`, nodeId: anchor.nodeId };\n case 'output': {\n const v = versionOf(doc, anchor.nodeId, anchor.outputKey);\n return v === null\n ? { text: `numa versão de ${ref} (${anchor.outputKey})`, nodeId: anchor.nodeId, gone: 'essa versão não está mais no histórico do nó' }\n : { text: `na versão ${v} de ${ref}`, nodeId: anchor.nodeId };\n }\n case 'timecode': {\n const node = doc.nodes[anchor.nodeId];\n const kind = nodeKind(node);\n const t = mmss(Number(anchor.t) || 0);\n if (kind === 'montage') {\n const name = nodeName(node);\n const title = name === KINDS.montage.title ? '' : ` \"${oneLine(name, 60)}\"`;\n return { text: `em ${t} da Montagem${title} (${node.id})`, nodeId: anchor.nodeId };\n }\n return { text: `em ${t} de ${ref}`, nodeId: anchor.nodeId };\n }\n default:\n return { text: 'no board' };\n }\n}\n\nfunction who(c: Named): string {\n return c.author?.name?.trim() || 'alguém';\n}\n\nfunction reactionsText(r: unknown): string {\n if (Array.isArray(r)) {\n const parts = r\n .map((x) => {\n const rec = (x ?? {}) as Record<string, unknown>;\n const emoji = typeof rec.emoji === 'string' ? rec.emoji : null;\n const n = typeof rec.count === 'number' ? rec.count : Array.isArray(rec.userIds) ? rec.userIds.length : Array.isArray(rec.users) ? rec.users.length : 1;\n return emoji ? `${emoji}${n > 1 ? `×${n}` : ''}` : null;\n })\n .filter(Boolean);\n return parts.join(' ');\n }\n if (r && typeof r === 'object') {\n return Object.entries(r as Record<string, unknown>)\n .map(([emoji, v]) => {\n const n = Array.isArray(v) ? v.length : typeof v === 'number' ? v : 1;\n return `${emoji}${n > 1 ? `×${n}` : ''}`;\n })\n .join(' ');\n }\n return '';\n}\n\nconst MAX_REPLIES = 5;\n\ntype Named = { author?: { name?: string | null } | null };\n\n/** Uma thread em poucas linhas: id, onde, autor, pedido, respostas. */\nexport function threadLines(t: CommentThread, doc: BoardDoc): string[] {\n const where = describeAnchor(t.anchor, doc);\n const state = t.resolvedAt ? ' · RESOLVIDO' : '';\n const reacts = reactionsText(t.reactions);\n const lines = t.deleted\n ? [`- ${t.id} · ${where.text}${state}`, ' (comentário raiz apagado: não dá para responder nem resolver)']\n : [`- ${t.id} · ${where.text} · ${who(t)}${state}${reacts ? ` · ${reacts}` : ''}`, ` pedido: ${oneLine(t.body ?? '', 400)}`];\n if (where.gone && !t.deleted) lines.push(` ⚠ ALVO SUMIU: ${where.gone}. Responda com pergunta, não resolva.`);\n const replies = Array.isArray(t.replies) ? t.replies : [];\n for (const r of replies.slice(-MAX_REPLIES)) {\n lines.push(r.deleted ? ' ↳ (resposta apagada)' : ` ↳ ${who(r)}: ${oneLine(r.body ?? '', 140)}`);\n }\n if (replies.length > MAX_REPLIES) lines.splice(lines.length - MAX_REPLIES, 0, ` ↳ … ${replies.length - MAX_REPLIES} resposta(s) antes`);\n return lines;\n}\n\nexport function commentsSummary(threads: CommentThread[], doc: BoardDoc, status: string): string {\n const label = status === 'resolved' ? 'resolvido(s)' : status === 'all' ? 'no total' : 'aberto(s)';\n if (!threads.length) return `Nenhum comentário ${label === 'no total' ? 'no board' : label}.`;\n const out = [`${threads.length} comentário(s) ${label}:`];\n for (const t of threads) out.push(...threadLines(t, doc));\n return out.join('\\n');\n}\n","/**\n * Comentários do Canvas (rotas `/boards/:id/comments` do academy-backend).\n *\n * Fluxo \"aplica os comentários\", igual ao `pdesk comments` do B+ Notas: listar\n * os abertos com o lugar em texto humano, aplicar a edição pelas outras\n * ferramentas canvas_* e fechar cada um dizendo o que foi feito. Resolver sem\n * dizer o que fez não existe: a resposta vai antes, no mesmo passo.\n */\nimport { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { ApiError } from '../api/errors';\nimport type { ToolResult } from '../format';\nimport { CanvasToolError, type CanvasApi, type CommentAnchor, type CommentThread } from '../canvas/api';\nimport { commentsSummary, describeAnchor } from '../canvas/comments';\nimport { oneLine } from '../canvas/summary';\n\nconst boardId = z.string().uuid().describe('Id (uuid) do board.');\nconst commentId = z.string().min(1).max(128).describe('Id do comentário raiz, como sai em canvas_list_comments.');\nconst body = z.string().trim().min(1).max(4000);\nconst mentions = z.array(z.string().uuid()).max(50).optional().describe('userIds a marcar (opcional; quem não é membro é ignorado).');\n\ntype Run = (fn: () => Promise<string>) => Promise<ToolResult>;\n\nexport function registerCanvasCommentTools(server: McpServer, api: CanvasApi, run: Run): void {\n /** Erros das rotas de comentário em PT-BR, com o que fazer. */\n async function onComment<T>(fn: () => Promise<T>): Promise<T> {\n try {\n return await fn();\n } catch (e) {\n if (!(e instanceof ApiError)) throw e;\n // 404 numa rota de comentário: comentário apagado/inexistente (ou board sem acesso).\n if (e.httpStatus === 404) {\n throw new CanvasToolError('Comentário (ou board) não encontrado ou apagado. Liste de novo com canvas_list_comments.');\n }\n if (e.httpStatus === 400) throw new CanvasToolError(`O servidor recusou o comentário: ${e.message}.`);\n if (e.httpStatus === 403 && (!api.usesPat || /ialab:/.test(e.message))) {\n throw new CanvasToolError(\n 'O login pelo navegador deste MCP não tem a permissão ialab:spend, que toda escrita de comentário exige. ' +\n 'Rode `beplus-mcp login` de novo e autorize a permissão de gastar/editar.'\n );\n }\n if (e.httpStatus === 403) throw new CanvasToolError(`Sem permissão: ${e.message}.`);\n if (e.httpStatus === 429) {\n throw new CanvasToolError(\n 'Limite de escrita em comentários (60 por minuto por pessoa) mesmo depois de esperar. ' +\n 'Pare o lote, diga à pessoa quais já foram fechados e siga daqui a 1 minuto a partir do próximo.'\n );\n }\n throw e;\n }\n }\n\n /** O POST devolve a thread da raiz: a resposta que acabou de entrar é a última de `replies`. */\n const newReplyId = (thread: CommentThread | undefined) => {\n const last = thread?.replies?.at(-1);\n return last?.id ?? '?';\n };\n\n // ── canvas_list_comments ──────────────────────────────────────────────────\n server.registerTool(\n 'canvas_list_comments',\n {\n title: 'Canvas: listar comentários',\n description:\n 'Lista os comentários de um board (padrão: abertos): id, onde está (nó, versão, minutagem da Montagem ou board), ' +\n 'autor, pedido e respostas. Avisa quando o alvo sumiu. Só leitura.',\n inputSchema: {\n board_id: boardId,\n status: z.enum(['open', 'resolved', 'all']).optional().describe('open (padrão), resolved ou all.'),\n },\n annotations: { readOnlyHint: true, openWorldHint: false },\n },\n async ({ board_id, status }) =>\n run(async () => {\n const st = status ?? 'open';\n const [snap, threads] = await Promise.all([api.snapshot(board_id), api.listComments(board_id, st)]);\n const text = commentsSummary(threads, snap.doc, st);\n const open = threads.some((t) => !t.resolvedAt);\n return open\n ? `${text}\\n\\nPara aplicar: leia o nó com canvas_read_board (node_ids), edite pelas canvas_* e feche com canvas_resolve_comment dizendo o que fez.`\n : text;\n })\n );\n\n // ── canvas_reply_comment ──────────────────────────────────────────────────\n server.registerTool(\n 'canvas_reply_comment',\n {\n title: 'Canvas: responder comentário',\n description: 'Responde numa thread de comentário sem resolver. Use para perguntar quando o pedido é ambíguo ou o alvo sumiu.',\n inputSchema: { board_id: boardId, comment_id: commentId, body, mentions },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ board_id, comment_id, body: text, mentions: m }) =>\n run(async () => {\n const thread = await onComment(() =>\n api.createComment(board_id, { body: text, parentId: comment_id, ...(m?.length ? { mentions: m } : {}) })\n );\n const open = thread?.resolvedAt ? 'A thread está resolvida; reabra com canvas_reopen_comment se precisar.' : 'A thread segue aberta.';\n return `✅ Resposta ${newReplyId(thread)} em ${comment_id}: \"${oneLine(text, 120)}\". ${open}`;\n })\n );\n\n // ── canvas_resolve_comment ────────────────────────────────────────────────\n server.registerTool(\n 'canvas_resolve_comment',\n {\n title: 'Canvas: resolver comentário',\n description:\n 'Fecha um comentário depois de aplicar o ajuste. done é obrigatório: uma frase curta dizendo o que foi feito ' +\n '(vira resposta na thread antes de resolver). Não resolva pedido ambíguo nem com alvo sumido: responda com pergunta.',\n inputSchema: {\n board_id: boardId,\n comment_id: commentId,\n done: z.string().trim().min(3).max(500).describe('O que foi feito, ex.: \"troquei a fala do b2 e encurtei o b3\".'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ board_id, comment_id, done }) =>\n run(async () => {\n const thread = await onComment(() => api.createComment(board_id, { body: done, parentId: comment_id }));\n const replyId = newReplyId(thread);\n try {\n await onComment(() => api.resolveComment(board_id, comment_id));\n } catch (e) {\n const why = e instanceof Error ? e.message : String(e);\n throw new CanvasToolError(\n `A resposta \"${oneLine(done, 80)}\" (${replyId}) foi postada em ${comment_id}, mas resolver falhou: ${why} ` +\n 'Não repita canvas_resolve_comment (postaria a resposta de novo): avise a pessoa para resolver no Canvas.'\n );\n }\n return `✅ Resolvido ${comment_id}: \"${oneLine(done, 120)}\" (resposta ${replyId}).`;\n })\n );\n\n // ── canvas_reopen_comment ─────────────────────────────────────────────────\n server.registerTool(\n 'canvas_reopen_comment',\n {\n title: 'Canvas: reabrir comentário',\n description: 'Reabre um comentário resolvido. why (opcional) vira resposta na thread explicando o motivo.',\n inputSchema: { board_id: boardId, comment_id: commentId, why: z.string().trim().min(1).max(1000).optional() },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async ({ board_id, comment_id, why }) =>\n run(async () => {\n await onComment(() => api.reopenComment(board_id, comment_id));\n if (why) await onComment(() => api.createComment(board_id, { body: why, parentId: comment_id }));\n return `✅ Reaberto ${comment_id}${why ? ` com a resposta \"${oneLine(why, 120)}\"` : ''}.`;\n })\n );\n\n // ── canvas_comment ────────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_comment',\n {\n title: 'Canvas: comentar',\n description:\n 'Cria um comentário novo (raiz), ancorado para aparecer no lugar certo do Canvas. Use para deixar uma pergunta ' +\n 'ou observação para a pessoa. Âncora: node_id (no nó); node_id + output_key (numa versão gerada); ' +\n 'node_id + t em segundos (minutagem da Montagem ou do vídeo); x,y (ponto do board); nada = acima do conteúdo do board.',\n inputSchema: {\n board_id: boardId,\n body,\n node_id: z.string().min(1).max(64).optional(),\n output_key: z.string().min(1).max(128).optional().describe('Id da versão (resultado) do nó.'),\n t: z.number().finite().min(0).optional().describe('Segundos desde o início.'),\n x: z.number().finite().optional(),\n y: z.number().finite().optional(),\n mentions,\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async (args) =>\n run(async () => {\n if (!args.node_id && (args.output_key !== undefined || args.t !== undefined)) {\n throw new CanvasToolError('output_key e t precisam de node_id.');\n }\n if (args.output_key !== undefined && args.t !== undefined) throw new CanvasToolError('Use output_key ou t, não os dois.');\n if ((args.x === undefined) !== (args.y === undefined)) throw new CanvasToolError('Informe x e y juntos.');\n const snap = await api.snapshot(args.board_id);\n let anchor: CommentAnchor;\n if (args.node_id) {\n if (!snap.doc.nodes[args.node_id]) {\n throw new CanvasToolError(`Nó ${args.node_id} não existe no board. Releia com canvas_read_board.`);\n }\n if (args.output_key !== undefined) anchor = { kind: 'output', nodeId: args.node_id, outputKey: args.output_key };\n else if (args.t !== undefined) anchor = { kind: 'timecode', nodeId: args.node_id, t: args.t };\n else anchor = { kind: 'node', nodeId: args.node_id, dx: 0, dy: 0 };\n } else if (args.x !== undefined && args.y !== undefined) {\n anchor = { kind: 'point', x: args.x, y: args.y };\n } else {\n // A raiz sempre tem anchor no servidor: sem lugar pedido, o pino fica acima do conteúdo.\n const nodes = Object.values(snap.doc.nodes);\n anchor = nodes.length\n ? { kind: 'point', x: Math.min(...nodes.map((n) => n.position.x)), y: Math.min(...nodes.map((n) => n.position.y)) - 80 }\n : { kind: 'point', x: 0, y: 0 };\n }\n // Raiz: a thread devolvida é o próprio comentário novo.\n const created = await onComment(() =>\n api.createComment(args.board_id, {\n body: args.body,\n anchor,\n ...(args.mentions?.length ? { mentions: args.mentions } : {}),\n })\n );\n const where = describeAnchor(anchor, snap.doc).text;\n const at = anchor.kind === 'point' && args.x !== undefined ? ` em (${args.x}, ${args.y})` : '';\n return `✅ Comentário ${created?.id ?? ''} criado ${where}${at}.`.replace(' ', ' ');\n })\n );\n}\n","/**\n * O parâmetro `aba` das ferramentas canvas_* (AB9 Fase C): o id da seção da aba, ou o começo\n * único dele (o `aba=…` que a leitura mostra). Cada ferramenta diz o que a aba faz nela; o\n * detalhe fica aqui, na descrição do parâmetro, para a descrição da ferramenta não passar do\n * teto de 2 KB que o Claude Code corta em silêncio.\n */\nimport { z } from 'zod';\n\nexport const abaArg = (what: string) => z.string().trim().min(1).max(128).optional().describe(what);\n\nexport const ABA_ADD_NODE =\n 'Aba onde o cartão mora: o id da seção da aba ou o começo único dele (o aba=… da leitura). Grava data.abaId e, sem ' +\n 'position, o cartão nasce no fim do conteúdo da aba (abaixo do cartão mais baixo, alinhado à esquerda do conteúdo). ' +\n 'data.abaId vale como aba; se os dois divergirem, recusa. Aba que não existe ou que não é aba é recusada.';\n\nexport const ABA_READ_BOARD =\n 'Lê só uma aba: a seção, quem mora nela e os fios que tocam nesses nós (o fio que vai a outra aba vem marcado como ' +\n 'externo). Aceita o id da seção, o começo único dele (o aba=… da leitura) ou \"avulsos\". Sem aba, lê o board inteiro.';\n\nexport const ABA_UPLOAD_MEDIA =\n 'Aba do nó Mídia novo (id da seção da aba ou o começo único dele): grava data.abaId e põe o nó no fim do conteúdo da ' +\n 'aba, em vez de cair à direita de tudo, em Avulsos. Só vale com board_id e sem node_id (nó que já existe não muda de aba).';\n\nexport const ABA_ARRANGE_ROWS =\n 'Aba onde conferir a sobreposição (id da seção ou o começo único dele): só os cartões dela contam como \"de fora\". ' +\n 'Sem aba, vale a aba dos nós arrumados, quando é uma só; senão, o board inteiro. Não muda a aba de nenhum nó.';\n","/**\n * `canvas_arrange_rows`: arruma áreas de revisão do board em linhas, com o\n * tamanho que o cartão tem na tela (fatia MCP-L1).\n *\n * Pedido do Marco (27/09, board do Ladeira EP1): a IA levou 3 voltas numa área\n * de revisão simples porque só enxergava o `size` gravado (piso) e afirmou\n * \"nada se sobrepõe\" com tudo encavalado. Aqui o arranjo usa a medida da tela\n * (`data.__measured`), estima com folga quando a largura muda, grava só posição e\n * caixa num passo (`layout_only`) e devolve as caixas, as sobreposições calculadas\n * e quais nós ainda não tinham medida.\n */\nimport { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { ToolResult } from '../format';\nimport { CanvasToolError, type BoardSnapshot, type CanvasApi } from '../canvas/api';\nimport { KIND_FIELD } from '../canvas/catalog';\nimport { setValue, type BoardDoc, type Op } from '../canvas/core';\nimport {\n DEFAULT_GAP,\n arrangeRows,\n readMeasured,\n type Arrangement,\n type Role,\n type RowSpec,\n type Widths,\n} from '../canvas/layout';\nimport { nodeName, oneLine } from '../canvas/summary';\nimport { hasTabs, homeTabOf, membersOfTab, resolveTab, tabIndex } from '../canvas/tab-scope';\nimport { AVULSOS_TAB } from '../canvas/tabs';\nimport { ABA_ARRANGE_ROWS, abaArg } from './canvas-aba-arg';\n\ntype Edit = (\n id: string,\n build: (doc: BoardDoc, snap: BoardSnapshot) => Promise<{ ops: Op[]; done: string; targets: string[] }>,\n opts?: { split?: boolean; layoutOnly?: boolean }\n) => Promise<string>;\n\nexport interface CanvasLayoutDeps {\n api: CanvasApi;\n run: (fn: () => Promise<string>) => Promise<ToolResult>;\n edit: Edit;\n}\n\nconst nodeIdArg = z.string().min(1).max(128);\nconst width = z.number().finite().min(40).max(20_000);\n\nconst ROLE_TEXT: Record<Role, string> = {\n title: 'título', prompt: 'prompt', image: 'imagem', video: 'vídeo', reference: 'ref', frame: 'frame', other: 'outro',\n};\n\nfunction checkRows(doc: BoardDoc, rows: RowSpec[]): void {\n const seen = new Set<string>();\n for (const [i, row] of rows.entries()) {\n const ids = [...(row.title ? [row.title] : []), ...row.left, ...row.right];\n if (!ids.length) throw new CanvasToolError(`rows[${i}] está vazia: informe title, left ou right.`);\n for (const id of ids) {\n const node = doc.nodes[id];\n if (!node) throw new CanvasToolError(`rows[${i}]: o nó ${id} não existe no board. Releia com canvas_read_board.`);\n if (node.data[KIND_FIELD] === 'section') throw new CanvasToolError(`rows[${i}]: ${id} é uma Seção (fundo), não entra no arranjo.`);\n if (seen.has(id)) throw new CanvasToolError(`O nó ${id} aparece duas vezes nas linhas: cada nó entra uma vez só.`);\n seen.add(id);\n }\n }\n}\n\n/** Posição e piso de largura que mudam: é tudo o que o arranjo grava. */\nfunction layoutOps(doc: BoardDoc, a: Arrangement): Op[] {\n const ops: Op[] = [];\n for (const p of a.placed) {\n const node = doc.nodes[p.id];\n const set = (path: string, now: number, next: number) => {\n if (now !== next) ops.push({ type: 'node.set', nodeId: p.id, path, value: setValue(next) });\n };\n set('position.x', node.position.x, p.x);\n set('position.y', node.position.y, p.y);\n set('size.w', node.size.w, p.floorW);\n }\n return ops;\n}\n\n/**\n * AB9 · A aba em que a sobreposição se confere. Com `aba`, é ela. Sem `aba`, a aba dos nós\n * arrumados, quando é uma só (de verdade: Avulsos não é aba); nós de abas diferentes, ou\n * soltos, comparam com o board inteiro, como antes. Board sem aba: o board inteiro.\n */\ninterface Scope {\n ids: Set<string>;\n title: string;\n short: string;\n /** Nós arrumados que moram em outra aba que não a pedida: o arranjo não troca a aba de ninguém. */\n foreign: string[];\n}\n\nfunction scopeFor(doc: BoardDoc, rows: RowSpec[], aba: string | undefined): Scope | undefined {\n const tab = aba ? resolveTab(doc, aba) : undefined;\n if (!hasTabs(doc)) return undefined;\n const arranged = rows.flatMap((r) => [...(r.title ? [r.title] : []), ...r.left, ...r.right]);\n const homes = new Set(arranged.map((id) => homeTabOf(doc, id)));\n const only = homes.size === 1 ? [...homes][0] : null;\n const chosen = tab ?? (only && only !== AVULSOS_TAB ? only : undefined);\n if (chosen === undefined) return undefined;\n const info = tabIndex(doc).info(chosen)!;\n return {\n ids: membersOfTab(doc, chosen),\n title: info.title,\n short: info.short,\n foreign: tab === undefined ? [] : arranged.filter((id) => homeTabOf(doc, id) !== tab),\n };\n}\n\nfunction report(doc: BoardDoc, a: Arrangement, scope?: Scope): string {\n const name = (id: string) => `\"${oneLine(nodeName(doc.nodes[id]), 36)}\"`;\n const lines: string[] = [];\n\n // Primeiro o que ainda pode crescer: é isso que decide se dá para confiar no arranjo.\n const unmeasured = a.placed.filter((p) => p.source === 'gravado');\n const estimated = a.placed.filter((p) => p.source === 'medido' && p.estimated);\n if (unmeasured.length || estimated.length) {\n lines.push('A conferir (a altura usada pode não ser a da tela):');\n if (unmeasured.length) {\n lines.push(\n '- sem medida da tela (usei o gravado): o cartão está no piso, e aí o gravado é o da tela, ou o board não abriu ' +\n `desde a última mudança, e aí pode ser maior: ${unmeasured.map((p) => name(p.id)).join(', ')}`\n );\n }\n if (estimated.length) {\n const how = estimated.map((p) => `${name(p.id)} (medido com ${Math.round(readMeasured(doc.nodes[p.id])!.w)} de largura)`);\n lines.push(`- altura estimada com folga porque a largura mudou: ${how.join(', ')}`);\n }\n lines.push(\n 'Se o board não abriu desde a última mudança, abra (o Canvas mede o cartão que passa do piso) e rode o mesmo ' +\n 'canvas_arrange_rows de novo para fechar sobra ou encosto.'\n );\n } else {\n lines.push('Todos os nós arrumados têm medida da tela.');\n }\n\n const pairs = (list: [string, string][]) => list.map(([x, y]) => `${name(x)} × ${name(y)}`).join('; ');\n const where = scope ? ` (só na aba \"${oneLine(scope.title, 40)}\" aba=${scope.short})` : '';\n lines.push(\n a.inner.length || a.outer.length\n ? `Sobreposições com os tamanhos usados${where}: ${pairs([...a.inner, ...a.outer])}.`\n : `Sobreposições com os tamanhos usados${where}: nenhuma.`\n );\n if (scope?.foreign.length) {\n const n = scope.foreign.length;\n const names = scope.foreign.slice(0, 5).map(name).join(', ') + (n > 5 ? ` e mais ${n - 5}` : '');\n lines.push(\n `Atenção: ${names} ${n === 1 ? 'mora' : 'moram'} em outra aba que não a pedida; o arranjo grava só posição e ` +\n 'não troca a aba de ninguém (data.abaId).'\n );\n }\n\n lines.push('Caixas ([papel] id \"nome\" @(x,y) largura×altura usada, origem da altura):');\n const rows = new Map<number, string[]>();\n for (const p of a.placed) {\n const item = `[${ROLE_TEXT[p.role]}] ${p.id} ${name(p.id)} @(${p.x},${p.y}) ${p.w}×${p.h} ${p.source}${p.estimated ? ' estimado' : ''}`;\n rows.set(p.row, [...(rows.get(p.row) ?? []), item]);\n }\n for (const [r, items] of rows) lines.push(`- linha ${r + 1}: ${items.join(' · ')}`);\n\n const resized = a.placed.filter((p) => p.floorW !== doc.nodes[p.id].size.w);\n if (resized.length) lines.push(`Largura (size.w): ${resized.map((p) => `${name(p.id)} ${doc.nodes[p.id].size.w}→${p.floorW}`).join(', ')}.`);\n\n const titles = a.placed.filter((p) => p.role === 'title' && doc.nodes[p.id].data[KIND_FIELD] === 'label' && doc.nodes[p.id].data.size !== 'titulo');\n if (titles.length) {\n lines.push(\n `Título sem o texto de título: ${titles.map((p) => name(p.id)).join(', ')}. ` +\n 'Troque com canvas_update_node size:\"titulo\" (o arranjo só grava posição e tamanho).'\n );\n }\n return lines.join('\\n');\n}\n\nexport function registerCanvasLayoutTools(server: McpServer, deps: CanvasLayoutDeps): void {\n const { api, run, edit } = deps;\n\n server.registerTool(\n 'canvas_arrange_rows',\n {\n title: 'Canvas: arrumar em linhas',\n description:\n 'Arruma nós em linhas, uma por versão (revisão de imagem) ou por take (animação), de cima para baixo a partir de ' +\n 'origin: title em cima; à esquerda a coluna left (prompt; mídia/imagem que alimenta o prompt ou o gerador, como ' +\n 'a referência e o frame de entrada, fica alinhada à direita embaixo dele); à direita a coluna right (gerador) com ' +\n 'o topo no do prompt. Qualquer tipo entra em qualquer coluna. Usa o tamanho medido da tela (ou o gravado, ' +\n 'avisando) e põe a largura pelo tipo real do nó: prompt 1024, gerador de imagem e de vídeo na largura do aspect_ratio do dado, na altura de criação 516 ' +\n '(16:9 917, 9:16 290, 1:1 516), referência (mídia) 320, frame (mídia/imagem ligada na porta frame do vídeo) 320, título 1024. Grava só posição e tamanho ' +\n 'num passo, sem pedir releitura. Devolve as caixas, as sobreposições com os tamanhos usados e os nós sem medida ' +\n '(a altura deles pode crescer quando o board abrir: rode de novo depois). Se a área encostar em outro nó da ' +\n 'mesma aba (aba, ou a dos nós arrumados), não grava nada e sugere uma origem livre. dry_run: true só calcula.',\n inputSchema: {\n board_id: z.string().uuid(),\n origin: z.object({ x: z.number().finite(), y: z.number().finite() }).describe('Canto de cima à esquerda da área.'),\n aba: abaArg(ABA_ARRANGE_ROWS),\n rows: z\n .array(\n z\n .object({\n title: nodeIdArg.optional().describe('Nó do título da linha (Texto livre).'),\n left: z.array(nodeIdArg).max(20).optional().describe('Coluna da esquerda, de cima para baixo: prompt, depois a referência.'),\n right: z.array(nodeIdArg).max(20).optional().describe('Coluna da direita: gerador(es).'),\n })\n .strict()\n )\n .min(1)\n .max(50),\n gap: z.number().finite().min(0).max(1000).optional().describe(`Espaço entre cartões (padrão ${DEFAULT_GAP}); o dobro entre linhas.`),\n widths: z\n .object({\n prompt: width.optional(),\n image: width.optional(),\n video: width.optional(),\n generator: width.optional().describe('Atalho: image e video juntos.'),\n reference: width.optional(),\n frame: width.optional(),\n title: width.optional(),\n })\n .strict()\n .optional()\n .describe('Troca larguras da convenção (prompt 1024, reference 320, frame 320, title 1024). image e video, sem troca, seguem o aspect_ratio do dado na altura de criação 516 (16:9 917, 9:16 290, 1:1 516); com número, vale o número.'),\n dry_run: z.boolean().optional().describe('true: só calcula e mostra, sem gravar.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: false },\n },\n async (args) =>\n run(async () => {\n const rows: RowSpec[] = args.rows.map((r) => ({ title: r.title, left: r.left ?? [], right: r.right ?? [] }));\n const { generator, ...own } = args.widths ?? {};\n const widths: Widths = { ...(generator ? { image: generator, video: generator } : {}), ...own };\n const gap = args.gap ?? DEFAULT_GAP;\n const plan = (doc: BoardDoc) => {\n checkRows(doc, rows);\n const scope = scopeFor(doc, rows, args.aba);\n const a = arrangeRows(doc, rows, args.origin, gap, widths, scope?.ids);\n return { a, scoped: scope !== undefined, ops: layoutOps(doc, a), text: report(doc, a, scope) };\n };\n const count = (ops: Op[]) => new Set(ops.map((o) => (o.type === 'node.set' ? o.nodeId : ''))).size;\n const blocked = (a: Arrangement, scoped: boolean) =>\n `A área encosta em nós que não estão no arranjo. Nada foi gravado. Origem livre sugerida: ` +\n `{\"x\":${a.freeOrigin.x},\"y\":${a.freeOrigin.y}} (abaixo de tudo${scoped ? ' da aba' : ''} nessa faixa), ou tire esses nós do caminho.`;\n\n if (args.dry_run) {\n const { a, scoped, ops, text } = plan((await api.snapshot(args.board_id)).doc);\n const head = `Prévia, nada gravado: ${ops.length ? `${count(ops)} nó(s) mudariam de lugar ou largura` : 'tudo já está assim'}.`;\n return [head, ...(a.outer.length ? [blocked(a, scoped)] : []), text].join('\\n');\n }\n\n let text = '';\n const done = await edit(\n args.board_id,\n async (doc) => {\n const p = plan(doc);\n text = p.text;\n if (p.a.outer.length) throw new CanvasToolError(`${blocked(p.a, p.scoped)}\\n${p.text}`);\n return {\n ops: p.ops,\n targets: [],\n done: `Arranjo: ${rows.length} linha(s), ${p.a.placed.length} nó(s), ${count(p.ops)} mudaram de lugar ou largura`,\n };\n },\n { split: true, layoutOnly: true }\n );\n return `${done}\\n${text}`;\n })\n );\n}\n","/**\n * Arquivo para o board do Canvas: sobe pela rota de arquivos da BePlus e monta\n * o que o Canvas guarda, no formato dele (beplus-canvas, set/2026):\n *\n * - item do nó Mídia (`MediaItem` de packages/nodes/src/media/files.ts):\n * `{ assetId, name, mime, size, width?, height?, duration?, remoteUrl }`;\n * - `asset` de um clipe da sequência (`AssetRef` de media/assets.ts):\n * `{ assetId, name, mime, size, origin }`;\n * - `libraryItemId` do clipe: `<nó>|<tipo>:<generationId>:<url>` (`mediaIdentity`\n * em apps/studio/src/editor/project-media.ts). Item de Mídia não tem\n * generationId, então fica `<nó Mídia>|video::<url>`. É daí que o editor tira\n * a URL para religar o arquivo em outro navegador (`urlFromLibraryItemId` em\n * relink-assets.ts, que só lê image, video, audio e text).\n */\nimport { randomUUID } from 'node:crypto';\nimport { basename, extname } from 'node:path';\nimport type { Config } from '../config';\nimport { BEPLUS_STORAGE_HOST, isRemoteRef, loadLocal, loadRemote, mb, uploadBytes, type LoadedFile } from '../media';\nimport { ffprobeFile, probeBuffer, type MediaMeta } from '../probe';\nimport type { Json } from './core';\n\nexport type MediaKind = 'image' | 'video' | 'audio' | 'file';\n\n/** Mesma regra do `kindOfMime` do Canvas. */\nexport function kindOfMime(mime: string): MediaKind {\n if (mime.startsWith('image/')) return 'image';\n if (mime.startsWith('video/')) return 'video';\n if (mime.startsWith('audio/')) return 'audio';\n return 'file';\n}\n\nexport interface UploadedMedia {\n url: string;\n name: string;\n mime: string;\n bytes: number;\n kind: MediaKind;\n meta: MediaMeta;\n /** De onde saíram duração e dimensões. */\n measuredBy: 'cabeçalho' | 'ffprobe' | 'não medido';\n /** A URL já era do armazenamento da BePlus: não subiu de novo. */\n reused: boolean;\n assetId: string;\n}\n\n/** Nome dado pela pessoa, com a extensão do arquivo (é ela que a rota confere). */\nfunction withExtension(name: string | undefined, file: LoadedFile): string {\n if (!name?.trim()) return file.name;\n const ext = extname(file.name);\n const clean = basename(name.trim());\n return ext && extname(clean).toLowerCase() !== ext.toLowerCase() ? `${clean}${ext}` : clean;\n}\n\nexport async function uploadMedia(cfg: Config, source: string, name?: string): Promise<UploadedMedia> {\n const remote = isRemoteRef(source);\n const loaded = remote ? await loadRemote(source) : await loadLocal(source);\n const file = { ...loaded, name: withExtension(name, loaded) };\n const reused = remote && new URL(source).host === BEPLUS_STORAGE_HOST;\n const url = reused ? source : await uploadBytes(cfg, file);\n\n // Medir nunca bloqueia o upload: cabeçalho primeiro, ffprobe (se houver) depois.\n const kind = kindOfMime(file.mime);\n let meta: MediaMeta | null = null;\n let measuredBy: UploadedMedia['measuredBy'] = 'não medido';\n if (kind !== 'file') {\n meta = probeBuffer(file.buf, file.mime);\n if (meta) measuredBy = 'cabeçalho';\n else {\n meta = await ffprobeFile(file.localPath ?? url);\n if (meta) measuredBy = 'ffprobe';\n }\n }\n return {\n url,\n name: file.name,\n mime: file.mime,\n bytes: file.buf.byteLength,\n kind,\n meta: meta ?? {},\n measuredBy,\n reused,\n assetId: `asset_${randomUUID()}`,\n };\n}\n\n/** Item do nó Mídia (`data.items[]`). Só entra o que foi medido. */\nexport function mediaItem(u: UploadedMedia): Record<string, Json> {\n const item: Record<string, Json> = { assetId: u.assetId, name: u.name, mime: u.mime, size: u.bytes };\n if (u.meta.width !== undefined) item.width = u.meta.width;\n if (u.meta.height !== undefined) item.height = u.meta.height;\n if (u.meta.duration !== undefined) item.duration = u.meta.duration;\n item.remoteUrl = u.url;\n return item;\n}\n\n/** `asset` de um clipe da sequência da Montagem. */\nexport function sequenceAsset(u: UploadedMedia): Record<string, Json> {\n return { assetId: u.assetId, name: u.name, mime: u.mime, size: u.bytes, origin: 'imported' };\n}\n\n/** `<nó Mídia>|<tipo>::<url>`; sem nó, devolve o molde com o lugar do id marcado. */\nexport function libraryItemId(u: UploadedMedia, mediaNodeId?: string): string {\n return `${mediaNodeId ?? '<id do nó Mídia>'}|${u.kind}::${u.url}`;\n}\n\n/** Linha humana: tipo, peso, duração/dimensão e de onde saíram. */\nexport function describeUpload(u: UploadedMedia): string {\n const parts = [u.mime, `${mb(u.bytes)} MB`];\n if (u.meta.width && u.meta.height) parts.push(`${u.meta.width}×${u.meta.height}`);\n if (u.meta.duration !== undefined) parts.push(`${String(u.meta.duration).replace('.', ',')} s`);\n if (u.meta.fps) parts.push(`${String(u.meta.fps).replace('.', ',')} fps`);\n const measured =\n u.kind === 'file'\n ? ''\n : u.measuredBy === 'não medido'\n ? ' (duração e dimensões não medidas: formato sem leitor de cabeçalho e sem ffprobe no PATH)'\n : ` (medido pelo ${u.measuredBy})`;\n return `\"${u.name}\" · ${parts.join(' · ')}${measured}`;\n}\n","/**\n * `canvas_upload_media`: arquivo local ou URL para o Canvas online.\n *\n * O agente do Luiz (vinheta, 26/09) subia planos e faixas chamando a rota de\n * arquivos por fora, com o token do MCP, e montava na mão o item da Mídia e o\n * `libraryItemId` da sequência. Aqui é um passo só: sobe, mede e devolve o item\n * pronto; com `board_id`, já grava no nó Mídia (existente ou novo).\n */\nimport { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Config } from '../config';\nimport { ApiError, apiErrorToUserMessage } from '../api/errors';\nimport type { ToolResult } from '../format';\nimport { CanvasToolError, type BoardSnapshot, type CanvasApi } from '../canvas/api';\nimport { KINDS, KIND_FIELD, WORKFLOW_NODE_TYPE } from '../canvas/catalog';\nimport { makeNode, setValue, type BoardDoc, type BoardNode, type Json, type Op } from '../canvas/core';\nimport { nodeKind, nodeName, oneLine } from '../canvas/summary';\nimport { placementNote, resolveTab } from '../canvas/tab-scope';\nimport { TAB_ID_FIELD } from '../canvas/tabs';\nimport { describeUpload, libraryItemId, mediaItem, sequenceAsset, uploadMedia, type UploadedMedia } from '../canvas/upload';\nimport { ABA_UPLOAD_MEDIA, abaArg } from './canvas-aba-arg';\n\n/** Teto de itens do nó Mídia no Canvas (`DEFAULT_MEDIA_LIMITS.maxItems`): a lista viaja numa operação de 64 KB. */\nconst MAX_MEDIA_ITEMS = 60;\n\ntype Edit = (\n id: string,\n build: (doc: BoardDoc, snap: BoardSnapshot) => Promise<{ ops: Op[]; done: string; targets: string[] }>\n) => Promise<string>;\n\nexport interface CanvasMediaDeps {\n api: CanvasApi;\n cfg: Config;\n run: (fn: () => Promise<string>) => Promise<ToolResult>;\n edit: Edit;\n seen: Map<string, number>;\n placeFor: (\n doc: BoardDoc,\n size: { w: number; h: number },\n near?: BoardNode,\n side?: 'right' | 'left',\n tab?: string\n ) => { x: number; y: number };\n}\n\nconst itemsOf = (node: BoardNode): Json[] => (Array.isArray(node.data.items) ? node.data.items : []);\n\n/**\n * Regra de soltar arquivo do Canvas (`holdsOf`, media/logic.ts): nó com UM\n * arquivo e saída ligada guarda um só (o KV, o Logo), e soltar outro substitui.\n * `data.holds` crava a regra.\n */\nfunction holdsOne(doc: BoardDoc, node: BoardNode): boolean {\n if (node.data.holds === 'one') return true;\n if (node.data.holds === 'many') return false;\n return itemsOf(node).length === 1 && Object.values(doc.edges).some((e) => e.source === node.id);\n}\n\nfunction needMediaNode(doc: BoardDoc, nodeId: string): BoardNode {\n const node = doc.nodes[nodeId];\n if (!node) throw new CanvasToolError(`Nó ${nodeId} não existe no board. Releia com canvas_read_board.`);\n if (nodeKind(node) !== 'media') {\n throw new CanvasToolError(\n `O nó ${nodeId} (\"${oneLine(nodeName(node), 40)}\") é ${nodeKind(node) ?? node.type}, não Mídia. ` +\n 'Passe o id de um nó media, ou omita node_id para criar um nó Mídia novo.'\n );\n }\n return node;\n}\n\n/** JSON para o agente colar: item da Mídia, asset e libraryItemId da sequência. */\nfunction payload(u: UploadedMedia, nodeId?: string): string {\n const out: Record<string, Json> = { url: u.url, mime: u.mime, bytes: u.bytes };\n if (u.meta.duration !== undefined) out.duration = u.meta.duration;\n if (u.meta.width !== undefined) out.width = u.meta.width;\n if (u.meta.height !== undefined) out.height = u.meta.height;\n if (u.meta.fps !== undefined) out.fps = u.meta.fps;\n out.media_item = mediaItem(u);\n if (u.kind !== 'file') {\n out.sequence_asset = sequenceAsset(u);\n out.libraryItemId = libraryItemId(u, nodeId);\n }\n return JSON.stringify(out);\n}\n\nfunction sequenceHint(u: UploadedMedia, nodeId?: string): string {\n if (u.kind === 'file') return 'Documento: entra no nó Mídia, não na timeline da Montagem.';\n const lines = [\n 'Num clipe da timeline da Montagem (data.timeline; data.sequence só em nó que ainda não migrou): ' +\n 'use sequence_asset como `asset` e libraryItemId como está' +\n (nodeId ? '.' : ', trocando <id do nó Mídia> pelo id do nó onde o item ficou.'),\n ];\n if (u.meta.duration !== undefined) {\n const at30 = Math.floor(u.meta.duration * 30 + 1e-9);\n lines.push(`Quadros = duração × fps da timeline, para baixo (ex.: ${at30} a 30 fps).`);\n }\n return lines.join(' ');\n}\n\nexport function registerCanvasMediaTools(server: McpServer, deps: CanvasMediaDeps): void {\n const { api, cfg, run, edit, seen, placeFor } = deps;\n\n server.registerTool(\n 'canvas_upload_media',\n {\n title: 'Canvas: subir arquivo',\n description:\n 'Sobe um arquivo (caminho local ou URL) pela rota de arquivos da BePlus e devolve o item pronto: url, mime, ' +\n 'bytes, duração/largura/altura quando é mídia, media_item (data.items do nó Mídia), sequence_asset e ' +\n 'libraryItemId (clipe da timeline da Montagem). Com board_id grava no nó Mídia node_id, ou cria um nó Mídia ' +\n 'novo sem node_id (com aba, ele nasce no fim do conteúdo da aba e grava data.abaId); aí exige canvas_read_board ' +\n 'nesta sessão. Teto de 95 MB. Não gera mídia nem gasta diamantes.',\n inputSchema: {\n source: z.string().trim().min(1).max(2000).describe('Caminho local (/…, ~/…, file://) ou URL http(s).'),\n name: z.string().trim().min(1).max(120).optional().describe('Nome do arquivo no Canvas (a extensão é mantida).'),\n board_id: z.string().uuid().optional().describe('Board onde gravar o item (opcional).'),\n node_id: z.string().min(1).max(128).optional().describe('Nó Mídia que recebe o item. Sem ele, cria um nó Mídia novo.'),\n aba: abaArg(ABA_UPLOAD_MEDIA),\n label: z.string().trim().min(1).max(120).optional().describe('Nome do nó Mídia novo (padrão: nome do arquivo).'),\n replace: z\n .boolean()\n .optional()\n .describe('true troca a lista do nó por este arquivo; false acrescenta. Padrão: a regra do Canvas (nó de um arquivo só, ligado, troca).'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, openWorldHint: true },\n },\n async (args) =>\n run(async () => {\n if (!args.board_id && (args.node_id || args.label || args.replace !== undefined || args.aba)) {\n throw new CanvasToolError('node_id, label, replace e aba só valem com board_id.');\n }\n if (args.aba && args.node_id) {\n throw new CanvasToolError(\n 'aba só vale quando o upload cria um nó Mídia novo (sem node_id): o nó que já existe não muda de aba por aqui.'\n );\n }\n\n // Conferir o board ANTES de subir: não gastar upload num pedido que vai ser recusado.\n if (args.board_id) {\n if (!seen.has(args.board_id)) {\n throw new CanvasToolError('Leia o board com canvas_read_board antes de gravar nele (a leitura vale para a sessão).');\n }\n const snap = await api.snapshot(args.board_id);\n if (snap.role === 'viewer') throw new CanvasToolError('Você é só leitor neste board: peça ao dono para te dar papel de editor.');\n // AB9 · Aba que não existe recusa antes de subir.\n if (args.aba) resolveTab(snap.doc, args.aba);\n if (args.node_id) {\n const node = needMediaNode(snap.doc, args.node_id);\n const replacing = args.replace ?? holdsOne(snap.doc, node);\n if (!replacing && itemsOf(node).length >= MAX_MEDIA_ITEMS) {\n throw new CanvasToolError(\n `O nó \"${oneLine(nodeName(node), 40)}\" já tem ${MAX_MEDIA_ITEMS} arquivos (teto do Canvas). ` +\n 'Omita node_id para criar outro nó Mídia.'\n );\n }\n }\n }\n\n let u: UploadedMedia;\n try {\n u = await uploadMedia(cfg, args.source, args.name);\n } catch (e) {\n // Teto, formato, download e permissão já vêm explicados em PT-BR; 401 segue para o tratamento de login.\n if (e instanceof ApiError && e.httpStatus !== 401) throw new CanvasToolError(e.message);\n throw e;\n }\n const head = `✅ ${u.reused ? 'Já estava no armazenamento da BePlus (não subiu de novo)' : 'Subiu'}: ${describeUpload(u)}\\nURL: ${u.url}`;\n if (!args.board_id) {\n return [head, '', payload(u), '', sequenceHint(u)].join('\\n');\n }\n\n const boardId = args.board_id;\n let nodeId = args.node_id;\n let done: string;\n try {\n done = await edit(boardId, async (doc) => {\n const item = mediaItem(u);\n if (nodeId) {\n const node = needMediaNode(doc, nodeId);\n const replacing = args.replace ?? holdsOne(doc, node);\n const items = replacing ? [item] : [...itemsOf(node), item];\n if (items.length > MAX_MEDIA_ITEMS) {\n throw new CanvasToolError(`O nó já tem ${MAX_MEDIA_ITEMS} arquivos (teto do Canvas).`);\n }\n const before = itemsOf(node).length;\n return {\n ops: [{ type: 'node.set', nodeId: node.id, path: 'data.items', value: setValue(items) }],\n targets: [node.id],\n done:\n `Nó Mídia \"${oneLine(nodeName(node), 40)}\" (${node.id}): ` +\n (replacing ? `arquivo trocado (${before} → 1)` : `arquivo acrescentado, agora com ${items.length}`),\n };\n }\n const spec = KINDS.media;\n // AB9 · Com aba, o nó nasce no fim do conteúdo dela e grava data.abaId; sem, à direita\n // de tudo (e a resposta avisa quando isso o deixa em Avulsos).\n const tab = args.aba ? resolveTab(doc, args.aba) : undefined;\n const created = makeNode({\n type: WORKFLOW_NODE_TYPE,\n data: {\n ...spec.data,\n [KIND_FIELD]: 'media',\n label: args.label ?? u.name,\n items: [item],\n ...(tab === undefined ? {} : { [TAB_ID_FIELD]: tab }),\n },\n position: placeFor(doc, spec.size, undefined, 'right', tab),\n size: spec.size,\n zIndex: Object.values(doc.nodes).reduce((t, n) => Math.max(t, n.zIndex), 0) + 1,\n createdBy: await api.me(),\n });\n nodeId = created.id;\n return {\n ops: [{ type: 'node.add', nodeId: created.id, node: created }],\n targets: [],\n done: `Nó Mídia \"${oneLine(nodeName(created), 40)}\" criado: ${created.id}.${placementNote(doc, created)}`,\n };\n });\n } catch (e) {\n // O arquivo já subiu: devolver o item evita subir de novo na próxima tentativa.\n const why = e instanceof CanvasToolError ? e.message : apiErrorToUserMessage(e);\n throw new CanvasToolError(\n `${head}\\nMas o item NÃO entrou no board: ${why}\\n` +\n 'Não suba de novo: releia com canvas_read_board e grave media_item em data.items do nó Mídia ' +\n `(canvas_update_node com a lista inteira) ou em um nó novo.\\n${payload(u)}`\n );\n }\n return [head, done, '', payload(u, nodeId), '', sequenceHint(u, nodeId)].join('\\n');\n })\n );\n}\n","/**\n * CR1: rodar nós do Canvas pelo MCP, sem clicar na tela.\n *\n * O pedido vai ao academy-backend (`POST /boards/:id/run-requests`), que repassa\n * para UMA aba do Canvas da própria pessoa aberta naquele board. A aba estima com\n * a mesma conta do botão Rodar, recusa acima do teto e roda pelo mesmo caminho\n * (cache, portão do PT, claim entre pessoas). O MCP nunca gera mídia aqui.\n *\n * O `requestId` nasce aqui: se o POST cair no meio (prazo, rede), ninguém sabe se\n * a aba começou; repetir com o MESMO id é seguro (a aba devolve a resposta que já\n * deu) e o andamento se consulta pelo id.\n */\nimport { randomUUID } from 'node:crypto';\nimport { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { ApiError } from '../api/errors';\nimport type { ToolResult } from '../format';\nimport {\n CanvasToolError,\n errorRaw,\n type BoardSnapshot,\n type CanvasApi,\n type RunEstimateWire,\n type RunStatusAnswer,\n type RunTargetWire,\n type TabAnswer,\n} from '../canvas/api';\nimport { nodeName } from '../canvas/summary';\n\ntype Run = (fn: () => Promise<string>) => Promise<ToolResult>;\n\n/** O que o MCP lembra de cada pedido nesta execução, para o andamento sem aba. */\ninterface Remembered {\n boardId: string;\n nodeIds: string[];\n /** CR2: nós que a aba não listou (resposta cortada pelo tamanho): o andamento sem aba fica parcial. */\n omitted?: number;\n}\n\nconst MAX_REMEMBERED = 50;\n\nconst boardId = z.string().uuid().describe('Id (uuid) do board.');\nconst nodeId = z.string().min(1).max(128);\n\nconst fmt = (n: number) => new Intl.NumberFormat('pt-BR').format(n);\nconst dia = (n: number | null | undefined) => (n === null || n === undefined ? 'sem estimativa' : `${fmt(n)} 💎`);\n\n/** \"claude-code\" → \"Claude Code\": o que a aba mostra em \"Rodando a pedido de …\". */\nexport function prettyClient(name: string | undefined): string {\n if (!name) return 'MCP';\n return name\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((w) => w[0]!.toUpperCase() + w.slice(1))\n .join(' ')\n .slice(0, 80);\n}\n\nfunction modeText(mode: string | undefined): string {\n return mode === 'simulated' ? 'Simulado (não gasta)' : mode === 'live' ? 'Real' : mode ?? '?';\n}\n\n/** A lista de custo por nó, como a confirmação do Canvas mostra. */\nexport function estimateLines(estimate: RunEstimateWire | undefined, titleOf: (id: string) => string): string[] {\n if (!estimate) return [];\n const lines: string[] = [];\n const nodes = estimate.nodes ?? [];\n const now = nodes.filter((n) => n.willRun);\n for (const n of now) {\n const cost = n.error ? `estimativa falhou (${n.error})` : dia(n.diamonds);\n lines.push(`- ${n.title ?? titleOf(n.nodeId)} (${n.nodeId}): ${cost}`);\n }\n // CR2: a aba grande corta a lista (os mais caros ficam) e diz quantos saíram; o total vale para todos.\n if (estimate.omitted) {\n lines.push(`… e mais ${estimate.omitted} nó(s) fora da lista (a resposta da aba foi cortada pelo tamanho; o total vale para todos).`);\n }\n // CR2: o cache não vem mais em `nodes`, só a contagem `cached` (a aba da CR1 ainda listava).\n const cached = estimate.cached ?? nodes.filter((n) => !n.willRun && !n.afterApproval).length;\n if (cached) lines.push(`Em cache (não rodam): ${cached}.`);\n const later = estimate.counts?.later ?? estimate.later?.nodes?.length ?? 0;\n if (later) lines.push(`Esperando aprovação no board depois disso: ${later} nó(s), ≈ ${dia(estimate.later?.total ?? 0)} (fora desta conta).`);\n const unknown = estimate.counts?.unknown ?? estimate.unknown?.length ?? 0;\n if (unknown) {\n lines.push(`Sem estimativa: ${unknown} nó(s) (texto cobra por token; o total é piso).`);\n }\n return lines;\n}\n\nfunction targetOf(args: { node_ids?: string[]; from_node_id?: string; all?: boolean }): RunTargetWire {\n const given = [args.node_ids?.length ? 1 : 0, args.from_node_id ? 1 : 0, args.all ? 1 : 0].reduce((a, b) => a + b, 0);\n if (given !== 1) {\n throw new CanvasToolError('Diga o que rodar com UM destes: node_ids (os nós), from_node_id (daqui para frente) ou all: true (tudo).');\n }\n if (args.all) return { kind: 'all' };\n if (args.from_node_id) return { kind: 'from', nodeId: args.from_node_id };\n return { kind: 'nodes', nodeIds: [...new Set(args.node_ids!)] };\n}\n\nexport function registerCanvasRunTools(server: McpServer, api: CanvasApi, run: Run): void {\n const remembered = new Map<string, Remembered>();\n const remember = (requestId: string, entry: Remembered) => {\n remembered.delete(requestId);\n remembered.set(requestId, entry);\n while (remembered.size > MAX_REMEMBERED) remembered.delete(remembered.keys().next().value!);\n };\n\n /** Título do nó pelo documento, quando a aba não mandou. */\n async function titles(board: string): Promise<(id: string) => string> {\n try {\n const snap = await api.snapshot(board);\n return (id) => (snap.doc.nodes[id] ? nodeName(snap.doc.nodes[id]) : id);\n } catch {\n return (id) => id;\n }\n }\n\n /** Os erros do servidor em PT-BR, com o que fazer. `requestId` entra quando o pedido pode ter começado. */\n function explain(e: unknown, requestId?: string): never {\n if (!(e instanceof ApiError)) throw e;\n const reason = errorRaw(e)?.reason;\n const unknownFate =\n requestId &&\n (e.httpStatus === 0 || e.httpStatus === 408 || reason === 'tab-timeout' || reason === 'tab-bad-answer' || (e.httpStatus >= 500 && e.httpStatus !== 501));\n if (unknownFate) {\n throw new CanvasToolError(\n `Não dá para saber se a aba começou a rodar (${e.message}). NÃO peça um pedido novo: consulte canvas_run_status ` +\n `com request_id \"${requestId}\". Se precisar repetir, chame canvas_run com o mesmo request_id: é seguro, a aba não roda duas vezes.`\n );\n }\n if (reason === 'no-tab') {\n throw new CanvasToolError(\n 'Nenhuma aba do Canvas sua está aberta neste board (ou a aba é de uma versão sem esta função). Peça para abrir o board ' +\n 'no Canvas com a mesma conta deste MCP e tente de novo. Nada rodou.'\n );\n }\n if (e.httpStatus === 404 && reason !== 'unknown-request') {\n if (!/board/i.test(e.message)) {\n throw new CanvasToolError('O servidor do Canvas ainda não tem a execução pelo MCP (academy-backend sem a CR1). Nada rodou.');\n }\n throw new CanvasToolError('Board não encontrado, ou você não é membro dele. Confira o id em canvas_list_boards.');\n }\n if (e.httpStatus === 403 && (!api.usesPat || /ialab:/.test(e.message))) {\n throw new CanvasToolError(\n 'O login pelo navegador deste MCP não tem a permissão ialab:spend, que rodar exige. Rode `beplus-mcp login` de novo e autorize.'\n );\n }\n if (e.httpStatus === 403) throw new CanvasToolError(`Sem permissão para rodar neste board (só dono e editor rodam): ${e.message}.`);\n if (e.httpStatus === 400) throw new CanvasToolError(`O servidor recusou o pedido: ${e.message}.`);\n if (e.httpStatus === 429) throw new CanvasToolError('Limite de pedidos de execução (20 por minuto). Espere um minuto.');\n throw e;\n }\n\n function answerText(a: TabAnswer, requestId: string, max: number, titleOf: (id: string) => string): string {\n const est = estimateLines(a.estimate, titleOf);\n const total = a.estimate ? `${dia(a.estimate.total)} (teto ${fmt(max)})` : '';\n const again = a.repeated ? ' (a aba já tinha recebido este request_id; esta é a mesma resposta)' : '';\n if (a.status === 'estimate') {\n return [`Estimativa, nada rodou${again}. Modo ${modeText(a.mode)}. Total agora: ${total}.`, ...est, cabeLine(a, max)].filter(Boolean).join('\\n');\n }\n if (a.status === 'nothing') return `Nada para rodar${again}: ${a.message ?? 'o board já está em dia.'}`;\n const willRun = (a.estimate?.nodes ?? []).filter((n) => n.willRun).map((n) => n.nodeId);\n return [\n `Rodando pela sua aba do Canvas${again}. Modo ${modeText(a.mode)}. Estimativa: ${total}.`,\n ...est,\n `request_id: ${requestId}. Andamento: canvas_run_status (board_id, request_id). Resultado: canvas_read_board com node_ids ` +\n `[${willRun.slice(0, 20).join(', ')}] quando terminar.`,\n ].join('\\n');\n }\n\n function cabeLine(a: TabAnswer, max: number): string {\n if (!a.estimate) return '';\n return a.estimate.total <= max\n ? 'Cabe no teto: repita sem dry_run para rodar.'\n : `Passa do teto (${fmt(max)}): só roda com max_diamonds maior, se o usuário autorizar.`;\n }\n\n // ── canvas_run ────────────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_run',\n {\n title: 'Canvas: rodar nós',\n description:\n 'Roda nós do board pela aba do Canvas que o usuário tem aberta nele (mesma conta; sem aba aberta, nada roda). GASTA DIAMANTES ' +\n 'no modo Real. A aba estima como o botão Rodar e só roda se a estimativa couber em max_diamonds (obrigatório: o teto que o ' +\n 'usuário autorizou; nunca invente um valor alto). dry_run: true só estima. Alvo, um destes: node_ids (roda esses nós mesmo em ' +\n 'cache, gerando e gastando de novo, como o Rodar do cartão), from_node_id (o nó e tudo depois dele, também de novo) ou all: ' +\n 'true (só o que mudou, como o Rodar tudo). simulated: true só vale com a aba no modo Simulado; sem ele, a aba precisa estar no ' +\n 'Real. Prompt com PT editado e sem aplicar no EN: a aba recusa e diz qual (aplique no cartão). Devolve o que vai rodar, o custo ' +\n 'e o request_id; acompanhe com canvas_run_status e leia o resultado com canvas_read_board. Se a resposta disser que não dá para ' +\n 'saber se começou, consulte o andamento e, para repetir, use o MESMO request_id.',\n inputSchema: {\n board_id: boardId,\n node_ids: z.array(nodeId).min(1).max(100).optional().describe('Os nós a rodar (como o Rodar do cartão/seleção).'),\n from_node_id: nodeId.optional().describe('Rodar daqui para frente: este nó e tudo que depende dele.'),\n all: z.boolean().optional().describe('true: Rodar tudo (só o que mudou).'),\n max_diamonds: z.number().finite().min(0).max(1_000_000).describe('Teto de diamantes desta execução. Obrigatório.'),\n dry_run: z.boolean().optional().describe('true: só estima, nada roda.'),\n simulated: z.boolean().optional().describe('true: o pedido é para o modo Simulado (a aba precisa estar nele).'),\n label: z.string().trim().min(1).max(80).optional().describe('Quem pede, como a aba mostra (\"Rodando a pedido de …\").'),\n request_id: z.string().uuid().optional().describe('Só para repetir um pedido cujo destino ficou incerto.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },\n },\n async (args) =>\n run(async () => {\n const target = targetOf(args);\n const requestId = (args.request_id ?? randomUUID()).toLowerCase();\n const label = args.label ?? prettyClient(server.server.getClientVersion()?.name);\n let answer: TabAnswer;\n try {\n answer = await api.runRequest(args.board_id, {\n requestId,\n target,\n maxDiamonds: args.max_diamonds,\n dryRun: args.dry_run === true,\n simulated: args.simulated === true,\n label,\n });\n } catch (e) {\n explain(e, requestId);\n }\n const titleOf = await titles(args.board_id);\n if (answer.ok !== true) {\n const est = estimateLines(answer.estimate, titleOf);\n throw new CanvasToolError(\n [`A aba recusou, nada rodou (${answer.reason ?? 'sem motivo'}): ${answer.message ?? ''}`.trim(), ...est].join('\\n')\n );\n }\n const nodeIds = (answer.estimate?.nodes ?? []).filter((n) => n.willRun).map((n) => n.nodeId);\n if (answer.status === 'started') {\n remember(requestId, {\n boardId: args.board_id,\n nodeIds: nodeIds.length ? nodeIds : target.kind === 'nodes' ? target.nodeIds : target.kind === 'from' ? [target.nodeId] : [],\n ...(answer.estimate?.omitted ? { omitted: answer.estimate.omitted } : {}),\n });\n }\n return answerText(answer, requestId, args.max_diamonds, titleOf);\n })\n );\n\n // ── canvas_run_status ─────────────────────────────────────────────────────\n server.registerTool(\n 'canvas_run_status',\n {\n title: 'Canvas: andamento da execução',\n description:\n 'Andamento de um pedido do canvas_run: estado de cada nó, estimado e gasto. Pergunta à aba do Canvas que rodou; se ela fechou, ' +\n 'lê o estado de execução do board para os nós do pedido (os que este MCP lembra, ou node_ids). Só leitura.',\n inputSchema: {\n board_id: boardId,\n request_id: z.string().uuid().describe('O request_id que o canvas_run devolveu.'),\n node_ids: z.array(nodeId).min(1).max(100).optional().describe('Os nós a conferir, se o MCP não lembra do pedido.'),\n },\n annotations: { readOnlyHint: true, openWorldHint: true },\n },\n async ({ board_id, request_id, node_ids }) =>\n run(async () => {\n const requestId = request_id.toLowerCase();\n let why = '';\n try {\n return statusText(await api.runStatus(board_id, requestId), await titles(board_id));\n } catch (e) {\n const reason = errorRaw(e)?.reason;\n if (!(e instanceof ApiError) || (reason !== 'unknown-request' && reason !== 'no-tab')) explain(e);\n why = reason === 'no-tab' ? 'Nenhuma aba do Canvas sua está aberta neste board.' : 'Nenhuma aba aberta conhece este pedido.';\n }\n const known = node_ids ? undefined : remembered.get(requestId);\n const ids = node_ids ?? known?.nodeIds;\n if (!ids?.length) {\n return `${why} Sem a aba, o andamento sai do estado de execução do board: chame de novo com node_ids (os nós que o pedido rodava).`;\n }\n // CR2: o pedido grande veio com a lista cortada, e o MCP só lembra dos nós listados.\n const partial = known?.omitted\n ? ` (parcial: só os ${ids.length} nós que a aba listou; outros ${known.omitted} ficaram fora da resposta. Para eles, chame com node_ids)`\n : '';\n return `${why} Pelo estado de execução do board${partial}:\\n${fromRuns(await api.snapshot(board_id), ids)}`;\n })\n );\n}\n\nconst STATE_TEXT: Record<string, string> = {\n preparing: 'a aba está estimando e conferindo',\n running: 'rodando',\n done: 'terminou',\n failed: 'terminou com erro',\n cancelled: 'cancelado',\n refused: 'recusado',\n nothing: 'nada para rodar',\n estimate: 'só estimativa',\n};\n\nconst NODE_TEXT: Record<string, string> = {\n idle: 'parado',\n waiting: 'esperando o montante',\n queued: 'na fila',\n running: 'rodando',\n done: 'pronto',\n error: 'erro',\n cancelled: 'cancelado',\n skipped: 'pulado (o montante falhou)',\n blocked: 'esperando aprovação',\n claimed: 'outra pessoa está rodando',\n cached: 'em cache',\n};\n\nexport function statusText(a: RunStatusAnswer, titleOf: (id: string) => string): string {\n const head = [`Pedido ${a.requestId}: ${STATE_TEXT[a.state] ?? a.state}.`];\n if (a.mode) head.push(`Modo ${modeText(a.mode)}.`);\n if (typeof a.estimated === 'number') head.push(`Estimado ${dia(a.estimated)}.`);\n if (typeof a.spent === 'number') head.push(`Gasto até agora ${dia(a.spent)}.`);\n const lines = [head.join(' ')];\n if (a.message) lines.push(a.message);\n for (const n of a.nodes ?? []) {\n const extra = n.error ? `: ${n.error}` : n.message ? `: ${n.message}` : '';\n const outs = typeof n.outputs === 'number' && n.outputs > 0 ? ` (${n.outputs} saída(s))` : '';\n lines.push(`- ${n.title ?? titleOf(n.nodeId)} (${n.nodeId}): ${NODE_TEXT[n.status] ?? n.status}${outs}${extra}`);\n }\n // CR2: o andamento de um pedido grande também vem cortado (erro primeiro, depois o que roda).\n if (a.omitted) lines.push(`… e mais ${a.omitted} nó(s) fora da lista (a resposta da aba foi cortada pelo tamanho).`);\n if (a.state === 'done' || a.state === 'failed') lines.push('Leia o resultado com canvas_read_board (node_ids).');\n return lines.join('\\n');\n}\n\n/** Sem a aba: o `runs` da foto (o que a SV4 sobe para os nós pagos). */\nexport function fromRuns(snap: BoardSnapshot, ids: string[]): string {\n const byNode = new Map(snap.runs.map((r) => [r.nodeId, r]));\n return ids\n .map((id) => {\n const node = snap.doc.nodes[id];\n const name = node ? nodeName(node) : id;\n if (!node) return `- ${id}: o nó não existe mais no board`;\n const r = byNode.get(id);\n const st = (r?.state ?? null) as { status?: string; error?: { message?: string } | string | null; outputs?: Record<string, unknown[]> } | null;\n if (r?.claimedBy) return `- ${name} (${id}): rodando agora`;\n if (!st?.status) return `- ${name} (${id}): sem estado de execução no servidor (não rodou, ou é nó que roda só na aba)`;\n const outs = Object.values(st.outputs ?? {}).reduce((sum, list) => sum + (Array.isArray(list) ? list.length : 0), 0);\n const err = typeof st.error === 'string' ? st.error : st.error?.message;\n return `- ${name} (${id}): ${NODE_TEXT[st.status] ?? st.status}${outs ? ` (${outs} saída(s))` : ''}${err ? `: ${err}` : ''}`;\n })\n .join('\\n');\n}\n","/**\n * CF1: enquadrar a aba do Canvas do usuário num ponto do board (\"olha aqui\").\n *\n * O pedido vai ao academy-backend (`POST /boards/:id/focus-requests`), que repassa\n * para UMA aba do Canvas da própria pessoa aberta naquele board (a de entrada mais\n * recente). Essa aba passa o pedido à aba que a pessoa está olhando no mesmo\n * navegador (visível, fora de um `?frame` de agente). Padrão: enquadra e seleciona\n * uma vez, sem prender a aba. `follow: true`: a aba segue a área (modo `?frame`) até\n * a pessoa sair pelo \"×\". Não gasta e não escreve no board. Pedir de novo é seguro\n * (enquadra de novo), então não há request_id.\n */\nimport { z } from 'zod';\nimport type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { ApiError } from '../api/errors';\nimport type { ToolResult } from '../format';\nimport { CanvasToolError, errorRaw, type CanvasApi, type FocusAnswer } from '../canvas/api';\n\ntype Run = (fn: () => Promise<string>) => Promise<ToolResult>;\n\nconst MAX_IDS = 100;\nconst nodeId = z.string().min(1).max(128);\n\nconst fmtZoom = (z: number) => new Intl.NumberFormat('pt-BR', { maximumFractionDigits: 2 }).format(z);\n\n/** Os erros do servidor em PT-BR, com o que fazer. */\nfunction explain(e: unknown, usesPat: boolean): never {\n if (!(e instanceof ApiError)) throw e;\n const reason = errorRaw(e)?.reason;\n if (reason === 'no-tab') {\n throw new CanvasToolError(\n 'Nenhuma aba do Canvas sua está aberta neste board (ou a aba é de uma versão sem esta função). Peça para abrir o board ' +\n 'no Canvas com a mesma conta deste MCP (ou recarregar a aba) e tente de novo. Nada mudou.'\n );\n }\n if (reason === 'tab-timeout') {\n throw new CanvasToolError('A aba do Canvas não respondeu em 5 s. Ela pode ter enquadrado; chamar de novo não faz mal.');\n }\n if (reason === 'tab-bad-answer') {\n throw new CanvasToolError('A aba do Canvas respondeu fora do contrato. Peça para recarregar a aba e tente de novo.');\n }\n if (e.httpStatus === 404) {\n if (!/board/i.test(e.message)) {\n throw new CanvasToolError('O servidor do Canvas ainda não tem o enquadramento pelo MCP (academy-backend sem a CF1). Nada mudou.');\n }\n throw new CanvasToolError('Board não encontrado, ou você não é membro dele. Confira o id em canvas_list_boards.');\n }\n if (e.httpStatus === 403 && (!usesPat || /ialab:/.test(e.message))) {\n throw new CanvasToolError('O login pelo navegador deste MCP não tem a permissão que o enquadramento exige. Rode `beplus-mcp login` de novo e autorize.');\n }\n if (e.httpStatus === 400) throw new CanvasToolError(`O servidor recusou o pedido: ${e.message}.`);\n if (e.httpStatus === 429) throw new CanvasToolError('Limite de pedidos de enquadramento (60 por minuto). Espere um minuto.');\n throw e;\n}\n\n/** A resposta da aba em texto: o que enquadrou, o que faltou e qual aba atendeu. */\nexport function focusText(a: FocusAnswer): string {\n const tab = a.tab;\n const name = tab?.title ? `\"${tab.title}\"` : 'aberta';\n const found = a.found ?? 0;\n const selected = a.selected ?? 0;\n const zoom = typeof a.zoom === 'number' ? ` Zoom ${fmtZoom(a.zoom)}.` : '';\n const lines = [\n `Enquadrado na aba do Canvas ${name}: ${found} nó(s)` +\n `${selected > 0 ? `, ${selected} selecionado(s)` : ', sem mexer na seleção'}.${zoom}`,\n ];\n // Qual aba: a do usuário (a que ele está olhando) ou, sem nenhuma visível, a de um agente.\n if (tab?.human !== undefined || tab?.relayed !== undefined) {\n const who =\n tab.human === false\n ? 'Aba de agente (link ?frame): nenhuma aba do usuário estava visível neste board.'\n : 'Aba do usuário (a que ele está olhando).';\n const via = tab.relayed ? ' Repassado pela aba que o servidor escolheu.' : '';\n lines.push(`${who}${via}`);\n }\n if (a.mode === 'follow') {\n lines.push('Modo seguir: a aba acompanha essa área e fica presa nela até o usuário clicar no × da pílula.');\n } else if (a.mode === 'light') {\n lines.push('Uma vez só: a aba não fica presa; o usuário segue mexendo à vontade.');\n }\n const missing = a.missing ?? [];\n if (missing.length > 0) {\n const more = a.missingMore ? ` e mais ${a.missingMore}` : '';\n lines.push(`Não existem no board (ou estão arquivados): ${missing.join(', ')}${more}.`);\n }\n if (tab?.visible === false) lines.push('A aba está escondida (atrás de outra): peça para o usuário trazê-la para a frente.');\n if (tab?.montage) lines.push('O usuário está no editor (Montagem aberta nessa aba): o board foi enquadrado por trás e aparece quando ele fechar a Montagem.');\n if (tab?.wasFramed) lines.push('Essa aba estava enquadrada em outra área (talvez a de outro agente) e agora mostra esta.');\n return lines.join('\\n');\n}\n\nexport function registerCanvasFocusTools(server: McpServer, api: CanvasApi, run: Run): void {\n server.registerTool(\n 'canvas_focus',\n {\n title: 'Canvas: enquadrar a aba do usuário',\n description:\n 'Mostra \"olha aqui\" ao usuário: leva a aba do Canvas que ele está olhando neste board (a visível, que não é aba de ' +\n 'agente aberta por link ?frame; sem nenhuma, a de um agente) até nós ou uma seção, sem animação, e seleciona os nós ' +\n '(select: false não mexe na seleção). Padrão: enquadra e seleciona UMA vez; a aba não fica presa e o usuário segue ' +\n 'mexendo. follow: true segue a área e prende a aba até o × (modo ?frame: acompanha as mudanças, titulo na pílula e no ' +\n 'nome da aba); use só quando ele pedir para acompanhar. NÃO gasta e NÃO escreve no board. Diga node_ids e/ou section_id ' +\n '(até 100 ids; com os dois, a seleção fica nos node_ids). zoom: \"fit\" (padrão, cabe na tela) ou número de 0.07 a 4. ' +\n 'Devolve qual aba enquadrou (nome, se é a do usuário ou de agente, se veio repassada, se está escondida, se ele está no ' +\n 'editor da Montagem) e os ids que não existem. Sem aba: peça para abrir (ou recarregar) o board no Canvas. Chamar de ' +\n 'novo com a mesma área é seguro.',\n inputSchema: {\n board_id: z.string().uuid().describe('Id (uuid) do board.'),\n node_ids: z.array(nodeId).min(1).max(MAX_IDS).optional().describe('Os nós a mostrar (e selecionar).'),\n section_id: nodeId.optional().describe('Uma seção: enquadra a seção e o que está dentro dela.'),\n titulo: z\n .string()\n .trim()\n .min(1)\n .max(80)\n .optional()\n .describe('Com follow: texto da pílula e do nome da aba (\"<titulo> · <board>\"). Sem follow não aparece.'),\n zoom: z\n .union([z.literal('fit'), z.number().finite().min(0.07).max(4)])\n .optional()\n .describe('\"fit\" (padrão): a área cabe na tela, zoom até 100%. Número: zoom fixo, com a área no meio.'),\n select: z.boolean().optional().describe('false: não mexe na seleção. Padrão: seleciona os nós.'),\n follow: z\n .boolean()\n .optional()\n .describe('true: segue a área e prende a aba até o × da pílula. Padrão false: enquadra e seleciona uma vez, sem prender.'),\n },\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },\n },\n async (args) =>\n run(async () => {\n const nodeIds = args.node_ids ? [...new Set(args.node_ids)] : [];\n if (nodeIds.length === 0 && !args.section_id) {\n throw new CanvasToolError('Diga o que mostrar: node_ids (os nós), section_id (uma seção) ou os dois.');\n }\n if (nodeIds.length + (args.section_id ? 1 : 0) > MAX_IDS) {\n throw new CanvasToolError(`Até ${MAX_IDS} ids por pedido (node_ids mais a seção).`);\n }\n let answer: FocusAnswer;\n try {\n answer = await api.focusRequest(args.board_id, {\n ...(nodeIds.length ? { nodeIds } : {}),\n ...(args.section_id ? { sectionId: args.section_id } : {}),\n ...(args.titulo ? { title: args.titulo } : {}),\n ...(args.zoom !== undefined ? { zoom: args.zoom } : {}),\n ...(args.select !== undefined ? { select: args.select } : {}),\n ...(args.follow !== undefined ? { follow: args.follow } : {}),\n });\n } catch (e) {\n explain(e, api.usesPat);\n }\n if (answer.ok !== true) {\n throw new CanvasToolError(`A aba recusou, nada mudou (${answer.reason ?? 'sem motivo'}): ${answer.message ?? ''}`.trim());\n }\n return focusText(answer);\n })\n );\n}\n","/**\n * O cadeado da aba (CD1 do Canvas): a seção com `data.travada === true` não se\n * move, não muda de tamanho e não é apagada. Os nós de dentro seguem editáveis um\n * a um, mas não em lote: foi assim que a FECHADOS do Ladeira levou um \"Organizar\"\n * e um arraste sem querer em 02/10, com várias sessões gravando ao mesmo tempo.\n *\n * \"Dentro\" depende do que a seção é:\n *\n * - Aba viva (`aba === true`, não arquivada): quem MORA nela, pela pertença do Canvas\n * (`tabs.ts`, AB9 Fase C): o `data.abaId` primeiro, e só sem ele a posição. Cartão a\n * 50 mil pontos da seção mas com o campo é da aba; cartão em cima do retângulo mas com\n * `abaId` de outra aba não é. Trocar a aba de um cartão (`data.abaId` para outra aba, ou\n * apagar o campo) conta como mexer na aba que ele deixa, igual a mudar posição ou tamanho.\n * Gravar o `abaId` da aba onde ele já mora não muda nada e passa em lote (o carimbo da\n * migração do board para o campo).\n * - Seção comum travada: a caixa inteira dentro da moldura dela, com a altura que o\n * cartão tem na tela (`nodesInsideSection` de apps/studio/src/board/section-carry.ts).\n *\n * Mesmo campo do Canvas: `SECTION_LOCK_FIELD` de packages/nodes/src/section/logic.ts.\n */\n\nimport type { BoardDoc, BoardNode, Op } from './core';\nimport { readMeasured } from './layout';\nimport { nodeKind, oneLine } from './summary';\nimport { tabTitle } from './tab-scope';\nimport { TAB_ID_FIELD, isTabSection, partitionOf } from './tabs';\n\nexport const SECTION_LOCK_FIELD = 'travada';\n\nexport const LOCKED_TEXT = 'área travada pelo dono (cadeado); peça pra destravar';\n\nexport function isLockedSection(node: BoardNode | undefined): boolean {\n return node !== undefined && nodeKind(node) === 'section' && node.data[SECTION_LOCK_FIELD] === true;\n}\n\n/** Posição ou caixa, inteira ou por eixo (`position`, `position.x`, `size.w`…). */\nconst LAYOUT_PATH = /^(position|size)(\\.|$)/;\n/** A aba do cartão: trocá-la tira o cartão da aba (ou o põe em outra). */\nconst STAMP_PATH = `data.${TAB_ID_FIELD}`;\n\ninterface Rect {\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nfunction rectOf(node: BoardNode, withMeasured: boolean): Rect {\n const h = withMeasured ? Math.max(node.size.h, readMeasured(node)?.h ?? 0) : node.size.h;\n return { x: node.position.x, y: node.position.y, w: node.size.w, h };\n}\n\nfunction contains(outer: Rect, inner: Rect): boolean {\n return inner.x >= outer.x && inner.y >= outer.y && inner.x + inner.w <= outer.x + outer.w && inner.y + inner.h <= outer.y + outer.h;\n}\n\nfunction flatten(ops: readonly Op[]): Op[] {\n return ops.flatMap((op) => (op.type === 'batch' ? flatten(op.ops) : [op]));\n}\n\n/**\n * O motivo da recusa, ou nulo se o pedido não esbarra em nenhuma área travada.\n * Julga contra o board de antes do pedido: travar e destravar (`data.travada`)\n * passam sempre, e destravar e mover precisam ser dois pedidos. Cartão novo\n * (`node.add`) na área travada passa, com ou sem `abaId`, e mover para dentro\n * dela também: o cadeado protege o que já mora lá.\n */\nexport function lockViolation(doc: BoardDoc, ops: readonly Op[]): string | null {\n const locked = Object.values(doc.nodes).filter(isLockedSection);\n if (!locked.length) return null;\n const name = (node: BoardNode) => `\"${oneLine(tabTitle(node), 40)}\"`;\n const flat = flatten(ops);\n\n for (const op of flat) {\n if (op.type !== 'node.set' && op.type !== 'node.remove') continue;\n const node = doc.nodes[op.nodeId];\n if (!isLockedSection(node)) continue;\n if (op.type === 'node.remove') return `${name(node!)}: ${LOCKED_TEXT}. Nada foi apagado.`;\n if (LAYOUT_PATH.test(op.path)) return `${name(node!)}: ${LOCKED_TEXT}. Nada foi aplicado.`;\n }\n\n // Lote: dois ou mais nós da MESMA área travada mudando de lugar, de caixa ou (aba) de aba.\n const home = partitionOf(doc).home;\n const placed = new Set<string>();\n const restamped = new Set<string>();\n for (const op of flat) {\n if (op.type !== 'node.set') continue;\n const node = doc.nodes[op.nodeId];\n if (node === undefined || nodeKind(node) === 'section') continue;\n if (LAYOUT_PATH.test(op.path)) {\n placed.add(op.nodeId);\n } else if (op.path === STAMP_PATH) {\n // Gravar a aba onde o cartão já mora não o tira de lugar nenhum (é o carimbo em lote da\n // migração para o campo); trocar para outra aba, ou apagar o campo, tira.\n const sameHome = op.value.kind === 'value' && op.value.value === home.get(op.nodeId);\n if (!sameHome) restamped.add(op.nodeId);\n }\n }\n const moved = new Set([...placed, ...restamped]);\n if (moved.size < 2) return null;\n for (const section of locked) {\n const inside = isTabSection(section)\n ? [...moved].filter((id) => home.get(id) === section.id)\n : (() => {\n const outer = rectOf(section, false);\n return [...placed].filter((id) => contains(outer, rectOf(doc.nodes[id]!, true)));\n })();\n if (inside.length >= 2) {\n const stamp = inside.some((id) => restamped.has(id)) ? ' Trocar a aba (data.abaId) também conta como mexer na aba.' : '';\n return (\n `${name(section)}: ${LOCKED_TEXT}. Mudar ${inside.length} nós de dentro dela num pedido só não vale ` +\n `(um por vez segue valendo).${stamp} Nada foi aplicado.`\n );\n }\n }\n return null;\n}\n","/**\n * Ligação fina da menção de texto (`!!` de Bloco, `##` de texto) do Prompt.\n *\n * No navegador, quem desenha essa ligação é o conciliador de sessão do Canvas\n * (`apps/studio/src/session/sync-mentions.ts`, regra \"texto\"): para cada\n * `{{var}}` do molde (principal + `data.fields`) com entrada em `data.mentions`\n * cuja origem existe (nó E porta), garante UMA aresta `origem.porta → prompt.var`\n * com `data.viaMention = true`. Sem o board aberto ninguém roda o conciliador, e o\n * MCP gravava `data.mentions` sem a ligação. Aqui a mesma regra roda no MCP e as\n * operações vão no mesmo envelope da escrita.\n *\n * Réplica fiel da regra de texto: id determinístico (o mesmo que o navegador\n * gera, então os dois nunca duplicam), porta já ligada à mão não ganha segunda\n * aresta, ligação que fecharia ciclo não entra, e aresta `viaMention` sem\n * justificativa sai. As outras regras do conciliador (mídia `@@`, `prompt.refs →\n * gerador.refs`, seções `field:`) dependem das portas de cada modelo, que o MCP\n * não tem: as arestas delas nunca são tocadas aqui, e o navegador as concilia ao\n * abrir o board.\n */\nimport { KINDS, KIND_FIELD, knownPort } from './catalog';\nimport type { BoardDoc, BoardEdge, Json, Op } from './core';\n\nexport const VIA_MENTION = 'viaMention';\n/** Portas de mídia do Prompt: nomes fixos, nunca nascem de `{{var}}` (media-refs.ts). */\nconst PROMPT_REFS_INPUT = 'refs';\nconst PROMPT_MENTION_REFS_INPUT = 'mentionRefs';\n/** Chaves do `data` do Prompt que mudam o que a menção liga. */\nexport const MENTION_KEYS = ['template', 'fields', 'mentions'];\n\n// template.ts do Canvas: letras (com acento), números, hífen e sublinhado; espaço por dentro tolerado.\nconst VARIABLE_SOURCE = String.raw`\\{\\{[ \\t]*([\\p{L}\\p{N}_-]+)[ \\t]*\\}\\}`;\n\nexport function extractVariables(text: string): string[] {\n const names = new Set<string>();\n for (const m of text.matchAll(new RegExp(VARIABLE_SOURCE, 'gu'))) if (m[1]) names.add(m[1]);\n return [...names];\n}\n\n/** `allVariableNames` do Prompt: molde principal e depois cada seção de `data.fields`. */\nexport function allVariableNames(data: Record<string, Json>): string[] {\n const names = new Set(extractVariables(typeof data.template === 'string' ? data.template : ''));\n const fields = data.fields;\n if (fields && typeof fields === 'object' && !Array.isArray(fields)) {\n for (const [id, text] of Object.entries(fields)) {\n if (id !== '' && typeof text === 'string' && text !== '') for (const n of extractVariables(text)) names.add(n);\n }\n }\n return [...names];\n}\n\ntype Origin = { node: string; port: string };\n\n/** `normalizeMentions` do Canvas: entrada mal formada é ignorada. */\nexport function normalizeMentions(value: Json | undefined): Record<string, Origin> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return {};\n const out: Record<string, Origin> = {};\n for (const [name, entry] of Object.entries(value)) {\n if (!entry || typeof entry !== 'object' || Array.isArray(entry)) continue;\n const { node, port } = entry as Record<string, Json>;\n if (name.trim() !== '' && typeof node === 'string' && node !== '' && typeof port === 'string' && port !== '') {\n out[name] = { node, port };\n }\n }\n return out;\n}\n\ntype Link = Pick<BoardEdge, 'source' | 'sourcePort' | 'target' | 'targetPort'>;\n\n/** O id que o navegador dá à aresta de menção (SV3): o mesmo nos dois lados. */\nexport function mentionEdgeId(e: Link): string {\n return `mention:${e.source}:${e.sourcePort}>${e.target}:${e.targetPort}`;\n}\n\nconst edgeKey = (e: Link) => `${e.source}\\u0000${e.sourcePort}\\u0000${e.target}\\u0000${e.targetPort}`;\nconst isViaMention = (e: BoardEdge) => e.data[VIA_MENTION] === true;\n\nfunction reachability(doc: BoardDoc) {\n const adj = new Map<string, Set<string>>();\n const link = (s: string, t: string) => adj.set(s, (adj.get(s) ?? new Set()).add(t));\n for (const e of Object.values(doc.edges)) link(e.source, e.target);\n const reaches = (from: string, to: string) => {\n const seen = new Set<string>();\n const stack = [from];\n while (stack.length) {\n for (const next of adj.get(stack.pop()!) ?? []) {\n if (next === to) return true;\n if (!seen.has(next)) {\n seen.add(next);\n stack.push(next);\n }\n }\n }\n return false;\n };\n return { wouldCycle: (s: string, t: string) => s === t || reaches(t, s), accept: link };\n}\n\n/** A porta existe na origem? Tipo de portas dinâmicas passa (o navegador concilia ao abrir). */\nfunction originHasPort(doc: BoardDoc, origin: Origin): boolean {\n const node = doc.nodes[origin.node];\n if (!node) return false;\n const kind = typeof node.data[KIND_FIELD] === 'string' ? (node.data[KIND_FIELD] as string) : null;\n if (!kind || !KINDS[kind]) return false;\n return knownPort(kind, 'out', origin.port) !== false;\n}\n\nexport interface MentionSync {\n ops: Op[];\n added: Link[];\n removed: BoardEdge[];\n /** Menção que não virou ligação, com o motivo. */\n skipped: string[];\n}\n\n/**\n * Ligações de menção de texto dos Prompts `promptIds`, calculadas contra `doc`\n * JÁ com a escrita aplicada (data novo e ligações novas do mesmo passo).\n */\nexport function mentionEdgeOps(doc: BoardDoc, promptIds: string[], actorId: string | null, now = Date.now()): MentionSync {\n const out: MentionSync = { ops: [], added: [], removed: [], skipped: [] };\n const reach = reachability(doc);\n const edges = Object.values(doc.edges);\n const desired = new Map<string, Link>();\n const managed: BoardEdge[] = [];\n\n for (const id of [...new Set(promptIds)]) {\n const prompt = doc.nodes[id];\n if (!prompt || prompt.data[KIND_FIELD] !== 'prompt') continue;\n const into = edges.filter((e) => e.target === id);\n const vars = new Set(allVariableNames(prompt.data));\n const mentions = normalizeMentions(prompt.data.mentions);\n const mentionPorts = new Set(into.filter(isViaMention).map((e) => e.targetPort));\n managed.push(...into.filter((e) => isViaMention(e) && e.targetPort !== PROMPT_REFS_INPUT && e.targetPort !== PROMPT_MENTION_REFS_INPUT));\n\n for (const port of new Set([...vars, ...mentionPorts])) {\n if (port === PROMPT_REFS_INPUT || port === PROMPT_MENTION_REFS_INPUT) continue;\n const origin = vars.has(port) ? mentions[port] : undefined;\n if (!origin) continue;\n if (into.some((e) => e.targetPort === port && !isViaMention(e))) {\n out.skipped.push(`{{${port}}}: a porta já recebe uma ligação feita à mão`);\n continue;\n }\n if (!doc.nodes[origin.node]) {\n out.skipped.push(`{{${port}}}: o nó de origem ${origin.node} não existe`);\n continue;\n }\n if (!originHasPort(doc, origin)) {\n out.skipped.push(`{{${port}}}: a porta \"${origin.port}\" não existe em ${origin.node}`);\n continue;\n }\n if (reach.wouldCycle(origin.node, id)) {\n out.skipped.push(`{{${port}}}: a ligação fecharia um ciclo`);\n continue;\n }\n const link = { source: origin.node, sourcePort: origin.port, target: id, targetPort: port };\n desired.set(edgeKey(link), link);\n reach.accept(origin.node, id);\n }\n }\n\n // O diff, na ordem do navegador: primeiro sai o que perdeu a justificativa, depois entra o que falta.\n for (const e of managed) {\n if (desired.has(edgeKey(e))) continue;\n out.ops.push({ type: 'edge.remove', edgeId: e.id });\n out.removed.push(e);\n }\n for (const [key, link] of desired) {\n if (edges.some((e) => edgeKey(e) === key)) continue;\n const edgeId = mentionEdgeId(link);\n out.ops.push({\n type: 'edge.add',\n edgeId,\n edge: { id: edgeId, ...link, data: { [VIA_MENTION]: true }, createdBy: actorId, createdAt: now },\n });\n out.added.push(link);\n }\n return out;\n}\n\n/** Frase curta do que a menção ligou ou soltou, para o relatório da ferramenta. */\nexport function describeMentionSync(sync: MentionSync, name: (id: string) => string): string {\n const parts: string[] = [];\n if (sync.added.length) {\n parts.push(`ligação de menção criada: ${sync.added.map((l) => `${name(l.source)}.${l.sourcePort} → {{${l.targetPort}}}`).join(', ')}`);\n }\n if (sync.removed.length) parts.push(`ligação de menção removida: ${sync.removed.map((e) => `{{${e.targetPort}}}`).join(', ')}`);\n if (sync.skipped.length) parts.push(`menção sem ligação: ${sync.skipped.join('; ')}`);\n return parts.length ? ` ${parts.join('. ')}.` : '';\n}\n","import { createRequire } from 'node:module';\n\n/**\n * Versão anunciada no `serverInfo` do MCP. Nunca cravar a string à mão: ficou em\n * `0.8.0` de 0.9 até 0.17, e um MCP desatualizado passou por atualizado numa\n * investigação (29/jul/2026).\n *\n * O build injeta `__PKG_VERSION__` a partir do package.json daquele build, então\n * a constante não tem como divergir do pacote. O fallback lê `../package.json` em\n * runtime e serve ao modo dev (`tsx src/index.ts`), onde não há define.\n */\ndeclare const __PKG_VERSION__: string | undefined;\n\nconst require = createRequire(import.meta.url);\n\nfunction readVersion(): string {\n if (typeof __PKG_VERSION__ === 'string' && __PKG_VERSION__) return __PKG_VERSION__;\n try {\n const pkg = require('../package.json') as { version?: string };\n return pkg.version ?? '0.0.0-unknown';\n } catch {\n // Nunca derrubar o servidor por causa do número de versão.\n return '0.0.0-unknown';\n }\n}\n\nexport const VERSION: string = readVersion();\n","import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { Config } from './config';\nimport { BeplusClient } from './api/client';\nimport { registerGenerationTools } from './tools/generation';\nimport { registerUpscaleTools } from './tools/upscale';\nimport { registerAudioTools } from './tools/audio';\nimport { registerMusicTools } from './tools/music';\nimport { registerAccountTools } from './tools/account';\nimport { registerAnalyzeTools } from './tools/analyze';\nimport { registerProjectTools } from './tools/projects';\nimport { registerClientTools } from './tools/clients';\nimport { registerCallTools } from './tools/calls';\nimport { registerCanvasTools } from './tools/canvas';\nimport { VERSION } from './version';\n\n/**\n * Instruções do servidor (vão para o contexto do agente). Teto de 2 KB, cobrado\n * no teste: cada byte aqui é pago em toda conversa.\n */\nexport const SERVER_INSTRUCTIONS = [\n 'BePlus: tudo roda pela conta do usuário (diamantes, limites e histórico na plataforma).',\n 'Mídia: generate_* gasta diamantes; confira com estimate_cost antes de lotes grandes. Sem project, a geração cai no projeto ativo; billing:\"personal\" cobra do usuário.',\n 'Calls: search_calls acha, get_call traz a transcrição.',\n 'Canvas online (canvas_*): leia com canvas_read_board antes de editar e siga o estado lido. Cada edição vai num passo só; se outra pessoa mexeu nos mesmos nós, a ferramenta recusa e pede releitura. As canvas_* não geram mídia, exceto canvas_run: roda nós pela aba do Canvas aberta do usuário e gasta diamantes; max_diamonds é o teto que o usuário autorizou (dry_run só estima). Dê nome (label) aos nós, não invente tipos nem portas, e confirme antes de canvas_delete.',\n 'Cada aba é um plano: ao criar, passe aba (id da seção) em canvas_add_node e canvas_upload_media, senão o cartão pode cair em Avulsos. canvas_read_board com aba lê uma aba só.',\n 'Mostrar algo ao usuário (\"olha aqui\"): canvas_focus leva a aba do Canvas que ele está olhando até os nós e os seleciona uma vez, sem prender a aba, sem gasto e sem escrita no board. follow: true prende a aba na área até o ×: só se ele pedir.',\n 'Arrumar o board: o size gravado é piso (o cartão cresce com o conteúdo); use o tamanho \"medido\" do canvas_read_board. Área de revisão: canvas_arrange_rows (uma linha por versão); posição/tamanho em lote: canvas_update_nodes com layout_only. Não afirme que nada se sobrepõe com nó sem medida.',\n '\"Aplica os comentários\" do board: canvas_list_comments (abertos) → para cada um, leia o nó ancorado com canvas_read_board (node_ids), aplique a edição pelas canvas_* e feche com canvas_resolve_comment dizendo em uma frase o que fez. Comentário ambíguo ou com alvo sumido: responda com pergunta (canvas_reply_comment) e não resolva. Dúvida sua sobre um nó: canvas_comment ancorado nele. As escritas já saem espaçadas (60/min); se ainda vier limite, pare e diga de onde seguir.',\n].join('\\n');\n\nexport function buildServer(cfg: Config): { server: McpServer; client: BeplusClient } {\n // `version` vem do package.json via ./version — NUNCA cravar aqui.\n // Ficou em '0.8.0' de 0.9 até 0.17: o servidor anunciava 0.8.0 enquanto o\n // pacote publicado era 0.17.0, e isso fez um MCP genuinamente desatualizado\n // passar por atualizado numa investigação (29/jul/2026).\n const server = new McpServer({ name: 'beplus', version: VERSION }, { instructions: SERVER_INSTRUCTIONS });\n const client = new BeplusClient(cfg);\n\n registerGenerationTools(server, client, cfg);\n registerUpscaleTools(server, client, cfg);\n registerAudioTools(server, client, cfg);\n registerMusicTools(server, client, cfg);\n registerAccountTools(server, client, cfg);\n registerAnalyzeTools(server, client, cfg);\n registerProjectTools(server, client, cfg);\n registerClientTools(server, client, cfg);\n registerCallTools(server, client, cfg);\n registerCanvasTools(server, client, cfg);\n\n return { server, client };\n}\n","/**\n * Entrada `beplus-mcp/remote`: a API serve as mesmas ferramentas por HTTP (conector por URL, OAuth), sem Node na\n * máquina de quem usa. Quem chama já validou o token; aqui é só montar o servidor com ele e responder.\n */\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Config } from './config';\nimport { buildServer } from './server';\nimport { enableRemoteMode } from './remote';\nimport { VERSION } from './version';\n\nexport { VERSION };\n\nexport interface RemoteOptions {\n /** Origem da API que as ferramentas chamam (de dentro do container, o endereço interno). */\n baseUrl: string;\n /** Token de quem chamou (OAuth ou PAT), repassado a cada chamada da API: cobrança e permissão seguem a conta dele. */\n token: string;\n /** Corpo já lido pelo express.json(), para o transporte não tentar reler o stream. */\n body?: unknown;\n}\n\nfunction remoteConfig(opts: RemoteOptions): Config {\n const baseUrl = opts.baseUrl.replace(/\\/+$/, '');\n return {\n baseUrl,\n apiBase: `${baseUrl}/api/v1/mcp`,\n canvasBase: `${baseUrl}/api/v1/canvas`,\n token: opts.token,\n // imagem embutida vai inteira no JSON de resposta: menos e menores que no stdio\n inlineImages: true,\n inlineImageMax: 2,\n inlineImageMaxBytes: 1_500_000,\n verifyOnStart: false,\n costWarnThreshold: null,\n activeProject: null,\n };\n}\n\n/**\n * Sem sessão de propósito (um servidor e um transporte por requisição), igual ao conector da Central de Inteligência:\n * o container reinicia em todo deploy e sessão em memória viraria \"funciona até o deploy\".\n */\nexport async function handleRemoteMcp(req: IncomingMessage, res: ServerResponse, opts: RemoteOptions): Promise<void> {\n enableRemoteMode();\n const { server } = buildServer(remoteConfig(opts));\n // sem stream do servidor para empurrar, resposta em application/json evita buffering de SSE em proxy\n const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true });\n res.on('close', () => {\n void transport.close();\n void server.close();\n });\n await server.connect(transport);\n await transport.handleRequest(req, res, opts.body);\n}\n"],"mappings":"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","names":["UsedValueState","error","body","mergeValues","Type","error","DataType","_a","body","resolveRef","resolve","ipv6","isIP","parse","resolve","isIP","Ajv","cacheKey","error","error","error","error","error","error","error","error","error","error","error","error","error","error","error","error","error","error","fmt","DiscrError","error","required","Ajv","date","time","error","fmt","crypto","error","body","resolve","initializer","array","object","Class","config","error","issue","version","time","timeRegex","inst","payload","payload","inst","payload","payload","checks","isAborted","result","_","inst","base64","payload","payload","payload","payload","result","isObject","allowsEval","r","results","left","right","payload","result","payload","payload","output","result","payload","result","payload","left","payload","r","issue","Class","Class","_emoji","Class","Class","Class","_null","Class","Class","Class","Class","id","schema","params","gen","date","datetime","duration","time","datetime","date","time","duration","initializer","issue","issues","parse","parseAsync","safeParse","safeParseAsync","def","parse","safeParse","parseAsync","safeParseAsync","check","_emoji","datetime","date","time","duration","string","number","boolean","_null","payload","issue","output","payload","issue","string","number","ErrorCode","number","string","string","boolean","number","string","_null","boolean","string","number","boolean","error","resolve","NEVER","ZodType","ZodArray","ZodBoolean","ZodCatch","ZodDefault","ZodDiscriminatedUnion","ZodEnum","ZodError","ZodIntersection","ZodLiteral","ZodNever","ZodNull","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodReadonly","ZodRecord","ZodString","ZodUnion","ZodUnknown","custom","en_default","getParsedType","util","assertIs","assertNever","object","joinValues","array","objectUtil","getParsedType","ZodError","issue","error","issue","en_default","en_default","issue","en_default","errorUtil","error","ZodError","errorMap","ZodType","getParsedType","check","ZodOptional","ZodNullable","ZodArray","ZodUnion","ZodIntersection","transform","ZodDefault","ZodCatch","ZodReadonly","version","isValidJWT","base64","ZodString","_ZodString","parsedType","ctx","floatSafeRemainder","ZodNumber","ZodBoolean","ZodNull","ZodUnknown","ZodNever","result","ZodObject","issue","issues","ZodLiteral","ZodEnum","ZodDiscriminatedUnion","mergeValues","ZodRecord","elements","en_default","processed","preprocess","ZodOptional","ZodType","parsedType","ZodNullable","ZodDefault","ZodCatch","result","ZodError","ZodReadonly","custom","check","r","ZodObject","ZodFirstPartyTypeKind","custom","ZodString","ZodNumber","ZodBoolean","ZodNull","ZodUnknown","ZodNever","ZodArray","ZodObject","ZodUnion","ZodDiscriminatedUnion","ZodIntersection","ZodRecord","ZodLiteral","ZodEnum","ZodOptional","ZodNullable","NEVER","object","object","safeParse","result","safeParseAsync","error","def","check","check","parsedType","emojiRegex","check","literal","object","types","x","base","check","required","name","schema","safeParse","error","task","resolve","safeParse","jsonrpcNotification","isPlainObject","Ajv","_addFormats","safeParse","error","McpZodTypeKind","config","error","safeParseAsync","resolve","config","ZodOptional","body","crypto","token","body","readFile","stat","homedir","homedir","stat","readFile","unknown","sleep","pick","open","stat","extname","isAbsolute","resolve","homedir","fileURLToPath","toLocalPath","open","fmt","duration","width","version","dur","stat","dim","IMAGE_BUDGET_MS","VIDEO_BUDGET_MS","width","duration","body","width","duration","who","body","boardId","commentId","width","boardId","nodeId","y","right","isFiniteNumber","record","resolve","nodeId","oneLine","who","nodeId","oneLine","emoji","open","oneLine","oneLine","text","randomUUID","basename","extname","extname","basename","remote","randomUUID","nodeId","oneLine","boardId","randomUUID","boardId","fmt","cached","unknown","explain","randomUUID","partial","nodeId","who","flatten","oneLine","mentions","boardId","nodeIdArg","build","oneLine","nodeId","nodes","at","isObject","require"]}
|