import { createRequire } from "node:module"; var __create = Object.create; var __getProtoOf = Object.getPrototypeOf; var __defProp = Object.defineProperty; var __getOwnPropNames = Object.getOwnPropertyNames; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __hasOwnProp = Object.prototype.hasOwnProperty; var __toESM = (mod, isNodeMode, target) => { target = mod != null ? __create(__getProtoOf(mod)) : {}; const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target; for (let key of __getOwnPropNames(mod)) if (!__hasOwnProp.call(to, key)) __defProp(to, key, { get: () => mod[key], enumerable: true }); return to; }; var __moduleCache = /* @__PURE__ */ new WeakMap; var __toCommonJS = (from) => { var entry = __moduleCache.get(from), desc; if (entry) return entry; entry = __defProp({}, "__esModule", { value: true }); if (from && typeof from === "object" || typeof from === "function") __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable })); __moduleCache.set(from, entry); return entry; }; var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true, configurable: true, set: (newValue) => all[name] = () => newValue }); }; var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res); var __require = /* @__PURE__ */ createRequire(import.meta.url); // node_modules/ajv/dist/compile/codegen/code.js var require_code = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined; class _CodeOrName { } exports._CodeOrName = _CodeOrName; exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; class Name extends _CodeOrName { constructor(s) { super(); if (!exports.IDENTIFIER.test(s)) throw new Error("CodeGen: name must be a valid identifier"); this.str = s; } toString() { return this.str; } emptyStr() { return false; } get names() { return { [this.str]: 1 }; } } exports.Name = Name; class _Code extends _CodeOrName { constructor(code) { super(); this._items = typeof code === "string" ? [code] : code; } toString() { return this.str; } emptyStr() { if (this._items.length > 1) return false; const item = this._items[0]; return item === "" || item === '""'; } get str() { var _a2; return (_a2 = this._str) !== null && _a2 !== undefined ? _a2 : this._str = this._items.reduce((s, c) => `${s}${c}`, ""); } get names() { var _a2; return (_a2 = this._names) !== null && _a2 !== undefined ? _a2 : this._names = this._items.reduce((names, c) => { if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1; return names; }, {}); } } exports._Code = _Code; exports.nil = new _Code(""); function _(strs, ...args) { const code = [strs[0]]; let i = 0; while (i < args.length) { addCodeArg(code, args[i]); code.push(strs[++i]); } return new _Code(code); } exports._ = _; var plus = new _Code("+"); function str(strs, ...args) { const expr = [safeStringify(strs[0])]; let i = 0; while (i < args.length) { expr.push(plus); addCodeArg(expr, args[i]); expr.push(plus, safeStringify(strs[++i])); } optimize(expr); return new _Code(expr); } exports.str = str; function addCodeArg(code, arg) { if (arg instanceof _Code) code.push(...arg._items); else if (arg instanceof Name) code.push(arg); else code.push(interpolate(arg)); } exports.addCodeArg = addCodeArg; function optimize(expr) { let i = 1; while (i < expr.length - 1) { if (expr[i] === plus) { const res = mergeExprItems(expr[i - 1], expr[i + 1]); if (res !== undefined) { expr.splice(i - 1, 3, res); continue; } expr[i++] = "+"; } i++; } } function mergeExprItems(a, b) { if (b === '""') return a; if (a === '""') return b; if (typeof a == "string") { if (b instanceof Name || a[a.length - 1] !== '"') return; if (typeof b != "string") return `${a.slice(0, -1)}${b}"`; if (b[0] === '"') return a.slice(0, -1) + b.slice(1); return; } if (typeof b == "string" && b[0] === '"' && !(a instanceof Name)) return `"${a}${b.slice(1)}`; return; } function strConcat(c1, c2) { return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`; } exports.strConcat = strConcat; function interpolate(x) { return typeof x == "number" || typeof x == "boolean" || x === null ? x : safeStringify(Array.isArray(x) ? x.join(",") : x); } function stringify(x) { return new _Code(safeStringify(x)); } exports.stringify = stringify; function safeStringify(x) { return JSON.stringify(x).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); } exports.safeStringify = safeStringify; function getProperty(key) { return typeof key == "string" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`; } exports.getProperty = getProperty; function getEsmExportName(key) { if (typeof key == "string" && exports.IDENTIFIER.test(key)) { return new _Code(`${key}`); } throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`); } exports.getEsmExportName = getEsmExportName; function regexpCode(rx) { return new _Code(rx.toString()); } exports.regexpCode = regexpCode; }); // node_modules/ajv/dist/compile/codegen/scope.js var require_scope = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined; var code_1 = require_code(); class ValueError extends Error { constructor(name) { super(`CodeGen: "code" for ${name} not defined`); this.value = name.value; } } var UsedValueState; (function(UsedValueState2) { UsedValueState2[UsedValueState2["Started"] = 0] = "Started"; UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed"; })(UsedValueState || (exports.UsedValueState = UsedValueState = {})); exports.varKinds = { const: new code_1.Name("const"), let: new code_1.Name("let"), var: new code_1.Name("var") }; class Scope { constructor({ prefixes, parent } = {}) { this._names = {}; this._prefixes = prefixes; this._parent = parent; } toName(nameOrPrefix) { return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix); } name(prefix) { return new code_1.Name(this._newName(prefix)); } _newName(prefix) { const ng = this._names[prefix] || this._nameGroup(prefix); return `${prefix}${ng.index++}`; } _nameGroup(prefix) { var _a2, _b; if (((_b = (_a2 = this._parent) === null || _a2 === undefined ? undefined : _a2._prefixes) === null || _b === undefined ? undefined : _b.has(prefix)) || this._prefixes && !this._prefixes.has(prefix)) { throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`); } return this._names[prefix] = { prefix, index: 0 }; } } exports.Scope = Scope; class ValueScopeName extends code_1.Name { constructor(prefix, nameStr) { super(nameStr); this.prefix = prefix; } setValue(value, { property, itemIndex }) { this.value = value; this.scopePath = (0, code_1._)`.${new code_1.Name(property)}[${itemIndex}]`; } } exports.ValueScopeName = ValueScopeName; var line = (0, code_1._)`\n`; class ValueScope extends Scope { constructor(opts) { super(opts); this._values = {}; this._scope = opts.scope; this.opts = { ...opts, _n: opts.lines ? line : code_1.nil }; } get() { return this._scope; } name(prefix) { return new ValueScopeName(prefix, this._newName(prefix)); } value(nameOrPrefix, value) { var _a2; if (value.ref === undefined) throw new Error("CodeGen: ref must be passed in value"); const name = this.toName(nameOrPrefix); const { prefix } = name; const valueKey = (_a2 = value.key) !== null && _a2 !== undefined ? _a2 : value.ref; let vs = this._values[prefix]; if (vs) { const _name = vs.get(valueKey); if (_name) return _name; } else { vs = this._values[prefix] = new Map; } vs.set(valueKey, name); const s = this._scope[prefix] || (this._scope[prefix] = []); const itemIndex = s.length; s[itemIndex] = value.ref; name.setValue(value, { property: prefix, itemIndex }); return name; } getValue(prefix, keyOrRef) { const vs = this._values[prefix]; if (!vs) return; return vs.get(keyOrRef); } scopeRefs(scopeName, values = this._values) { return this._reduceValues(values, (name) => { if (name.scopePath === undefined) throw new Error(`CodeGen: name "${name}" has no value`); return (0, code_1._)`${scopeName}${name.scopePath}`; }); } scopeCode(values = this._values, usedValues, getCode) { return this._reduceValues(values, (name) => { if (name.value === undefined) throw new Error(`CodeGen: name "${name}" has no value`); return name.value.code; }, usedValues, getCode); } _reduceValues(values, valueCode, usedValues = {}, getCode) { let code = code_1.nil; for (const prefix in values) { const vs = values[prefix]; if (!vs) continue; const nameSet = usedValues[prefix] = usedValues[prefix] || new Map; vs.forEach((name) => { if (nameSet.has(name)) return; nameSet.set(name, UsedValueState.Started); let c = valueCode(name); if (c) { const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const; code = (0, code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`; } else if (c = getCode === null || getCode === undefined ? undefined : getCode(name)) { code = (0, code_1._)`${code}${c}${this.opts._n}`; } else { throw new ValueError(name); } nameSet.set(name, UsedValueState.Completed); }); } return code; } } exports.ValueScope = ValueScope; }); // node_modules/ajv/dist/compile/codegen/index.js var require_codegen = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined; var code_1 = require_code(); var scope_1 = require_scope(); var code_2 = require_code(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return code_2._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return code_2.str; } }); Object.defineProperty(exports, "strConcat", { enumerable: true, get: function() { return code_2.strConcat; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return code_2.nil; } }); Object.defineProperty(exports, "getProperty", { enumerable: true, get: function() { return code_2.getProperty; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return code_2.stringify; } }); Object.defineProperty(exports, "regexpCode", { enumerable: true, get: function() { return code_2.regexpCode; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return code_2.Name; } }); var scope_2 = require_scope(); Object.defineProperty(exports, "Scope", { enumerable: true, get: function() { return scope_2.Scope; } }); Object.defineProperty(exports, "ValueScope", { enumerable: true, get: function() { return scope_2.ValueScope; } }); Object.defineProperty(exports, "ValueScopeName", { enumerable: true, get: function() { return scope_2.ValueScopeName; } }); Object.defineProperty(exports, "varKinds", { enumerable: true, get: function() { return scope_2.varKinds; } }); exports.operators = { GT: new code_1._Code(">"), GTE: new code_1._Code(">="), LT: new code_1._Code("<"), LTE: new code_1._Code("<="), EQ: new code_1._Code("==="), NEQ: new code_1._Code("!=="), NOT: new code_1._Code("!"), OR: new code_1._Code("||"), AND: new code_1._Code("&&"), ADD: new code_1._Code("+") }; class Node { optimizeNodes() { return this; } optimizeNames(_names, _constants) { return this; } } class Def extends Node { constructor(varKind, name, rhs) { super(); this.varKind = varKind; this.name = name; this.rhs = rhs; } render({ es5, _n }) { const varKind = es5 ? scope_1.varKinds.var : this.varKind; const rhs = this.rhs === undefined ? "" : ` = ${this.rhs}`; return `${varKind} ${this.name}${rhs};` + _n; } optimizeNames(names, constants) { if (!names[this.name.str]) return; if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants); return this; } get names() { return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {}; } } class Assign extends Node { constructor(lhs, rhs, sideEffects) { super(); this.lhs = lhs; this.rhs = rhs; this.sideEffects = sideEffects; } render({ _n }) { return `${this.lhs} = ${this.rhs};` + _n; } optimizeNames(names, constants) { if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects) return; this.rhs = optimizeExpr(this.rhs, names, constants); return this; } get names() { const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names }; return addExprNames(names, this.rhs); } } class AssignOp extends Assign { constructor(lhs, op, rhs, sideEffects) { super(lhs, rhs, sideEffects); this.op = op; } render({ _n }) { return `${this.lhs} ${this.op}= ${this.rhs};` + _n; } } class Label extends Node { constructor(label) { super(); this.label = label; this.names = {}; } render({ _n }) { return `${this.label}:` + _n; } } class Break extends Node { constructor(label) { super(); this.label = label; this.names = {}; } render({ _n }) { const label = this.label ? ` ${this.label}` : ""; return `break${label};` + _n; } } class Throw extends Node { constructor(error2) { super(); this.error = error2; } render({ _n }) { return `throw ${this.error};` + _n; } get names() { return this.error.names; } } class AnyCode extends Node { constructor(code) { super(); this.code = code; } render({ _n }) { return `${this.code};` + _n; } optimizeNodes() { return `${this.code}` ? this : undefined; } optimizeNames(names, constants) { this.code = optimizeExpr(this.code, names, constants); return this; } get names() { return this.code instanceof code_1._CodeOrName ? this.code.names : {}; } } class ParentNode extends Node { constructor(nodes = []) { super(); this.nodes = nodes; } render(opts) { return this.nodes.reduce((code, n) => code + n.render(opts), ""); } optimizeNodes() { const { nodes } = this; let i = nodes.length; while (i--) { const n = nodes[i].optimizeNodes(); if (Array.isArray(n)) nodes.splice(i, 1, ...n); else if (n) nodes[i] = n; else nodes.splice(i, 1); } return nodes.length > 0 ? this : undefined; } optimizeNames(names, constants) { const { nodes } = this; let i = nodes.length; while (i--) { const n = nodes[i]; if (n.optimizeNames(names, constants)) continue; subtractNames(names, n.names); nodes.splice(i, 1); } return nodes.length > 0 ? this : undefined; } get names() { return this.nodes.reduce((names, n) => addNames(names, n.names), {}); } } class BlockNode extends ParentNode { render(opts) { return "{" + opts._n + super.render(opts) + "}" + opts._n; } } class Root extends ParentNode { } class Else extends BlockNode { } Else.kind = "else"; class If extends BlockNode { constructor(condition, nodes) { super(nodes); this.condition = condition; } render(opts) { let code = `if(${this.condition})` + super.render(opts); if (this.else) code += "else " + this.else.render(opts); return code; } optimizeNodes() { super.optimizeNodes(); const cond = this.condition; if (cond === true) return this.nodes; let e = this.else; if (e) { const ns = e.optimizeNodes(); e = this.else = Array.isArray(ns) ? new Else(ns) : ns; } if (e) { if (cond === false) return e instanceof If ? e : e.nodes; if (this.nodes.length) return this; return new If(not(cond), e instanceof If ? [e] : e.nodes); } if (cond === false || !this.nodes.length) return; return this; } optimizeNames(names, constants) { var _a2; this.else = (_a2 = this.else) === null || _a2 === undefined ? undefined : _a2.optimizeNames(names, constants); if (!(super.optimizeNames(names, constants) || this.else)) return; this.condition = optimizeExpr(this.condition, names, constants); return this; } get names() { const names = super.names; addExprNames(names, this.condition); if (this.else) addNames(names, this.else.names); return names; } } If.kind = "if"; class For extends BlockNode { } For.kind = "for"; class ForLoop extends For { constructor(iteration) { super(); this.iteration = iteration; } render(opts) { return `for(${this.iteration})` + super.render(opts); } optimizeNames(names, constants) { if (!super.optimizeNames(names, constants)) return; this.iteration = optimizeExpr(this.iteration, names, constants); return this; } get names() { return addNames(super.names, this.iteration.names); } } class ForRange extends For { constructor(varKind, name, from, to) { super(); this.varKind = varKind; this.name = name; this.from = from; this.to = to; } render(opts) { const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind; const { name, from, to } = this; return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts); } get names() { const names = addExprNames(super.names, this.from); return addExprNames(names, this.to); } } class ForIter extends For { constructor(loop, varKind, name, iterable) { super(); this.loop = loop; this.varKind = varKind; this.name = name; this.iterable = iterable; } render(opts) { return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts); } optimizeNames(names, constants) { if (!super.optimizeNames(names, constants)) return; this.iterable = optimizeExpr(this.iterable, names, constants); return this; } get names() { return addNames(super.names, this.iterable.names); } } class Func extends BlockNode { constructor(name, args, async) { super(); this.name = name; this.args = args; this.async = async; } render(opts) { const _async = this.async ? "async " : ""; return `${_async}function ${this.name}(${this.args})` + super.render(opts); } } Func.kind = "func"; class Return extends ParentNode { render(opts) { return "return " + super.render(opts); } } Return.kind = "return"; class Try extends BlockNode { render(opts) { let code = "try" + super.render(opts); if (this.catch) code += this.catch.render(opts); if (this.finally) code += this.finally.render(opts); return code; } optimizeNodes() { var _a2, _b; super.optimizeNodes(); (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNodes(); (_b = this.finally) === null || _b === undefined || _b.optimizeNodes(); return this; } optimizeNames(names, constants) { var _a2, _b; super.optimizeNames(names, constants); (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNames(names, constants); (_b = this.finally) === null || _b === undefined || _b.optimizeNames(names, constants); return this; } get names() { const names = super.names; if (this.catch) addNames(names, this.catch.names); if (this.finally) addNames(names, this.finally.names); return names; } } class Catch extends BlockNode { constructor(error2) { super(); this.error = error2; } render(opts) { return `catch(${this.error})` + super.render(opts); } } Catch.kind = "catch"; class Finally extends BlockNode { render(opts) { return "finally" + super.render(opts); } } Finally.kind = "finally"; class CodeGen { constructor(extScope, opts = {}) { this._values = {}; this._blockStarts = []; this._constants = {}; this.opts = { ...opts, _n: opts.lines ? ` ` : "" }; this._extScope = extScope; this._scope = new scope_1.Scope({ parent: extScope }); this._nodes = [new Root]; } toString() { return this._root.render(this.opts); } name(prefix) { return this._scope.name(prefix); } scopeName(prefix) { return this._extScope.name(prefix); } scopeValue(prefixOrName, value) { const name = this._extScope.value(prefixOrName, value); const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set); vs.add(name); return name; } getScopeValue(prefix, keyOrRef) { return this._extScope.getValue(prefix, keyOrRef); } scopeRefs(scopeName) { return this._extScope.scopeRefs(scopeName, this._values); } scopeCode() { return this._extScope.scopeCode(this._values); } _def(varKind, nameOrPrefix, rhs, constant) { const name = this._scope.toName(nameOrPrefix); if (rhs !== undefined && constant) this._constants[name.str] = rhs; this._leafNode(new Def(varKind, name, rhs)); return name; } const(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant); } let(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant); } var(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant); } assign(lhs, rhs, sideEffects) { return this._leafNode(new Assign(lhs, rhs, sideEffects)); } add(lhs, rhs) { return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs)); } code(c) { if (typeof c == "function") c(); else if (c !== code_1.nil) this._leafNode(new AnyCode(c)); return this; } object(...keyValues) { const code = ["{"]; for (const [key, value] of keyValues) { if (code.length > 1) code.push(","); code.push(key); if (key !== value || this.opts.es5) { code.push(":"); (0, code_1.addCodeArg)(code, value); } } code.push("}"); return new code_1._Code(code); } if(condition, thenBody, elseBody) { this._blockNode(new If(condition)); if (thenBody && elseBody) { this.code(thenBody).else().code(elseBody).endIf(); } else if (thenBody) { this.code(thenBody).endIf(); } else if (elseBody) { throw new Error('CodeGen: "else" body without "then" body'); } return this; } elseIf(condition) { return this._elseNode(new If(condition)); } else() { return this._elseNode(new Else); } endIf() { return this._endBlockNode(If, Else); } _for(node, forBody) { this._blockNode(node); if (forBody) this.code(forBody).endFor(); return this; } for(iteration, forBody) { return this._for(new ForLoop(iteration), forBody); } forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) { const name = this._scope.toName(nameOrPrefix); return this._for(new ForRange(varKind, name, from, to), () => forBody(name)); } forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) { const name = this._scope.toName(nameOrPrefix); if (this.opts.es5) { const arr = iterable instanceof code_1.Name ? iterable : this.var("_arr", iterable); return this.forRange("_i", 0, (0, code_1._)`${arr}.length`, (i) => { this.var(name, (0, code_1._)`${arr}[${i}]`); forBody(name); }); } return this._for(new ForIter("of", varKind, name, iterable), () => forBody(name)); } forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) { if (this.opts.ownProperties) { return this.forOf(nameOrPrefix, (0, code_1._)`Object.keys(${obj})`, forBody); } const name = this._scope.toName(nameOrPrefix); return this._for(new ForIter("in", varKind, name, obj), () => forBody(name)); } endFor() { return this._endBlockNode(For); } label(label) { return this._leafNode(new Label(label)); } break(label) { return this._leafNode(new Break(label)); } return(value) { const node = new Return; this._blockNode(node); this.code(value); if (node.nodes.length !== 1) throw new Error('CodeGen: "return" should have one node'); return this._endBlockNode(Return); } try(tryBody, catchCode, finallyCode) { if (!catchCode && !finallyCode) throw new Error('CodeGen: "try" without "catch" and "finally"'); const node = new Try; this._blockNode(node); this.code(tryBody); if (catchCode) { const error2 = this.name("e"); this._currNode = node.catch = new Catch(error2); catchCode(error2); } if (finallyCode) { this._currNode = node.finally = new Finally; this.code(finallyCode); } return this._endBlockNode(Catch, Finally); } throw(error2) { return this._leafNode(new Throw(error2)); } block(body, nodeCount) { this._blockStarts.push(this._nodes.length); if (body) this.code(body).endBlock(nodeCount); return this; } endBlock(nodeCount) { const len = this._blockStarts.pop(); if (len === undefined) throw new Error("CodeGen: not in self-balancing block"); const toClose = this._nodes.length - len; if (toClose < 0 || nodeCount !== undefined && toClose !== nodeCount) { throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`); } this._nodes.length = len; return this; } func(name, args = code_1.nil, async, funcBody) { this._blockNode(new Func(name, args, async)); if (funcBody) this.code(funcBody).endFunc(); return this; } endFunc() { return this._endBlockNode(Func); } optimize(n = 1) { while (n-- > 0) { this._root.optimizeNodes(); this._root.optimizeNames(this._root.names, this._constants); } } _leafNode(node) { this._currNode.nodes.push(node); return this; } _blockNode(node) { this._currNode.nodes.push(node); this._nodes.push(node); } _endBlockNode(N1, N2) { const n = this._currNode; if (n instanceof N1 || N2 && n instanceof N2) { this._nodes.pop(); return this; } throw new Error(`CodeGen: not in block "${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}"`); } _elseNode(node) { const n = this._currNode; if (!(n instanceof If)) { throw new Error('CodeGen: "else" without "if"'); } this._currNode = n.else = node; return this; } get _root() { return this._nodes[0]; } get _currNode() { const ns = this._nodes; return ns[ns.length - 1]; } set _currNode(node) { const ns = this._nodes; ns[ns.length - 1] = node; } } exports.CodeGen = CodeGen; function addNames(names, from) { for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0); return names; } function addExprNames(names, from) { return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names; } function optimizeExpr(expr, names, constants) { if (expr instanceof code_1.Name) return replaceName(expr); if (!canOptimize(expr)) return expr; return new code_1._Code(expr._items.reduce((items, c) => { if (c instanceof code_1.Name) c = replaceName(c); if (c instanceof code_1._Code) items.push(...c._items); else items.push(c); return items; }, [])); function replaceName(n) { const c = constants[n.str]; if (c === undefined || names[n.str] !== 1) return n; delete names[n.str]; return c; } function canOptimize(e) { return e instanceof code_1._Code && e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined); } } function subtractNames(names, from) { for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0); } function not(x) { return typeof x == "boolean" || typeof x == "number" || x === null ? !x : (0, code_1._)`!${par(x)}`; } exports.not = not; var andCode = mappend(exports.operators.AND); function and(...args) { return args.reduce(andCode); } exports.and = and; var orCode = mappend(exports.operators.OR); function or(...args) { return args.reduce(orCode); } exports.or = or; function mappend(op) { return (x, y) => x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._)`${par(x)} ${op} ${par(y)}`; } function par(x) { return x instanceof code_1.Name ? x : (0, code_1._)`(${x})`; } }); // node_modules/ajv/dist/compile/util.js var require_util = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined; var codegen_1 = require_codegen(); var code_1 = require_code(); function toHash(arr) { const hash = {}; for (const item of arr) hash[item] = true; return hash; } exports.toHash = toHash; function alwaysValidSchema(it, schema) { if (typeof schema == "boolean") return schema; if (Object.keys(schema).length === 0) return true; checkUnknownRules(it, schema); return !schemaHasRules(schema, it.self.RULES.all); } exports.alwaysValidSchema = alwaysValidSchema; function checkUnknownRules(it, schema = it.schema) { const { opts, self: self2 } = it; if (!opts.strictSchema) return; if (typeof schema === "boolean") return; const rules = self2.RULES.keywords; for (const key in schema) { if (!rules[key]) checkStrictMode(it, `unknown keyword: "${key}"`); } } exports.checkUnknownRules = checkUnknownRules; function schemaHasRules(schema, rules) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (rules[key]) return true; return false; } exports.schemaHasRules = schemaHasRules; function schemaHasRulesButRef(schema, RULES) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (key !== "$ref" && RULES.all[key]) return true; return false; } exports.schemaHasRulesButRef = schemaHasRulesButRef; function schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) { if (!$data) { if (typeof schema == "number" || typeof schema == "boolean") return schema; if (typeof schema == "string") return (0, codegen_1._)`${schema}`; } return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`; } exports.schemaRefOrVal = schemaRefOrVal; function unescapeFragment(str) { return unescapeJsonPointer(decodeURIComponent(str)); } exports.unescapeFragment = unescapeFragment; function escapeFragment(str) { return encodeURIComponent(escapeJsonPointer(str)); } exports.escapeFragment = escapeFragment; function escapeJsonPointer(str) { if (typeof str == "number") return `${str}`; return str.replace(/~/g, "~0").replace(/\//g, "~1"); } exports.escapeJsonPointer = escapeJsonPointer; function unescapeJsonPointer(str) { return str.replace(/~1/g, "/").replace(/~0/g, "~"); } exports.unescapeJsonPointer = unescapeJsonPointer; function eachItem(xs, f) { if (Array.isArray(xs)) { for (const x of xs) f(x); } else { f(xs); } } exports.eachItem = eachItem; function makeMergeEvaluated({ mergeNames, mergeToName, mergeValues: mergeValues2, resultToName }) { return (gen, from, to, toName) => { const res = to === undefined ? from : to instanceof codegen_1.Name ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to) : from instanceof codegen_1.Name ? (mergeToName(gen, to, from), from) : mergeValues2(from, to); return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res; }; } exports.mergeEvaluated = { props: makeMergeEvaluated({ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => { gen.if((0, codegen_1._)`${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._)`${to} || {}`).code((0, codegen_1._)`Object.assign(${to}, ${from})`)); }), mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => { if (from === true) { gen.assign(to, true); } else { gen.assign(to, (0, codegen_1._)`${to} || {}`); setEvaluated(gen, to, from); } }), mergeValues: (from, to) => from === true ? true : { ...from, ...to }, resultToName: evaluatedPropsToName }), items: makeMergeEvaluated({ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)), mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._)`${to} > ${from} ? ${to} : ${from}`)), mergeValues: (from, to) => from === true ? true : Math.max(from, to), resultToName: (gen, items) => gen.var("items", items) }) }; function evaluatedPropsToName(gen, ps) { if (ps === true) return gen.var("props", true); const props = gen.var("props", (0, codegen_1._)`{}`); if (ps !== undefined) setEvaluated(gen, props, ps); return props; } exports.evaluatedPropsToName = evaluatedPropsToName; function setEvaluated(gen, props, ps) { Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true)); } exports.setEvaluated = setEvaluated; var snippets = {}; function useFunc(gen, f) { return gen.scopeValue("func", { ref: f, code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)) }); } exports.useFunc = useFunc; var Type; (function(Type2) { Type2[Type2["Num"] = 0] = "Num"; Type2[Type2["Str"] = 1] = "Str"; })(Type || (exports.Type = Type = {})); function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { if (dataProp instanceof codegen_1.Name) { const isNumber = dataPropType === Type.Num; return jsPropertySyntax ? isNumber ? (0, codegen_1._)`"[" + ${dataProp} + "]"` : (0, codegen_1._)`"['" + ${dataProp} + "']"` : isNumber ? (0, codegen_1._)`"/" + ${dataProp}` : (0, codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`; } return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : "/" + escapeJsonPointer(dataProp); } exports.getErrorPath = getErrorPath; function checkStrictMode(it, msg, mode = it.opts.strictSchema) { if (!mode) return; msg = `strict mode: ${msg}`; if (mode === true) throw new Error(msg); it.self.logger.warn(msg); } exports.checkStrictMode = checkStrictMode; }); // node_modules/ajv/dist/compile/names.js var require_names = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var names = { data: new codegen_1.Name("data"), valCxt: new codegen_1.Name("valCxt"), instancePath: new codegen_1.Name("instancePath"), parentData: new codegen_1.Name("parentData"), parentDataProperty: new codegen_1.Name("parentDataProperty"), rootData: new codegen_1.Name("rootData"), dynamicAnchors: new codegen_1.Name("dynamicAnchors"), vErrors: new codegen_1.Name("vErrors"), errors: new codegen_1.Name("errors"), this: new codegen_1.Name("this"), self: new codegen_1.Name("self"), scope: new codegen_1.Name("scope"), json: new codegen_1.Name("json"), jsonPos: new codegen_1.Name("jsonPos"), jsonLen: new codegen_1.Name("jsonLen"), jsonPart: new codegen_1.Name("jsonPart") }; exports.default = names; }); // node_modules/ajv/dist/compile/errors.js var require_errors = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); var names_1 = require_names(); exports.keywordError = { message: ({ keyword }) => (0, codegen_1.str)`must pass "${keyword}" keyword validation` }; exports.keyword$DataError = { message: ({ keyword, schemaType }) => schemaType ? (0, codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)` : (0, codegen_1.str)`"${keyword}" keyword is invalid ($data)` }; function reportError(cxt, error2 = exports.keywordError, errorPaths, overrideAllErrors) { const { it } = cxt; const { gen, compositeRule, allErrors } = it; const errObj = errorObjectCode(cxt, error2, errorPaths); if (overrideAllErrors !== null && overrideAllErrors !== undefined ? overrideAllErrors : compositeRule || allErrors) { addError(gen, errObj); } else { returnErrors(it, (0, codegen_1._)`[${errObj}]`); } } exports.reportError = reportError; function reportExtraError(cxt, error2 = exports.keywordError, errorPaths) { const { it } = cxt; const { gen, compositeRule, allErrors } = it; const errObj = errorObjectCode(cxt, error2, errorPaths); addError(gen, errObj); if (!(compositeRule || allErrors)) { returnErrors(it, names_1.default.vErrors); } } exports.reportExtraError = reportExtraError; function resetErrorsCount(gen, errsCount) { gen.assign(names_1.default.errors, errsCount); gen.if((0, codegen_1._)`${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._)`${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null))); } exports.resetErrorsCount = resetErrorsCount; function extendErrors({ gen, keyword, schemaValue, data, errsCount, it }) { if (errsCount === undefined) throw new Error("ajv implementation error"); const err = gen.name("err"); gen.forRange("i", errsCount, names_1.default.errors, (i) => { gen.const(err, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`); gen.if((0, codegen_1._)`${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath))); gen.assign((0, codegen_1._)`${err}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`); if (it.opts.verbose) { gen.assign((0, codegen_1._)`${err}.schema`, schemaValue); gen.assign((0, codegen_1._)`${err}.data`, data); } }); } exports.extendErrors = extendErrors; function addError(gen, errObj) { const err = gen.const("err", errObj); gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err})`); gen.code((0, codegen_1._)`${names_1.default.errors}++`); } function returnErrors(it, errs) { const { gen, validateName, schemaEnv } = it; if (schemaEnv.$async) { gen.throw((0, codegen_1._)`new ${it.ValidationError}(${errs})`); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, errs); gen.return(false); } } var E = { keyword: new codegen_1.Name("keyword"), schemaPath: new codegen_1.Name("schemaPath"), params: new codegen_1.Name("params"), propertyName: new codegen_1.Name("propertyName"), message: new codegen_1.Name("message"), schema: new codegen_1.Name("schema"), parentSchema: new codegen_1.Name("parentSchema") }; function errorObjectCode(cxt, error2, errorPaths) { const { createErrors } = cxt.it; if (createErrors === false) return (0, codegen_1._)`{}`; return errorObject(cxt, error2, errorPaths); } function errorObject(cxt, error2, errorPaths = {}) { const { gen, it } = cxt; const keyValues = [ errorInstancePath(it, errorPaths), errorSchemaPath(cxt, errorPaths) ]; extraErrorProps(cxt, error2, keyValues); return gen.object(...keyValues); } function errorInstancePath({ errorPath }, { instancePath }) { const instPath = instancePath ? (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}` : errorPath; return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)]; } function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) { let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str)`${errSchemaPath}/${keyword}`; if (schemaPath) { schPath = (0, codegen_1.str)`${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`; } return [E.schemaPath, schPath]; } function extraErrorProps(cxt, { params, message }, keyValues) { const { keyword, data, schemaValue, it } = cxt; const { opts, propertyName, topSchemaRef, schemaPath } = it; keyValues.push([E.keyword, keyword], [E.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._)`{}`]); if (opts.messages) { keyValues.push([E.message, typeof message == "function" ? message(cxt) : message]); } if (opts.verbose) { keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._)`${topSchemaRef}${schemaPath}`], [names_1.default.data, data]); } if (propertyName) keyValues.push([E.propertyName, propertyName]); } }); // node_modules/ajv/dist/compile/validate/boolSchema.js var require_boolSchema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined; var errors_1 = require_errors(); var codegen_1 = require_codegen(); var names_1 = require_names(); var boolError = { message: "boolean schema is false" }; function topBoolOrEmptySchema(it) { const { gen, schema, validateName } = it; if (schema === false) { falseSchemaError(it, false); } else if (typeof schema == "object" && schema.$async === true) { gen.return(names_1.default.data); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, null); gen.return(true); } } exports.topBoolOrEmptySchema = topBoolOrEmptySchema; function boolOrEmptySchema(it, valid) { const { gen, schema } = it; if (schema === false) { gen.var(valid, false); falseSchemaError(it); } else { gen.var(valid, true); } } exports.boolOrEmptySchema = boolOrEmptySchema; function falseSchemaError(it, overrideAllErrors) { const { gen, data } = it; const cxt = { gen, keyword: "false schema", data, schema: false, schemaCode: false, schemaValue: false, params: {}, it }; (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors); } }); // node_modules/ajv/dist/compile/rules.js var require_rules = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getRules = exports.isJSONType = undefined; var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; var jsonTypes = new Set(_jsonTypes); function isJSONType(x) { return typeof x == "string" && jsonTypes.has(x); } exports.isJSONType = isJSONType; function getRules() { const groups = { number: { type: "number", rules: [] }, string: { type: "string", rules: [] }, array: { type: "array", rules: [] }, object: { type: "object", rules: [] } }; return { types: { ...groups, integer: true, boolean: true, null: true }, rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object], post: { rules: [] }, all: {}, keywords: {} }; } exports.getRules = getRules; }); // node_modules/ajv/dist/compile/validate/applicability.js var require_applicability = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined; function schemaHasRulesForType({ schema, self: self2 }, type) { const group = self2.RULES.types[type]; return group && group !== true && shouldUseGroup(schema, group); } exports.schemaHasRulesForType = schemaHasRulesForType; function shouldUseGroup(schema, group) { return group.rules.some((rule) => shouldUseRule(schema, rule)); } exports.shouldUseGroup = shouldUseGroup; function shouldUseRule(schema, rule) { var _a2; return schema[rule.keyword] !== undefined || ((_a2 = rule.definition.implements) === null || _a2 === undefined ? undefined : _a2.some((kwd) => schema[kwd] !== undefined)); } exports.shouldUseRule = shouldUseRule; }); // node_modules/ajv/dist/compile/validate/dataType.js var require_dataType = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined; var rules_1 = require_rules(); var applicability_1 = require_applicability(); var errors_1 = require_errors(); var codegen_1 = require_codegen(); var util_1 = require_util(); var DataType; (function(DataType2) { DataType2[DataType2["Correct"] = 0] = "Correct"; DataType2[DataType2["Wrong"] = 1] = "Wrong"; })(DataType || (exports.DataType = DataType = {})); function getSchemaTypes(schema) { const types = getJSONTypes(schema.type); const hasNull = types.includes("null"); if (hasNull) { if (schema.nullable === false) throw new Error("type: null contradicts nullable: false"); } else { if (!types.length && schema.nullable !== undefined) { throw new Error('"nullable" cannot be used without "type"'); } if (schema.nullable === true) types.push("null"); } return types; } exports.getSchemaTypes = getSchemaTypes; function getJSONTypes(ts) { const types = Array.isArray(ts) ? ts : ts ? [ts] : []; if (types.every(rules_1.isJSONType)) return types; throw new Error("type must be JSONType or JSONType[]: " + types.join(",")); } exports.getJSONTypes = getJSONTypes; function coerceAndCheckDataType(it, types) { const { gen, data, opts } = it; const coerceTo = coerceToTypes(types, opts.coerceTypes); const checkTypes = types.length > 0 && !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0])); if (checkTypes) { const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong); gen.if(wrongType, () => { if (coerceTo.length) coerceData(it, types, coerceTo); else reportTypeError(it); }); } return checkTypes; } exports.coerceAndCheckDataType = coerceAndCheckDataType; var COERCIBLE = new Set(["string", "number", "integer", "boolean", "null"]); function coerceToTypes(types, coerceTypes) { return coerceTypes ? types.filter((t) => COERCIBLE.has(t) || coerceTypes === "array" && t === "array") : []; } function coerceData(it, types, coerceTo) { const { gen, data, opts } = it; const dataType = gen.let("dataType", (0, codegen_1._)`typeof ${data}`); const coerced = gen.let("coerced", (0, codegen_1._)`undefined`); if (opts.coerceTypes === "array") { gen.if((0, codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen.assign(data, (0, codegen_1._)`${data}[0]`).assign(dataType, (0, codegen_1._)`typeof ${data}`).if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))); } gen.if((0, codegen_1._)`${coerced} !== undefined`); for (const t of coerceTo) { if (COERCIBLE.has(t) || t === "array" && opts.coerceTypes === "array") { coerceSpecificType(t); } } gen.else(); reportTypeError(it); gen.endIf(); gen.if((0, codegen_1._)`${coerced} !== undefined`, () => { gen.assign(data, coerced); assignParentData(it, coerced); }); function coerceSpecificType(t) { switch (t) { case "string": gen.elseIf((0, codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced, (0, codegen_1._)`"" + ${data}`).elseIf((0, codegen_1._)`${data} === null`).assign(coerced, (0, codegen_1._)`""`); return; case "number": gen.elseIf((0, codegen_1._)`${dataType} == "boolean" || ${data} === null || (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced, (0, codegen_1._)`+${data}`); return; case "integer": gen.elseIf((0, codegen_1._)`${dataType} === "boolean" || ${data} === null || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced, (0, codegen_1._)`+${data}`); return; case "boolean": gen.elseIf((0, codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced, false).elseIf((0, codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced, true); return; case "null": gen.elseIf((0, codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`); gen.assign(coerced, null); return; case "array": gen.elseIf((0, codegen_1._)`${dataType} === "string" || ${dataType} === "number" || ${dataType} === "boolean" || ${data} === null`).assign(coerced, (0, codegen_1._)`[${data}]`); } } } function assignParentData({ gen, parentData, parentDataProperty }, expr) { gen.if((0, codegen_1._)`${parentData} !== undefined`, () => gen.assign((0, codegen_1._)`${parentData}[${parentDataProperty}]`, expr)); } function checkDataType(dataType, data, strictNums, correct = DataType.Correct) { const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ; let cond; switch (dataType) { case "null": return (0, codegen_1._)`${data} ${EQ} null`; case "array": cond = (0, codegen_1._)`Array.isArray(${data})`; break; case "object": cond = (0, codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`; break; case "integer": cond = numCond((0, codegen_1._)`!(${data} % 1) && !isNaN(${data})`); break; case "number": cond = numCond(); break; default: return (0, codegen_1._)`typeof ${data} ${EQ} ${dataType}`; } return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond); function numCond(_cond = codegen_1.nil) { return (0, codegen_1.and)((0, codegen_1._)`typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._)`isFinite(${data})` : codegen_1.nil); } } exports.checkDataType = checkDataType; function checkDataTypes(dataTypes, data, strictNums, correct) { if (dataTypes.length === 1) { return checkDataType(dataTypes[0], data, strictNums, correct); } let cond; const types = (0, util_1.toHash)(dataTypes); if (types.array && types.object) { const notObj = (0, codegen_1._)`typeof ${data} != "object"`; cond = types.null ? notObj : (0, codegen_1._)`!${data} || ${notObj}`; delete types.null; delete types.array; delete types.object; } else { cond = codegen_1.nil; } if (types.number) delete types.integer; for (const t in types) cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct)); return cond; } exports.checkDataTypes = checkDataTypes; var typeError = { message: ({ schema }) => `must be ${schema}`, params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._)`{type: ${schema}}` : (0, codegen_1._)`{type: ${schemaValue}}` }; function reportTypeError(it) { const cxt = getTypeErrorContext(it); (0, errors_1.reportError)(cxt, typeError); } exports.reportTypeError = reportTypeError; function getTypeErrorContext(it) { const { gen, data, schema } = it; const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type"); return { gen, keyword: "type", data, schema: schema.type, schemaCode, schemaValue: schemaCode, parentSchema: schema, params: {}, it }; } }); // node_modules/ajv/dist/compile/validate/defaults.js var require_defaults = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.assignDefaults = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); function assignDefaults(it, ty) { const { properties, items } = it.schema; if (ty === "object" && properties) { for (const key in properties) { assignDefault(it, key, properties[key].default); } } else if (ty === "array" && Array.isArray(items)) { items.forEach((sch, i) => assignDefault(it, i, sch.default)); } } exports.assignDefaults = assignDefaults; function assignDefault(it, prop, defaultValue) { const { gen, compositeRule, data, opts } = it; if (defaultValue === undefined) return; const childData = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(prop)}`; if (compositeRule) { (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`); return; } let condition = (0, codegen_1._)`${childData} === undefined`; if (opts.useDefaults === "empty") { condition = (0, codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`; } gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`); } }); // node_modules/ajv/dist/vocabularies/code.js var require_code2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); var names_1 = require_names(); var util_2 = require_util(); function checkReportMissingProp(cxt, prop) { const { gen, data, it } = cxt; gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => { cxt.setParams({ missingProperty: (0, codegen_1._)`${prop}` }, true); cxt.error(); }); } exports.checkReportMissingProp = checkReportMissingProp; function checkMissingProp({ gen, data, it: { opts } }, properties, missing) { return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._)`${missing} = ${prop}`))); } exports.checkMissingProp = checkMissingProp; function reportMissingProp(cxt, missing) { cxt.setParams({ missingProperty: missing }, true); cxt.error(); } exports.reportMissingProp = reportMissingProp; function hasPropFunc(gen) { return gen.scopeValue("func", { ref: Object.prototype.hasOwnProperty, code: (0, codegen_1._)`Object.prototype.hasOwnProperty` }); } exports.hasPropFunc = hasPropFunc; function isOwnProperty(gen, data, property) { return (0, codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`; } exports.isOwnProperty = isOwnProperty; function propertyInData(gen, data, property, ownProperties) { const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} !== undefined`; return ownProperties ? (0, codegen_1._)`${cond} && ${isOwnProperty(gen, data, property)}` : cond; } exports.propertyInData = propertyInData; function noPropertyInData(gen, data, property, ownProperties) { const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} === undefined`; return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond; } exports.noPropertyInData = noPropertyInData; function allSchemaProperties(schemaMap) { return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : []; } exports.allSchemaProperties = allSchemaProperties; function schemaProperties(it, schemaMap) { return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p])); } exports.schemaProperties = schemaProperties; function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) { const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data; const valCxt = [ [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)], [names_1.default.parentData, it.parentData], [names_1.default.parentDataProperty, it.parentDataProperty], [names_1.default.rootData, names_1.default.rootData] ]; if (it.opts.dynamicRef) valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]); const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`; return context !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context}, ${args})` : (0, codegen_1._)`${func}(${args})`; } exports.callValidateCode = callValidateCode; var newRegExp = (0, codegen_1._)`new RegExp`; function usePattern({ gen, it: { opts } }, pattern) { const u = opts.unicodeRegExp ? "u" : ""; const { regExp } = opts.code; const rx = regExp(pattern, u); return gen.scopeValue("pattern", { key: rx.toString(), ref: rx, code: (0, codegen_1._)`${regExp.code === "new RegExp" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})` }); } exports.usePattern = usePattern; function validateArray(cxt) { const { gen, data, keyword, it } = cxt; const valid = gen.name("valid"); if (it.allErrors) { const validArr = gen.let("valid", true); validateItems(() => gen.assign(validArr, false)); return validArr; } gen.var(valid, true); validateItems(() => gen.break()); return valid; function validateItems(notValid) { const len = gen.const("len", (0, codegen_1._)`${data}.length`); gen.forRange("i", 0, len, (i) => { cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); gen.if((0, codegen_1.not)(valid), notValid); }); } } exports.validateArray = validateArray; function validateUnion(cxt) { const { gen, schema, keyword, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch)); if (alwaysValid && !it.opts.unevaluated) return; const valid = gen.let("valid", false); const schValid = gen.name("_valid"); gen.block(() => schema.forEach((_sch, i) => { const schCxt = cxt.subschema({ keyword, schemaProp: i, compositeRule: true }, schValid); gen.assign(valid, (0, codegen_1._)`${valid} || ${schValid}`); const merged = cxt.mergeValidEvaluated(schCxt, schValid); if (!merged) gen.if((0, codegen_1.not)(valid)); })); cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); } exports.validateUnion = validateUnion; }); // node_modules/ajv/dist/compile/validate/keyword.js var require_keyword = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined; var codegen_1 = require_codegen(); var names_1 = require_names(); var code_1 = require_code2(); var errors_1 = require_errors(); function macroKeywordCode(cxt, def) { const { gen, keyword, schema, parentSchema, it } = cxt; const macroSchema = def.macro.call(it.self, schema, parentSchema, it); const schemaRef = useKeyword(gen, keyword, macroSchema); if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true); const valid = gen.name("valid"); cxt.subschema({ schema: macroSchema, schemaPath: codegen_1.nil, errSchemaPath: `${it.errSchemaPath}/${keyword}`, topSchemaRef: schemaRef, compositeRule: true }, valid); cxt.pass(valid, () => cxt.error(true)); } exports.macroKeywordCode = macroKeywordCode; function funcKeywordCode(cxt, def) { var _a2; const { gen, keyword, schema, parentSchema, $data, it } = cxt; checkAsyncKeyword(it, def); const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate; const validateRef = useKeyword(gen, keyword, validate); const valid = gen.let("valid"); cxt.block$data(valid, validateKeyword); cxt.ok((_a2 = def.valid) !== null && _a2 !== undefined ? _a2 : valid); function validateKeyword() { if (def.errors === false) { assignValid(); if (def.modifying) modifyData(cxt); reportErrs(() => cxt.error()); } else { const ruleErrs = def.async ? validateAsync() : validateSync(); if (def.modifying) modifyData(cxt); reportErrs(() => addErrs(cxt, ruleErrs)); } } function validateAsync() { const ruleErrs = gen.let("ruleErrs", null); gen.try(() => assignValid((0, codegen_1._)`await `), (e) => gen.assign(valid, false).if((0, codegen_1._)`${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._)`${e}.errors`), () => gen.throw(e))); return ruleErrs; } function validateSync() { const validateErrs = (0, codegen_1._)`${validateRef}.errors`; gen.assign(validateErrs, null); assignValid(codegen_1.nil); return validateErrs; } function assignValid(_await = def.async ? (0, codegen_1._)`await ` : codegen_1.nil) { const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self; const passSchema = !(("compile" in def) && !$data || def.schema === false); gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); } function reportErrs(errors3) { var _a3; gen.if((0, codegen_1.not)((_a3 = def.valid) !== null && _a3 !== undefined ? _a3 : valid), errors3); } } exports.funcKeywordCode = funcKeywordCode; function modifyData(cxt) { const { gen, data, it } = cxt; gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._)`${it.parentData}[${it.parentDataProperty}]`)); } function addErrs(cxt, errs) { const { gen } = cxt; gen.if((0, codegen_1._)`Array.isArray(${errs})`, () => { gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`).assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); (0, errors_1.extendErrors)(cxt); }, () => cxt.error()); } function checkAsyncKeyword({ schemaEnv }, def) { if (def.async && !schemaEnv.$async) throw new Error("async keyword in sync schema"); } function useKeyword(gen, keyword, result) { if (result === undefined) throw new Error(`keyword "${keyword}" failed to compile`); return gen.scopeValue("keyword", typeof result == "function" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) }); } function validSchemaType(schema, schemaType, allowUndefined = false) { return !schemaType.length || schemaType.some((st) => st === "array" ? Array.isArray(schema) : st === "object" ? schema && typeof schema == "object" && !Array.isArray(schema) : typeof schema == st || allowUndefined && typeof schema == "undefined"); } exports.validSchemaType = validSchemaType; function validateKeywordUsage({ schema, opts, self: self2, errSchemaPath }, def, keyword) { if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) { throw new Error("ajv implementation error"); } const deps = def.dependencies; if (deps === null || deps === undefined ? undefined : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) { throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(",")}`); } if (def.validateSchema) { const valid = def.validateSchema(schema[keyword]); if (!valid) { const msg = `keyword "${keyword}" value is invalid at path "${errSchemaPath}": ` + self2.errorsText(def.validateSchema.errors); if (opts.validateSchema === "log") self2.logger.error(msg); else throw new Error(msg); } } } exports.validateKeywordUsage = validateKeywordUsage; }); // node_modules/ajv/dist/compile/validate/subschema.js var require_subschema = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); function getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) { if (keyword !== undefined && schema !== undefined) { throw new Error('both "keyword" and "schema" passed, only one allowed'); } if (keyword !== undefined) { const sch = it.schema[keyword]; return schemaProp === undefined ? { schema: sch, schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`, errSchemaPath: `${it.errSchemaPath}/${keyword}` } : { schema: sch[schemaProp], schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`, errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}` }; } if (schema !== undefined) { if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) { throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"'); } return { schema, schemaPath, topSchemaRef, errSchemaPath }; } throw new Error('either "keyword" or "schema" must be passed'); } exports.getSubschema = getSubschema; function extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) { if (data !== undefined && dataProp !== undefined) { throw new Error('both "data" and "dataProp" passed, only one allowed'); } const { gen } = it; if (dataProp !== undefined) { const { errorPath, dataPathArr, opts } = it; const nextData = gen.let("data", (0, codegen_1._)`${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true); dataContextProps(nextData); subschema.errorPath = (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`; subschema.parentDataProperty = (0, codegen_1._)`${dataProp}`; subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]; } if (data !== undefined) { const nextData = data instanceof codegen_1.Name ? data : gen.let("data", data, true); dataContextProps(nextData); if (propertyName !== undefined) subschema.propertyName = propertyName; } if (dataTypes) subschema.dataTypes = dataTypes; function dataContextProps(_nextData) { subschema.data = _nextData; subschema.dataLevel = it.dataLevel + 1; subschema.dataTypes = []; it.definedProperties = new Set; subschema.parentData = it.data; subschema.dataNames = [...it.dataNames, _nextData]; } } exports.extendSubschemaData = extendSubschemaData; function extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) { if (compositeRule !== undefined) subschema.compositeRule = compositeRule; if (createErrors !== undefined) subschema.createErrors = createErrors; if (allErrors !== undefined) subschema.allErrors = allErrors; subschema.jtdDiscriminator = jtdDiscriminator; subschema.jtdMetadata = jtdMetadata; } exports.extendSubschemaMode = extendSubschemaMode; }); // node_modules/fast-deep-equal/index.js var require_fast_deep_equal = __commonJS((exports, module) => { module.exports = function equal(a, b) { if (a === b) return true; if (a && b && typeof a == "object" && typeof b == "object") { if (a.constructor !== b.constructor) return false; var length, i, keys; if (Array.isArray(a)) { length = a.length; if (length != b.length) return false; for (i = length;i-- !== 0; ) if (!equal(a[i], b[i])) return false; return true; } if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) return false; for (i = length;i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; for (i = length;i-- !== 0; ) { var key = keys[i]; if (!equal(a[key], b[key])) return false; } return true; } return a !== a && b !== b; }; }); // node_modules/json-schema-traverse/index.js var require_json_schema_traverse = __commonJS((exports, module) => { var traverse = module.exports = function(schema, opts, cb) { if (typeof opts == "function") { cb = opts; opts = {}; } cb = opts.cb || cb; var pre = typeof cb == "function" ? cb : cb.pre || function() {}; var post = cb.post || function() {}; _traverse(opts, pre, post, schema, "", schema); }; traverse.keywords = { additionalItems: true, items: true, contains: true, additionalProperties: true, propertyNames: true, not: true, if: true, then: true, else: true }; traverse.arrayKeywords = { items: true, allOf: true, anyOf: true, oneOf: true }; traverse.propsKeywords = { $defs: true, definitions: true, properties: true, patternProperties: true, dependencies: true }; traverse.skipKeywords = { default: true, enum: true, const: true, required: true, maximum: true, minimum: true, exclusiveMaximum: true, exclusiveMinimum: true, multipleOf: true, maxLength: true, minLength: true, pattern: true, format: true, maxItems: true, minItems: true, uniqueItems: true, maxProperties: true, minProperties: true }; function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { if (schema && typeof schema == "object" && !Array.isArray(schema)) { pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); for (var key in schema) { var sch = schema[key]; if (Array.isArray(sch)) { if (key in traverse.arrayKeywords) { for (var i = 0;i < sch.length; i++) _traverse(opts, pre, post, sch[i], jsonPtr + "/" + key + "/" + i, rootSchema, jsonPtr, key, schema, i); } } else if (key in traverse.propsKeywords) { if (sch && typeof sch == "object") { for (var prop in sch) _traverse(opts, pre, post, sch[prop], jsonPtr + "/" + key + "/" + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); } } else if (key in traverse.keywords || opts.allKeys && !(key in traverse.skipKeywords)) { _traverse(opts, pre, post, sch, jsonPtr + "/" + key, rootSchema, jsonPtr, key, schema); } } post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); } } function escapeJsonPtr(str) { return str.replace(/~/g, "~0").replace(/\//g, "~1"); } }); // node_modules/ajv/dist/compile/resolve.js var require_resolve = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined; var util_1 = require_util(); var equal = require_fast_deep_equal(); var traverse = require_json_schema_traverse(); var SIMPLE_INLINED = new Set([ "type", "format", "pattern", "maxLength", "minLength", "maxProperties", "minProperties", "maxItems", "minItems", "maximum", "minimum", "uniqueItems", "multipleOf", "required", "enum", "const" ]); function inlineRef(schema, limit = true) { if (typeof schema == "boolean") return true; if (limit === true) return !hasRef(schema); if (!limit) return false; return countKeys(schema) <= limit; } exports.inlineRef = inlineRef; var REF_KEYWORDS = new Set([ "$ref", "$recursiveRef", "$recursiveAnchor", "$dynamicRef", "$dynamicAnchor" ]); function hasRef(schema) { for (const key in schema) { if (REF_KEYWORDS.has(key)) return true; const sch = schema[key]; if (Array.isArray(sch) && sch.some(hasRef)) return true; if (typeof sch == "object" && hasRef(sch)) return true; } return false; } function countKeys(schema) { let count = 0; for (const key in schema) { if (key === "$ref") return Infinity; count++; if (SIMPLE_INLINED.has(key)) continue; if (typeof schema[key] == "object") { (0, util_1.eachItem)(schema[key], (sch) => count += countKeys(sch)); } if (count === Infinity) return Infinity; } return count; } function getFullPath(resolver, id = "", normalize) { if (normalize !== false) id = normalizeId(id); const p = resolver.parse(id); return _getFullPath(resolver, p); } exports.getFullPath = getFullPath; function _getFullPath(resolver, p) { const serialized = resolver.serialize(p); return serialized.split("#")[0] + "#"; } exports._getFullPath = _getFullPath; var TRAILING_SLASH_HASH = /#\/?$/; function normalizeId(id) { return id ? id.replace(TRAILING_SLASH_HASH, "") : ""; } exports.normalizeId = normalizeId; function resolveUrl(resolver, baseId, id) { id = normalizeId(id); return resolver.resolve(baseId, id); } exports.resolveUrl = resolveUrl; var ANCHOR = /^[a-z_][-a-z0-9._]*$/i; function getSchemaRefs(schema, baseId) { if (typeof schema == "boolean") return {}; const { schemaId, uriResolver } = this.opts; const schId = normalizeId(schema[schemaId] || baseId); const baseIds = { "": schId }; const pathPrefix = getFullPath(uriResolver, schId, false); const localRefs = {}; const schemaRefs = new Set; traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => { if (parentJsonPtr === undefined) return; const fullPath = pathPrefix + jsonPtr; let innerBaseId = baseIds[parentJsonPtr]; if (typeof sch[schemaId] == "string") innerBaseId = addRef.call(this, sch[schemaId]); addAnchor.call(this, sch.$anchor); addAnchor.call(this, sch.$dynamicAnchor); baseIds[jsonPtr] = innerBaseId; function addRef(ref) { const _resolve = this.opts.uriResolver.resolve; ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref); if (schemaRefs.has(ref)) throw ambiguos(ref); schemaRefs.add(ref); let schOrRef = this.refs[ref]; if (typeof schOrRef == "string") schOrRef = this.refs[schOrRef]; if (typeof schOrRef == "object") { checkAmbiguosRef(sch, schOrRef.schema, ref); } else if (ref !== normalizeId(fullPath)) { if (ref[0] === "#") { checkAmbiguosRef(sch, localRefs[ref], ref); localRefs[ref] = sch; } else { this.refs[ref] = fullPath; } } return ref; } function addAnchor(anchor) { if (typeof anchor == "string") { if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor "${anchor}"`); addRef.call(this, `#${anchor}`); } } }); return localRefs; function checkAmbiguosRef(sch1, sch2, ref) { if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref); } function ambiguos(ref) { return new Error(`reference "${ref}" resolves to more than one schema`); } } exports.getSchemaRefs = getSchemaRefs; }); // node_modules/ajv/dist/compile/validate/index.js var require_validate = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined; var boolSchema_1 = require_boolSchema(); var dataType_1 = require_dataType(); var applicability_1 = require_applicability(); var dataType_2 = require_dataType(); var defaults_1 = require_defaults(); var keyword_1 = require_keyword(); var subschema_1 = require_subschema(); var codegen_1 = require_codegen(); var names_1 = require_names(); var resolve_1 = require_resolve(); var util_1 = require_util(); var errors_1 = require_errors(); function validateFunctionCode(it) { if (isSchemaObj(it)) { checkKeywords(it); if (schemaCxtHasRules(it)) { topSchemaObjCode(it); return; } } validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it)); } exports.validateFunctionCode = validateFunctionCode; function validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) { if (opts.code.es5) { gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => { gen.code((0, codegen_1._)`"use strict"; ${funcSourceUrl(schema, opts)}`); destructureValCxtES5(gen, opts); gen.code(body); }); } else { gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body)); } } function destructureValCxt(opts) { return (0, codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._)`, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`; } function destructureValCxtES5(gen, opts) { gen.if(names_1.default.valCxt, () => { gen.var(names_1.default.instancePath, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`); gen.var(names_1.default.parentData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`); gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`); gen.var(names_1.default.rootData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`); if (opts.dynamicRef) gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`); }, () => { gen.var(names_1.default.instancePath, (0, codegen_1._)`""`); gen.var(names_1.default.parentData, (0, codegen_1._)`undefined`); gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`undefined`); gen.var(names_1.default.rootData, names_1.default.data); if (opts.dynamicRef) gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`{}`); }); } function topSchemaObjCode(it) { const { schema, opts, gen } = it; validateFunction(it, () => { if (opts.$comment && schema.$comment) commentKeyword(it); checkNoDefault(it); gen.let(names_1.default.vErrors, null); gen.let(names_1.default.errors, 0); if (opts.unevaluated) resetEvaluated(it); typeAndKeywords(it); returnResults(it); }); return; } function resetEvaluated(it) { const { gen, validateName } = it; it.evaluated = gen.const("evaluated", (0, codegen_1._)`${validateName}.evaluated`); gen.if((0, codegen_1._)`${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._)`${it.evaluated}.props`, (0, codegen_1._)`undefined`)); gen.if((0, codegen_1._)`${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._)`${it.evaluated}.items`, (0, codegen_1._)`undefined`)); } function funcSourceUrl(schema, opts) { const schId = typeof schema == "object" && schema[opts.schemaId]; return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._)`/*# sourceURL=${schId} */` : codegen_1.nil; } function subschemaCode(it, valid) { if (isSchemaObj(it)) { checkKeywords(it); if (schemaCxtHasRules(it)) { subSchemaObjCode(it, valid); return; } } (0, boolSchema_1.boolOrEmptySchema)(it, valid); } function schemaCxtHasRules({ schema, self: self2 }) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (self2.RULES.all[key]) return true; return false; } function isSchemaObj(it) { return typeof it.schema != "boolean"; } function subSchemaObjCode(it, valid) { const { schema, gen, opts } = it; if (opts.$comment && schema.$comment) commentKeyword(it); updateContext(it); checkAsyncSchema(it); const errsCount = gen.const("_errs", names_1.default.errors); typeAndKeywords(it, errsCount); gen.var(valid, (0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); } function checkKeywords(it) { (0, util_1.checkUnknownRules)(it); checkRefsAndKeywords(it); } function typeAndKeywords(it, errsCount) { if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount); const types = (0, dataType_1.getSchemaTypes)(it.schema); const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types); schemaKeywords(it, types, !checkedTypes, errsCount); } function checkRefsAndKeywords(it) { const { schema, errSchemaPath, opts, self: self2 } = it; if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self2.RULES)) { self2.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`); } } function checkNoDefault(it) { const { schema, opts } = it; if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) { (0, util_1.checkStrictMode)(it, "default is ignored in the schema root"); } } function updateContext(it) { const schId = it.schema[it.opts.schemaId]; if (schId) it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId); } function checkAsyncSchema(it) { if (it.schema.$async && !it.schemaEnv.$async) throw new Error("async schema in sync schema"); } function commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) { const msg = schema.$comment; if (opts.$comment === true) { gen.code((0, codegen_1._)`${names_1.default.self}.logger.log(${msg})`); } else if (typeof opts.$comment == "function") { const schemaPath = (0, codegen_1.str)`${errSchemaPath}/$comment`; const rootName = gen.scopeValue("root", { ref: schemaEnv.root }); gen.code((0, codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`); } } function returnResults(it) { const { gen, schemaEnv, validateName, ValidationError, opts } = it; if (schemaEnv.$async) { gen.if((0, codegen_1._)`${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`)); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, names_1.default.vErrors); if (opts.unevaluated) assignEvaluated(it); gen.return((0, codegen_1._)`${names_1.default.errors} === 0`); } } function assignEvaluated({ gen, evaluated, props, items }) { if (props instanceof codegen_1.Name) gen.assign((0, codegen_1._)`${evaluated}.props`, props); if (items instanceof codegen_1.Name) gen.assign((0, codegen_1._)`${evaluated}.items`, items); } function schemaKeywords(it, types, typeErrors, errsCount) { const { gen, schema, data, allErrors, opts, self: self2 } = it; const { RULES } = self2; if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) { gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition)); return; } if (!opts.jtd) checkStrictTypes(it, types); gen.block(() => { for (const group of RULES.rules) groupKeywords(group); groupKeywords(RULES.post); }); function groupKeywords(group) { if (!(0, applicability_1.shouldUseGroup)(schema, group)) return; if (group.type) { gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers)); iterateKeywords(it, group); if (types.length === 1 && types[0] === group.type && typeErrors) { gen.else(); (0, dataType_2.reportTypeError)(it); } gen.endIf(); } else { iterateKeywords(it, group); } if (!allErrors) gen.if((0, codegen_1._)`${names_1.default.errors} === ${errsCount || 0}`); } } function iterateKeywords(it, group) { const { gen, schema, opts: { useDefaults } } = it; if (useDefaults) (0, defaults_1.assignDefaults)(it, group.type); gen.block(() => { for (const rule of group.rules) { if ((0, applicability_1.shouldUseRule)(schema, rule)) { keywordCode(it, rule.keyword, rule.definition, group.type); } } }); } function checkStrictTypes(it, types) { if (it.schemaEnv.meta || !it.opts.strictTypes) return; checkContextTypes(it, types); if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types); checkKeywordTypes(it, it.dataTypes); } function checkContextTypes(it, types) { if (!types.length) return; if (!it.dataTypes.length) { it.dataTypes = types; return; } types.forEach((t) => { if (!includesType(it.dataTypes, t)) { strictTypesError(it, `type "${t}" not allowed by context "${it.dataTypes.join(",")}"`); } }); narrowSchemaTypes(it, types); } function checkMultipleTypes(it, ts) { if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) { strictTypesError(it, "use allowUnionTypes to allow union type keyword"); } } function checkKeywordTypes(it, ts) { const rules = it.self.RULES.all; for (const keyword in rules) { const rule = rules[keyword]; if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) { const { type } = rule.definition; if (type.length && !type.some((t) => hasApplicableType(ts, t))) { strictTypesError(it, `missing type "${type.join(",")}" for keyword "${keyword}"`); } } } } function hasApplicableType(schTs, kwdT) { return schTs.includes(kwdT) || kwdT === "number" && schTs.includes("integer"); } function includesType(ts, t) { return ts.includes(t) || t === "integer" && ts.includes("number"); } function narrowSchemaTypes(it, withTypes) { const ts = []; for (const t of it.dataTypes) { if (includesType(withTypes, t)) ts.push(t); else if (withTypes.includes("integer") && t === "number") ts.push("integer"); } it.dataTypes = ts; } function strictTypesError(it, msg) { const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; msg += ` at "${schemaPath}" (strictTypes)`; (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes); } class KeywordCxt { constructor(it, def, keyword) { (0, keyword_1.validateKeywordUsage)(it, def, keyword); this.gen = it.gen; this.allErrors = it.allErrors; this.keyword = keyword; this.data = it.data; this.schema = it.schema[keyword]; this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data; this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data); this.schemaType = def.schemaType; this.parentSchema = it.schema; this.params = {}; this.it = it; this.def = def; if (this.$data) { this.schemaCode = it.gen.const("vSchema", getData(this.$data, it)); } else { this.schemaCode = this.schemaValue; if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) { throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`); } } if ("code" in def ? def.trackErrors : def.errors !== false) { this.errsCount = it.gen.const("_errs", names_1.default.errors); } } result(condition, successAction, failAction) { this.failResult((0, codegen_1.not)(condition), successAction, failAction); } failResult(condition, successAction, failAction) { this.gen.if(condition); if (failAction) failAction(); else this.error(); if (successAction) { this.gen.else(); successAction(); if (this.allErrors) this.gen.endIf(); } else { if (this.allErrors) this.gen.endIf(); else this.gen.else(); } } pass(condition, failAction) { this.failResult((0, codegen_1.not)(condition), undefined, failAction); } fail(condition) { if (condition === undefined) { this.error(); if (!this.allErrors) this.gen.if(false); return; } this.gen.if(condition); this.error(); if (this.allErrors) this.gen.endIf(); else this.gen.else(); } fail$data(condition) { if (!this.$data) return this.fail(condition); const { schemaCode } = this; this.fail((0, codegen_1._)`${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`); } error(append, errorParams, errorPaths) { if (errorParams) { this.setParams(errorParams); this._error(append, errorPaths); this.setParams({}); return; } this._error(append, errorPaths); } _error(append, errorPaths) { (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths); } $dataError() { (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError); } reset() { if (this.errsCount === undefined) throw new Error('add "trackErrors" to keyword definition'); (0, errors_1.resetErrorsCount)(this.gen, this.errsCount); } ok(cond) { if (!this.allErrors) this.gen.if(cond); } setParams(obj, assign) { if (assign) Object.assign(this.params, obj); else this.params = obj; } block$data(valid, codeBlock, $dataValid = codegen_1.nil) { this.gen.block(() => { this.check$data(valid, $dataValid); codeBlock(); }); } check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) { if (!this.$data) return; const { gen, schemaCode, schemaType, def } = this; gen.if((0, codegen_1.or)((0, codegen_1._)`${schemaCode} === undefined`, $dataValid)); if (valid !== codegen_1.nil) gen.assign(valid, true); if (schemaType.length || def.validateSchema) { gen.elseIf(this.invalid$data()); this.$dataError(); if (valid !== codegen_1.nil) gen.assign(valid, false); } gen.else(); } invalid$data() { const { gen, schemaCode, schemaType, def, it } = this; return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema()); function wrong$DataType() { if (schemaType.length) { if (!(schemaCode instanceof codegen_1.Name)) throw new Error("ajv implementation error"); const st = Array.isArray(schemaType) ? schemaType : [schemaType]; return (0, codegen_1._)`${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`; } return codegen_1.nil; } function invalid$DataSchema() { if (def.validateSchema) { const validateSchemaRef = gen.scopeValue("validate$data", { ref: def.validateSchema }); return (0, codegen_1._)`!${validateSchemaRef}(${schemaCode})`; } return codegen_1.nil; } } subschema(appl, valid) { const subschema = (0, subschema_1.getSubschema)(this.it, appl); (0, subschema_1.extendSubschemaData)(subschema, this.it, appl); (0, subschema_1.extendSubschemaMode)(subschema, appl); const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined }; subschemaCode(nextContext, valid); return nextContext; } mergeEvaluated(schemaCxt, toName) { const { it, gen } = this; if (!it.opts.unevaluated) return; if (it.props !== true && schemaCxt.props !== undefined) { it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName); } if (it.items !== true && schemaCxt.items !== undefined) { it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName); } } mergeValidEvaluated(schemaCxt, valid) { const { it, gen } = this; if (it.opts.unevaluated && (it.props !== true || it.items !== true)) { gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name)); return true; } } } exports.KeywordCxt = KeywordCxt; function keywordCode(it, keyword, def, ruleType) { const cxt = new KeywordCxt(it, def, keyword); if ("code" in def) { def.code(cxt, ruleType); } else if (cxt.$data && def.validate) { (0, keyword_1.funcKeywordCode)(cxt, def); } else if ("macro" in def) { (0, keyword_1.macroKeywordCode)(cxt, def); } else if (def.compile || def.validate) { (0, keyword_1.funcKeywordCode)(cxt, def); } } var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; function getData($data, { dataLevel, dataNames, dataPathArr }) { let jsonPointer; let data; if ($data === "") return names_1.default.rootData; if ($data[0] === "/") { if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`); jsonPointer = $data; data = names_1.default.rootData; } else { const matches = RELATIVE_JSON_POINTER.exec($data); if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`); const up = +matches[1]; jsonPointer = matches[2]; if (jsonPointer === "#") { if (up >= dataLevel) throw new Error(errorMsg("property/index", up)); return dataPathArr[dataLevel - up]; } if (up > dataLevel) throw new Error(errorMsg("data", up)); data = dataNames[dataLevel - up]; if (!jsonPointer) return data; } let expr = data; const segments = jsonPointer.split("/"); for (const segment of segments) { if (segment) { data = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`; expr = (0, codegen_1._)`${expr} && ${data}`; } } return expr; function errorMsg(pointerType, up) { return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`; } } exports.getData = getData; }); // node_modules/ajv/dist/runtime/validation_error.js var require_validation_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); class ValidationError extends Error { constructor(errors3) { super("validation failed"); this.errors = errors3; this.ajv = this.validation = true; } } exports.default = ValidationError; }); // node_modules/ajv/dist/compile/ref_error.js var require_ref_error = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var resolve_1 = require_resolve(); class MissingRefError extends Error { constructor(resolver, baseId, ref, msg) { super(msg || `can't resolve reference ${ref} from id ${baseId}`); this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref); this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef)); } } exports.default = MissingRefError; }); // node_modules/ajv/dist/compile/index.js var require_compile = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined; var codegen_1 = require_codegen(); var validation_error_1 = require_validation_error(); var names_1 = require_names(); var resolve_1 = require_resolve(); var util_1 = require_util(); var validate_1 = require_validate(); class SchemaEnv { constructor(env) { var _a2; this.refs = {}; this.dynamicAnchors = {}; let schema; if (typeof env.schema == "object") schema = env.schema; this.schema = env.schema; this.schemaId = env.schemaId; this.root = env.root || this; this.baseId = (_a2 = env.baseId) !== null && _a2 !== undefined ? _a2 : (0, resolve_1.normalizeId)(schema === null || schema === undefined ? undefined : schema[env.schemaId || "$id"]); this.schemaPath = env.schemaPath; this.localRefs = env.localRefs; this.meta = env.meta; this.$async = schema === null || schema === undefined ? undefined : schema.$async; this.refs = {}; } } exports.SchemaEnv = SchemaEnv; function compileSchema(sch) { const _sch = getCompilingSchema.call(this, sch); if (_sch) return _sch; const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); const { es5, lines } = this.opts.code; const { ownProperties } = this.opts; const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties }); let _ValidationError; if (sch.$async) { _ValidationError = gen.scopeValue("Error", { ref: validation_error_1.default, code: (0, codegen_1._)`require("ajv/dist/runtime/validation_error").default` }); } const validateName = gen.scopeName("validate"); sch.validateName = validateName; const schemaCxt = { gen, allErrors: this.opts.allErrors, data: names_1.default.data, parentData: names_1.default.parentData, parentDataProperty: names_1.default.parentDataProperty, dataNames: [names_1.default.data], dataPathArr: [codegen_1.nil], dataLevel: 0, dataTypes: [], definedProperties: new Set, topSchemaRef: gen.scopeValue("schema", this.opts.code.source === true ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) } : { ref: sch.schema }), validateName, ValidationError: _ValidationError, schema: sch.schema, schemaEnv: sch, rootId, baseId: sch.baseId || rootId, schemaPath: codegen_1.nil, errSchemaPath: sch.schemaPath || (this.opts.jtd ? "" : "#"), errorPath: (0, codegen_1._)`""`, opts: this.opts, self: this }; let sourceCode; try { this._compilations.add(sch); (0, validate_1.validateFunctionCode)(schemaCxt); gen.optimize(this.opts.code.optimize); const validateCode = gen.toString(); sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`; if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); const validate = makeValidate(this, this.scope.get()); this.scope.value(validateName, { ref: validate }); validate.errors = null; validate.schema = sch.schema; validate.schemaEnv = sch; if (sch.$async) validate.$async = true; if (this.opts.code.source === true) { validate.source = { validateName, validateCode, scopeValues: gen._values }; } if (this.opts.unevaluated) { const { props, items } = schemaCxt; validate.evaluated = { props: props instanceof codegen_1.Name ? undefined : props, items: items instanceof codegen_1.Name ? undefined : items, dynamicProps: props instanceof codegen_1.Name, dynamicItems: items instanceof codegen_1.Name }; if (validate.source) validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated); } sch.validate = validate; return sch; } catch (e) { delete sch.validate; delete sch.validateName; if (sourceCode) this.logger.error("Error compiling schema, function code:", sourceCode); throw e; } finally { this._compilations.delete(sch); } } exports.compileSchema = compileSchema; function resolveRef(root, baseId, ref) { var _a2; ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref); const schOrFunc = root.refs[ref]; if (schOrFunc) return schOrFunc; let _sch = resolve.call(this, root, ref); if (_sch === undefined) { const schema = (_a2 = root.localRefs) === null || _a2 === undefined ? undefined : _a2[ref]; const { schemaId } = this.opts; if (schema) _sch = new SchemaEnv({ schema, schemaId, root, baseId }); } if (_sch === undefined) return; return root.refs[ref] = inlineOrCompile.call(this, _sch); } exports.resolveRef = resolveRef; function inlineOrCompile(sch) { if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs)) return sch.schema; return sch.validate ? sch : compileSchema.call(this, sch); } function getCompilingSchema(schEnv) { for (const sch of this._compilations) { if (sameSchemaEnv(sch, schEnv)) return sch; } } exports.getCompilingSchema = getCompilingSchema; function sameSchemaEnv(s1, s2) { return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; } function resolve(root, ref) { let sch; while (typeof (sch = this.refs[ref]) == "string") ref = sch; return sch || this.schemas[ref] || resolveSchema.call(this, root, ref); } function resolveSchema(root, ref) { const p = this.opts.uriResolver.parse(ref); const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p); let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root.baseId, undefined); if (Object.keys(root.schema).length > 0 && refPath === baseId) { return getJsonPointer.call(this, p, root); } const id = (0, resolve_1.normalizeId)(refPath); const schOrRef = this.refs[id] || this.schemas[id]; if (typeof schOrRef == "string") { const sch = resolveSchema.call(this, root, schOrRef); if (typeof (sch === null || sch === undefined ? undefined : sch.schema) !== "object") return; return getJsonPointer.call(this, p, sch); } if (typeof (schOrRef === null || schOrRef === undefined ? undefined : schOrRef.schema) !== "object") return; if (!schOrRef.validate) compileSchema.call(this, schOrRef); if (id === (0, resolve_1.normalizeId)(ref)) { const { schema } = schOrRef; const { schemaId } = this.opts; const schId = schema[schemaId]; if (schId) baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); return new SchemaEnv({ schema, schemaId, root, baseId }); } return getJsonPointer.call(this, p, schOrRef); } exports.resolveSchema = resolveSchema; var PREVENT_SCOPE_CHANGE = new Set([ "properties", "patternProperties", "enum", "dependencies", "definitions" ]); function getJsonPointer(parsedRef, { baseId, schema, root }) { var _a2; if (((_a2 = parsedRef.fragment) === null || _a2 === undefined ? undefined : _a2[0]) !== "/") return; for (const part of parsedRef.fragment.slice(1).split("/")) { if (typeof schema === "boolean") return; const partSchema = schema[(0, util_1.unescapeFragment)(part)]; if (partSchema === undefined) return; schema = partSchema; const schId = typeof schema === "object" && schema[this.opts.schemaId]; if (!PREVENT_SCOPE_CHANGE.has(part) && schId) { baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); } } let env; if (typeof schema != "boolean" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) { const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref); env = resolveSchema.call(this, root, $ref); } const { schemaId } = this.opts; env = env || new SchemaEnv({ schema, schemaId, root, baseId }); if (env.schema !== env.root.schema) return env; return; } }); // node_modules/ajv/dist/refs/data.json var require_data = __commonJS((exports, module) => { module.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", type: "object", required: ["$data"], properties: { $data: { type: "string", anyOf: [{ format: "relative-json-pointer" }, { format: "json-pointer" }] } }, additionalProperties: false }; }); // node_modules/fast-uri/lib/utils.js var require_utils = __commonJS((exports, module) => { var isUUID = RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu); var isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u); function stringArrayToHexStripped(input) { let acc = ""; let code = 0; let i = 0; for (i = 0;i < input.length; i++) { code = input[i].charCodeAt(0); if (code === 48) { continue; } if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) { return ""; } acc += input[i]; break; } for (i += 1;i < input.length; i++) { code = input[i].charCodeAt(0); if (!(code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102)) { return ""; } acc += input[i]; } return acc; } var nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u); function consumeIsZone(buffer) { buffer.length = 0; return true; } function consumeHextets(buffer, address, output) { if (buffer.length) { const hex = stringArrayToHexStripped(buffer); if (hex !== "") { address.push(hex); } else { output.error = true; return false; } buffer.length = 0; } return true; } function getIPV6(input) { let tokenCount = 0; const output = { error: false, address: "", zone: "" }; const address = []; const buffer = []; let endipv6Encountered = false; let endIpv6 = false; let consume = consumeHextets; for (let i = 0;i < input.length; i++) { const cursor = input[i]; if (cursor === "[" || cursor === "]") { continue; } if (cursor === ":") { if (endipv6Encountered === true) { endIpv6 = true; } if (!consume(buffer, address, output)) { break; } if (++tokenCount > 7) { output.error = true; break; } if (i > 0 && input[i - 1] === ":") { endipv6Encountered = true; } address.push(":"); continue; } else if (cursor === "%") { if (!consume(buffer, address, output)) { break; } consume = consumeIsZone; } else { buffer.push(cursor); continue; } } if (buffer.length) { if (consume === consumeIsZone) { output.zone = buffer.join(""); } else if (endIpv6) { address.push(buffer.join("")); } else { address.push(stringArrayToHexStripped(buffer)); } } output.address = address.join(""); return output; } function normalizeIPv6(host) { if (findToken(host, ":") < 2) { return { host, isIPV6: false }; } const ipv62 = getIPV6(host); if (!ipv62.error) { let newHost = ipv62.address; let escapedHost = ipv62.address; if (ipv62.zone) { newHost += "%" + ipv62.zone; escapedHost += "%25" + ipv62.zone; } return { host: newHost, isIPV6: true, escapedHost }; } else { return { host, isIPV6: false }; } } function findToken(str, token) { let ind = 0; for (let i = 0;i < str.length; i++) { if (str[i] === token) ind++; } return ind; } function removeDotSegments(path) { let input = path; const output = []; let nextSlash = -1; let len = 0; while (len = input.length) { if (len === 1) { if (input === ".") { break; } else if (input === "/") { output.push("/"); break; } else { output.push(input); break; } } else if (len === 2) { if (input[0] === ".") { if (input[1] === ".") { break; } else if (input[1] === "/") { input = input.slice(2); continue; } } else if (input[0] === "/") { if (input[1] === "." || input[1] === "/") { output.push("/"); break; } } } else if (len === 3) { if (input === "/..") { if (output.length !== 0) { output.pop(); } output.push("/"); break; } } if (input[0] === ".") { if (input[1] === ".") { if (input[2] === "/") { input = input.slice(3); continue; } } else if (input[1] === "/") { input = input.slice(2); continue; } } else if (input[0] === "/") { if (input[1] === ".") { if (input[2] === "/") { input = input.slice(2); continue; } else if (input[2] === ".") { if (input[3] === "/") { input = input.slice(3); if (output.length !== 0) { output.pop(); } continue; } } } } if ((nextSlash = input.indexOf("/", 1)) === -1) { output.push(input); break; } else { output.push(input.slice(0, nextSlash)); input = input.slice(nextSlash); } } return output.join(""); } function normalizeComponentEncoding(component, esc2) { const func = esc2 !== true ? escape : unescape; if (component.scheme !== undefined) { component.scheme = func(component.scheme); } if (component.userinfo !== undefined) { component.userinfo = func(component.userinfo); } if (component.host !== undefined) { component.host = func(component.host); } if (component.path !== undefined) { component.path = func(component.path); } if (component.query !== undefined) { component.query = func(component.query); } if (component.fragment !== undefined) { component.fragment = func(component.fragment); } return component; } function recomposeAuthority(component) { const uriTokens = []; if (component.userinfo !== undefined) { uriTokens.push(component.userinfo); uriTokens.push("@"); } if (component.host !== undefined) { let host = unescape(component.host); if (!isIPv4(host)) { const ipV6res = normalizeIPv6(host); if (ipV6res.isIPV6 === true) { host = `[${ipV6res.escapedHost}]`; } else { host = component.host; } } uriTokens.push(host); } if (typeof component.port === "number" || typeof component.port === "string") { uriTokens.push(":"); uriTokens.push(String(component.port)); } return uriTokens.length ? uriTokens.join("") : undefined; } module.exports = { nonSimpleDomain, recomposeAuthority, normalizeComponentEncoding, removeDotSegments, isIPv4, isUUID, normalizeIPv6, stringArrayToHexStripped }; }); // node_modules/fast-uri/lib/schemes.js var require_schemes = __commonJS((exports, module) => { var { isUUID } = require_utils(); var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; var supportedSchemeNames = [ "http", "https", "ws", "wss", "urn", "urn:uuid" ]; function isValidSchemeName(name) { return supportedSchemeNames.indexOf(name) !== -1; } function wsIsSecure(wsComponent) { if (wsComponent.secure === true) { return true; } else if (wsComponent.secure === false) { return false; } else if (wsComponent.scheme) { return wsComponent.scheme.length === 3 && (wsComponent.scheme[0] === "w" || wsComponent.scheme[0] === "W") && (wsComponent.scheme[1] === "s" || wsComponent.scheme[1] === "S") && (wsComponent.scheme[2] === "s" || wsComponent.scheme[2] === "S"); } else { return false; } } function httpParse(component) { if (!component.host) { component.error = component.error || "HTTP URIs must have a host."; } return component; } function httpSerialize(component) { const secure = String(component.scheme).toLowerCase() === "https"; if (component.port === (secure ? 443 : 80) || component.port === "") { component.port = undefined; } if (!component.path) { component.path = "/"; } return component; } function wsParse(wsComponent) { wsComponent.secure = wsIsSecure(wsComponent); wsComponent.resourceName = (wsComponent.path || "/") + (wsComponent.query ? "?" + wsComponent.query : ""); wsComponent.path = undefined; wsComponent.query = undefined; return wsComponent; } function wsSerialize(wsComponent) { if (wsComponent.port === (wsIsSecure(wsComponent) ? 443 : 80) || wsComponent.port === "") { wsComponent.port = undefined; } if (typeof wsComponent.secure === "boolean") { wsComponent.scheme = wsComponent.secure ? "wss" : "ws"; wsComponent.secure = undefined; } if (wsComponent.resourceName) { const [path, query] = wsComponent.resourceName.split("?"); wsComponent.path = path && path !== "/" ? path : undefined; wsComponent.query = query; wsComponent.resourceName = undefined; } wsComponent.fragment = undefined; return wsComponent; } function urnParse(urnComponent, options) { if (!urnComponent.path) { urnComponent.error = "URN can not be parsed"; return urnComponent; } const matches = urnComponent.path.match(URN_REG); if (matches) { const scheme = options.scheme || urnComponent.scheme || "urn"; urnComponent.nid = matches[1].toLowerCase(); urnComponent.nss = matches[2]; const urnScheme = `${scheme}:${options.nid || urnComponent.nid}`; const schemeHandler = getSchemeHandler(urnScheme); urnComponent.path = undefined; if (schemeHandler) { urnComponent = schemeHandler.parse(urnComponent, options); } } else { urnComponent.error = urnComponent.error || "URN can not be parsed."; } return urnComponent; } function urnSerialize(urnComponent, options) { if (urnComponent.nid === undefined) { throw new Error("URN without nid cannot be serialized"); } const scheme = options.scheme || urnComponent.scheme || "urn"; const nid = urnComponent.nid.toLowerCase(); const urnScheme = `${scheme}:${options.nid || nid}`; const schemeHandler = getSchemeHandler(urnScheme); if (schemeHandler) { urnComponent = schemeHandler.serialize(urnComponent, options); } const uriComponent = urnComponent; const nss = urnComponent.nss; uriComponent.path = `${nid || options.nid}:${nss}`; options.skipEscape = true; return uriComponent; } function urnuuidParse(urnComponent, options) { const uuidComponent = urnComponent; uuidComponent.uuid = uuidComponent.nss; uuidComponent.nss = undefined; if (!options.tolerant && (!uuidComponent.uuid || !isUUID(uuidComponent.uuid))) { uuidComponent.error = uuidComponent.error || "UUID is not valid."; } return uuidComponent; } function urnuuidSerialize(uuidComponent) { const urnComponent = uuidComponent; urnComponent.nss = (uuidComponent.uuid || "").toLowerCase(); return urnComponent; } var http = { scheme: "http", domainHost: true, parse: httpParse, serialize: httpSerialize }; var https = { scheme: "https", domainHost: http.domainHost, parse: httpParse, serialize: httpSerialize }; var ws = { scheme: "ws", domainHost: true, parse: wsParse, serialize: wsSerialize }; var wss = { scheme: "wss", domainHost: ws.domainHost, parse: ws.parse, serialize: ws.serialize }; var urn = { scheme: "urn", parse: urnParse, serialize: urnSerialize, skipNormalize: true }; var urnuuid = { scheme: "urn:uuid", parse: urnuuidParse, serialize: urnuuidSerialize, skipNormalize: true }; var SCHEMES = { http, https, ws, wss, urn, "urn:uuid": urnuuid }; Object.setPrototypeOf(SCHEMES, null); function getSchemeHandler(scheme) { return scheme && (SCHEMES[scheme] || SCHEMES[scheme.toLowerCase()]) || undefined; } module.exports = { wsIsSecure, SCHEMES, isValidSchemeName, getSchemeHandler }; }); // node_modules/fast-uri/index.js var require_fast_uri = __commonJS((exports, module) => { var { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizeComponentEncoding, isIPv4, nonSimpleDomain } = require_utils(); var { SCHEMES, getSchemeHandler } = require_schemes(); function normalize(uri, options) { if (typeof uri === "string") { uri = serialize(parse5(uri, options), options); } else if (typeof uri === "object") { uri = parse5(serialize(uri, options), options); } return uri; } function resolve(baseURI, relativeURI, options) { const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" }; const resolved = resolveComponent(parse5(baseURI, schemelessOptions), parse5(relativeURI, schemelessOptions), schemelessOptions, true); schemelessOptions.skipEscape = true; return serialize(resolved, schemelessOptions); } function resolveComponent(base, relative, options, skipNormalization) { const target = {}; if (!skipNormalization) { base = parse5(serialize(base, options), options); relative = parse5(serialize(relative, options), options); } options = options || {}; if (!options.tolerant && relative.scheme) { target.scheme = relative.scheme; target.userinfo = relative.userinfo; target.host = relative.host; target.port = relative.port; target.path = removeDotSegments(relative.path || ""); target.query = relative.query; } else { if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { target.userinfo = relative.userinfo; target.host = relative.host; target.port = relative.port; target.path = removeDotSegments(relative.path || ""); target.query = relative.query; } else { if (!relative.path) { target.path = base.path; if (relative.query !== undefined) { target.query = relative.query; } else { target.query = base.query; } } else { if (relative.path[0] === "/") { target.path = removeDotSegments(relative.path); } else { if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { target.path = "/" + relative.path; } else if (!base.path) { target.path = relative.path; } else { target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; } target.path = removeDotSegments(target.path); } target.query = relative.query; } target.userinfo = base.userinfo; target.host = base.host; target.port = base.port; } target.scheme = base.scheme; } target.fragment = relative.fragment; return target; } function equal(uriA, uriB, options) { if (typeof uriA === "string") { uriA = unescape(uriA); uriA = serialize(normalizeComponentEncoding(parse5(uriA, options), true), { ...options, skipEscape: true }); } else if (typeof uriA === "object") { uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true }); } if (typeof uriB === "string") { uriB = unescape(uriB); uriB = serialize(normalizeComponentEncoding(parse5(uriB, options), true), { ...options, skipEscape: true }); } else if (typeof uriB === "object") { uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true }); } return uriA.toLowerCase() === uriB.toLowerCase(); } function serialize(cmpts, opts) { const component = { host: cmpts.host, scheme: cmpts.scheme, userinfo: cmpts.userinfo, port: cmpts.port, path: cmpts.path, query: cmpts.query, nid: cmpts.nid, nss: cmpts.nss, uuid: cmpts.uuid, fragment: cmpts.fragment, reference: cmpts.reference, resourceName: cmpts.resourceName, secure: cmpts.secure, error: "" }; const options = Object.assign({}, opts); const uriTokens = []; const schemeHandler = getSchemeHandler(options.scheme || component.scheme); if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options); if (component.path !== undefined) { if (!options.skipEscape) { component.path = escape(component.path); if (component.scheme !== undefined) { component.path = component.path.split("%3A").join(":"); } } else { component.path = unescape(component.path); } } if (options.reference !== "suffix" && component.scheme) { uriTokens.push(component.scheme, ":"); } const authority = recomposeAuthority(component); if (authority !== undefined) { if (options.reference !== "suffix") { uriTokens.push("//"); } uriTokens.push(authority); if (component.path && component.path[0] !== "/") { uriTokens.push("/"); } } if (component.path !== undefined) { let s = component.path; if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { s = removeDotSegments(s); } if (authority === undefined && s[0] === "/" && s[1] === "/") { s = "/%2F" + s.slice(2); } uriTokens.push(s); } if (component.query !== undefined) { uriTokens.push("?", component.query); } if (component.fragment !== undefined) { uriTokens.push("#", component.fragment); } return uriTokens.join(""); } var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u; function parse5(uri, opts) { const options = Object.assign({}, opts); const parsed = { scheme: undefined, userinfo: undefined, host: "", port: undefined, path: "", query: undefined, fragment: undefined }; let isIP = false; if (options.reference === "suffix") { if (options.scheme) { uri = options.scheme + ":" + uri; } else { uri = "//" + uri; } } const matches = uri.match(URI_PARSE); if (matches) { parsed.scheme = matches[1]; parsed.userinfo = matches[3]; parsed.host = matches[4]; parsed.port = parseInt(matches[5], 10); parsed.path = matches[6] || ""; parsed.query = matches[7]; parsed.fragment = matches[8]; if (isNaN(parsed.port)) { parsed.port = matches[5]; } if (parsed.host) { const ipv4result = isIPv4(parsed.host); if (ipv4result === false) { const ipv6result = normalizeIPv6(parsed.host); parsed.host = ipv6result.host.toLowerCase(); isIP = ipv6result.isIPV6; } else { isIP = true; } } if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) { parsed.reference = "same-document"; } else if (parsed.scheme === undefined) { parsed.reference = "relative"; } else if (parsed.fragment === undefined) { parsed.reference = "absolute"; } else { parsed.reference = "uri"; } if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) { parsed.error = parsed.error || "URI is not a " + options.reference + " reference."; } const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme); if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) { try { parsed.host = URL.domainToASCII(parsed.host.toLowerCase()); } catch (e) { parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e; } } } if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) { if (uri.indexOf("%") !== -1) { if (parsed.scheme !== undefined) { parsed.scheme = unescape(parsed.scheme); } if (parsed.host !== undefined) { parsed.host = unescape(parsed.host); } } if (parsed.path) { parsed.path = escape(unescape(parsed.path)); } if (parsed.fragment) { parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment)); } } if (schemeHandler && schemeHandler.parse) { schemeHandler.parse(parsed, options); } } else { parsed.error = parsed.error || "URI can not be parsed."; } return parsed; } var fastUri = { SCHEMES, normalize, resolve, resolveComponent, equal, serialize, parse: parse5 }; module.exports = fastUri; module.exports.default = fastUri; module.exports.fastUri = fastUri; }); // node_modules/ajv/dist/runtime/uri.js var require_uri = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var uri = require_fast_uri(); uri.code = 'require("ajv/dist/runtime/uri").default'; exports.default = uri; }); // node_modules/ajv/dist/core.js var require_core = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined; var validate_1 = require_validate(); Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { return validate_1.KeywordCxt; } }); var codegen_1 = require_codegen(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return codegen_1._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return codegen_1.str; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return codegen_1.stringify; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return codegen_1.nil; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return codegen_1.Name; } }); Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { return codegen_1.CodeGen; } }); var validation_error_1 = require_validation_error(); var ref_error_1 = require_ref_error(); var rules_1 = require_rules(); var compile_1 = require_compile(); var codegen_2 = require_codegen(); var resolve_1 = require_resolve(); var dataType_1 = require_dataType(); var util_1 = require_util(); var $dataRefSchema = require_data(); var uri_1 = require_uri(); var defaultRegExp = (str, flags) => new RegExp(str, flags); defaultRegExp.code = "new RegExp"; var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"]; var EXT_SCOPE_NAMES = new Set([ "validate", "serialize", "parse", "wrapper", "root", "schema", "keyword", "pattern", "formats", "validate$data", "func", "obj", "Error" ]); var removedOptions = { errorDataPath: "", format: "`validateFormats: false` can be used instead.", nullable: '"nullable" keyword is supported by default.', jsonPointers: "Deprecated jsPropertySyntax can be used instead.", extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.", missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.", processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`", sourceCode: "Use option `code: {source: true}`", strictDefaults: "It is default now, see option `strict`.", strictKeywords: "It is default now, see option `strict`.", uniqueItems: '"uniqueItems" keyword is always validated.', unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).", cache: "Map is used as cache, schema object as key.", serialize: "Map is used as cache, schema object as key.", ajvErrors: "It is default now." }; var deprecatedOptions = { ignoreKeywordsWithRef: "", jsPropertySyntax: "", unicode: '"minLength"/"maxLength" account for unicode characters by default.' }; var MAX_EXPRESSION = 200; function requiredOptions(o) { var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0; const s = o.strict; const _optz = (_a2 = o.code) === null || _a2 === undefined ? undefined : _a2.optimize; const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0; const regExp = (_c = (_b = o.code) === null || _b === undefined ? undefined : _b.regExp) !== null && _c !== undefined ? _c : defaultRegExp; const uriResolver = (_d = o.uriResolver) !== null && _d !== undefined ? _d : uri_1.default; return { strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== undefined ? _e : s) !== null && _f !== undefined ? _f : true, strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== undefined ? _g : s) !== null && _h !== undefined ? _h : true, strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== undefined ? _j : s) !== null && _k !== undefined ? _k : "log", strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== undefined ? _l : s) !== null && _m !== undefined ? _m : "log", strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== undefined ? _o : s) !== null && _p !== undefined ? _p : false, code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp }, loopRequired: (_q = o.loopRequired) !== null && _q !== undefined ? _q : MAX_EXPRESSION, loopEnum: (_r = o.loopEnum) !== null && _r !== undefined ? _r : MAX_EXPRESSION, meta: (_s = o.meta) !== null && _s !== undefined ? _s : true, messages: (_t = o.messages) !== null && _t !== undefined ? _t : true, inlineRefs: (_u = o.inlineRefs) !== null && _u !== undefined ? _u : true, schemaId: (_v = o.schemaId) !== null && _v !== undefined ? _v : "$id", addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== undefined ? _w : true, validateSchema: (_x = o.validateSchema) !== null && _x !== undefined ? _x : true, validateFormats: (_y = o.validateFormats) !== null && _y !== undefined ? _y : true, unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== undefined ? _z : true, int32range: (_0 = o.int32range) !== null && _0 !== undefined ? _0 : true, uriResolver }; } class Ajv { constructor(opts = {}) { this.schemas = {}; this.refs = {}; this.formats = {}; this._compilations = new Set; this._loading = {}; this._cache = new Map; opts = this.opts = { ...opts, ...requiredOptions(opts) }; const { es5, lines } = this.opts.code; this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines }); this.logger = getLogger(opts.logger); const formatOpt = opts.validateFormats; opts.validateFormats = false; this.RULES = (0, rules_1.getRules)(); checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED"); checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn"); this._metaOpts = getMetaSchemaOptions.call(this); if (opts.formats) addInitialFormats.call(this); this._addVocabularies(); this._addDefaultMetaSchema(); if (opts.keywords) addInitialKeywords.call(this, opts.keywords); if (typeof opts.meta == "object") this.addMetaSchema(opts.meta); addInitialSchemas.call(this); opts.validateFormats = formatOpt; } _addVocabularies() { this.addKeyword("$async"); } _addDefaultMetaSchema() { const { $data, meta: meta2, schemaId } = this.opts; let _dataRefSchema = $dataRefSchema; if (schemaId === "id") { _dataRefSchema = { ...$dataRefSchema }; _dataRefSchema.id = _dataRefSchema.$id; delete _dataRefSchema.$id; } if (meta2 && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false); } defaultMeta() { const { meta: meta2, schemaId } = this.opts; return this.opts.defaultMeta = typeof meta2 == "object" ? meta2[schemaId] || meta2 : undefined; } validate(schemaKeyRef, data) { let v; if (typeof schemaKeyRef == "string") { v = this.getSchema(schemaKeyRef); if (!v) throw new Error(`no schema with key or ref "${schemaKeyRef}"`); } else { v = this.compile(schemaKeyRef); } const valid = v(data); if (!("$async" in v)) this.errors = v.errors; return valid; } compile(schema, _meta) { const sch = this._addSchema(schema, _meta); return sch.validate || this._compileSchemaEnv(sch); } compileAsync(schema, meta2) { if (typeof this.opts.loadSchema != "function") { throw new Error("options.loadSchema should be a function"); } const { loadSchema } = this.opts; return runCompileAsync.call(this, schema, meta2); async function runCompileAsync(_schema, _meta) { await loadMetaSchema.call(this, _schema.$schema); const sch = this._addSchema(_schema, _meta); return sch.validate || _compileAsync.call(this, sch); } async function loadMetaSchema($ref) { if ($ref && !this.getSchema($ref)) { await runCompileAsync.call(this, { $ref }, true); } } async function _compileAsync(sch) { try { return this._compileSchemaEnv(sch); } catch (e) { if (!(e instanceof ref_error_1.default)) throw e; checkLoaded.call(this, e); await loadMissingSchema.call(this, e.missingSchema); return _compileAsync.call(this, sch); } } function checkLoaded({ missingSchema: ref, missingRef }) { if (this.refs[ref]) { throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`); } } async function loadMissingSchema(ref) { const _schema = await _loadSchema.call(this, ref); if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema); if (!this.refs[ref]) this.addSchema(_schema, ref, meta2); } async function _loadSchema(ref) { const p = this._loading[ref]; if (p) return p; try { return await (this._loading[ref] = loadSchema(ref)); } finally { delete this._loading[ref]; } } } addSchema(schema, key, _meta, _validateSchema = this.opts.validateSchema) { if (Array.isArray(schema)) { for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema); return this; } let id; if (typeof schema === "object") { const { schemaId } = this.opts; id = schema[schemaId]; if (id !== undefined && typeof id != "string") { throw new Error(`schema ${schemaId} must be string`); } } key = (0, resolve_1.normalizeId)(key || id); this._checkUnique(key); this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true); return this; } addMetaSchema(schema, key, _validateSchema = this.opts.validateSchema) { this.addSchema(schema, key, true, _validateSchema); return this; } validateSchema(schema, throwOrLogError) { if (typeof schema == "boolean") return true; let $schema; $schema = schema.$schema; if ($schema !== undefined && typeof $schema != "string") { throw new Error("$schema must be a string"); } $schema = $schema || this.opts.defaultMeta || this.defaultMeta(); if (!$schema) { this.logger.warn("meta-schema not available"); this.errors = null; return true; } const valid = this.validate($schema, schema); if (!valid && throwOrLogError) { const message = "schema is invalid: " + this.errorsText(); if (this.opts.validateSchema === "log") this.logger.error(message); else throw new Error(message); } return valid; } getSchema(keyRef) { let sch; while (typeof (sch = getSchEnv.call(this, keyRef)) == "string") keyRef = sch; if (sch === undefined) { const { schemaId } = this.opts; const root = new compile_1.SchemaEnv({ schema: {}, schemaId }); sch = compile_1.resolveSchema.call(this, root, keyRef); if (!sch) return; this.refs[keyRef] = sch; } return sch.validate || this._compileSchemaEnv(sch); } removeSchema(schemaKeyRef) { if (schemaKeyRef instanceof RegExp) { this._removeAllSchemas(this.schemas, schemaKeyRef); this._removeAllSchemas(this.refs, schemaKeyRef); return this; } switch (typeof schemaKeyRef) { case "undefined": this._removeAllSchemas(this.schemas); this._removeAllSchemas(this.refs); this._cache.clear(); return this; case "string": { const sch = getSchEnv.call(this, schemaKeyRef); if (typeof sch == "object") this._cache.delete(sch.schema); delete this.schemas[schemaKeyRef]; delete this.refs[schemaKeyRef]; return this; } case "object": { const cacheKey = schemaKeyRef; this._cache.delete(cacheKey); let id = schemaKeyRef[this.opts.schemaId]; if (id) { id = (0, resolve_1.normalizeId)(id); delete this.schemas[id]; delete this.refs[id]; } return this; } default: throw new Error("ajv.removeSchema: invalid parameter"); } } addVocabulary(definitions) { for (const def of definitions) this.addKeyword(def); return this; } addKeyword(kwdOrDef, def) { let keyword; if (typeof kwdOrDef == "string") { keyword = kwdOrDef; if (typeof def == "object") { this.logger.warn("these parameters are deprecated, see docs for addKeyword"); def.keyword = keyword; } } else if (typeof kwdOrDef == "object" && def === undefined) { def = kwdOrDef; keyword = def.keyword; if (Array.isArray(keyword) && !keyword.length) { throw new Error("addKeywords: keyword must be string or non-empty array"); } } else { throw new Error("invalid addKeywords parameters"); } checkKeyword.call(this, keyword, def); if (!def) { (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd)); return this; } keywordMetaschema.call(this, def); const definition = { ...def, type: (0, dataType_1.getJSONTypes)(def.type), schemaType: (0, dataType_1.getJSONTypes)(def.schemaType) }; (0, util_1.eachItem)(keyword, definition.type.length === 0 ? (k) => addRule.call(this, k, definition) : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))); return this; } getKeyword(keyword) { const rule = this.RULES.all[keyword]; return typeof rule == "object" ? rule.definition : !!rule; } removeKeyword(keyword) { const { RULES } = this; delete RULES.keywords[keyword]; delete RULES.all[keyword]; for (const group of RULES.rules) { const i = group.rules.findIndex((rule) => rule.keyword === keyword); if (i >= 0) group.rules.splice(i, 1); } return this; } addFormat(name, format) { if (typeof format == "string") format = new RegExp(format); this.formats[name] = format; return this; } errorsText(errors3 = this.errors, { separator = ", ", dataVar = "data" } = {}) { if (!errors3 || errors3.length === 0) return "No errors"; return errors3.map((e) => `${dataVar}${e.instancePath} ${e.message}`).reduce((text, msg) => text + separator + msg); } $dataMetaSchema(metaSchema, keywordsJsonPointers) { const rules = this.RULES.all; metaSchema = JSON.parse(JSON.stringify(metaSchema)); for (const jsonPointer of keywordsJsonPointers) { const segments = jsonPointer.split("/").slice(1); let keywords = metaSchema; for (const seg of segments) keywords = keywords[seg]; for (const key in rules) { const rule = rules[key]; if (typeof rule != "object") continue; const { $data } = rule.definition; const schema = keywords[key]; if ($data && schema) keywords[key] = schemaOrData(schema); } } return metaSchema; } _removeAllSchemas(schemas3, regex) { for (const keyRef in schemas3) { const sch = schemas3[keyRef]; if (!regex || regex.test(keyRef)) { if (typeof sch == "string") { delete schemas3[keyRef]; } else if (sch && !sch.meta) { this._cache.delete(sch.schema); delete schemas3[keyRef]; } } } } _addSchema(schema, meta2, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) { let id; const { schemaId } = this.opts; if (typeof schema == "object") { id = schema[schemaId]; } else { if (this.opts.jtd) throw new Error("schema must be object"); else if (typeof schema != "boolean") throw new Error("schema must be object or boolean"); } let sch = this._cache.get(schema); if (sch !== undefined) return sch; baseId = (0, resolve_1.normalizeId)(id || baseId); const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId); sch = new compile_1.SchemaEnv({ schema, schemaId, meta: meta2, baseId, localRefs }); this._cache.set(sch.schema, sch); if (addSchema && !baseId.startsWith("#")) { if (baseId) this._checkUnique(baseId); this.refs[baseId] = sch; } if (validateSchema) this.validateSchema(schema, true); return sch; } _checkUnique(id) { if (this.schemas[id] || this.refs[id]) { throw new Error(`schema with key or id "${id}" already exists`); } } _compileSchemaEnv(sch) { if (sch.meta) this._compileMetaSchema(sch); else compile_1.compileSchema.call(this, sch); if (!sch.validate) throw new Error("ajv implementation error"); return sch.validate; } _compileMetaSchema(sch) { const currentOpts = this.opts; this.opts = this._metaOpts; try { compile_1.compileSchema.call(this, sch); } finally { this.opts = currentOpts; } } } Ajv.ValidationError = validation_error_1.default; Ajv.MissingRefError = ref_error_1.default; exports.default = Ajv; function checkOptions(checkOpts, options, msg, log = "error") { for (const key in checkOpts) { const opt = key; if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`); } } function getSchEnv(keyRef) { keyRef = (0, resolve_1.normalizeId)(keyRef); return this.schemas[keyRef] || this.refs[keyRef]; } function addInitialSchemas() { const optsSchemas = this.opts.schemas; if (!optsSchemas) return; if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas); else for (const key in optsSchemas) this.addSchema(optsSchemas[key], key); } function addInitialFormats() { for (const name in this.opts.formats) { const format = this.opts.formats[name]; if (format) this.addFormat(name, format); } } function addInitialKeywords(defs) { if (Array.isArray(defs)) { this.addVocabulary(defs); return; } this.logger.warn("keywords option as map is deprecated, pass array"); for (const keyword in defs) { const def = defs[keyword]; if (!def.keyword) def.keyword = keyword; this.addKeyword(def); } } function getMetaSchemaOptions() { const metaOpts = { ...this.opts }; for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]; return metaOpts; } var noLogs = { log() {}, warn() {}, error() {} }; function getLogger(logger) { if (logger === false) return noLogs; if (logger === undefined) return console; if (logger.log && logger.warn && logger.error) return logger; throw new Error("logger must implement log, warn and error methods"); } var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i; function checkKeyword(keyword, def) { const { RULES } = this; (0, util_1.eachItem)(keyword, (kwd) => { if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`); if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`); }); if (!def) return; if (def.$data && !(("code" in def) || ("validate" in def))) { throw new Error('$data keyword must have "code" or "validate" function'); } } function addRule(keyword, definition, dataType) { var _a2; const post = definition === null || definition === undefined ? undefined : definition.post; if (dataType && post) throw new Error('keyword with "post" flag cannot have "type"'); const { RULES } = this; let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType); if (!ruleGroup) { ruleGroup = { type: dataType, rules: [] }; RULES.rules.push(ruleGroup); } RULES.keywords[keyword] = true; if (!definition) return; const rule = { keyword, definition: { ...definition, type: (0, dataType_1.getJSONTypes)(definition.type), schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType) } }; if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before); else ruleGroup.rules.push(rule); RULES.all[keyword] = rule; (_a2 = definition.implements) === null || _a2 === undefined || _a2.forEach((kwd) => this.addKeyword(kwd)); } function addBeforeRule(ruleGroup, rule, before) { const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before); if (i >= 0) { ruleGroup.rules.splice(i, 0, rule); } else { ruleGroup.rules.push(rule); this.logger.warn(`rule ${before} is not defined`); } } function keywordMetaschema(def) { let { metaSchema } = def; if (metaSchema === undefined) return; if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema); def.validateSchema = this.compile(metaSchema, true); } var $dataRef = { $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" }; function schemaOrData(schema) { return { anyOf: [schema, $dataRef] }; } }); // node_modules/ajv/dist/vocabularies/core/id.js var require_id = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var def = { keyword: "id", code() { throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID'); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/core/ref.js var require_ref = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.callRef = exports.getValidate = undefined; var ref_error_1 = require_ref_error(); var code_1 = require_code2(); var codegen_1 = require_codegen(); var names_1 = require_names(); var compile_1 = require_compile(); var util_1 = require_util(); var def = { keyword: "$ref", schemaType: "string", code(cxt) { const { gen, schema: $ref, it } = cxt; const { baseId, schemaEnv: env, validateName, opts, self: self2 } = it; const { root } = env; if (($ref === "#" || $ref === "#/") && baseId === root.baseId) return callRootRef(); const schOrEnv = compile_1.resolveRef.call(self2, root, baseId, $ref); if (schOrEnv === undefined) throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref); if (schOrEnv instanceof compile_1.SchemaEnv) return callValidate(schOrEnv); return inlineRefSchema(schOrEnv); function callRootRef() { if (env === root) return callRef(cxt, validateName, env, env.$async); const rootName = gen.scopeValue("root", { ref: root }); return callRef(cxt, (0, codegen_1._)`${rootName}.validate`, root, root.$async); } function callValidate(sch) { const v = getValidate(cxt, sch); callRef(cxt, v, sch, sch.$async); } function inlineRefSchema(sch) { const schName = gen.scopeValue("schema", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch }); const valid = gen.name("valid"); const schCxt = cxt.subschema({ schema: sch, dataTypes: [], schemaPath: codegen_1.nil, topSchemaRef: schName, errSchemaPath: $ref }, valid); cxt.mergeEvaluated(schCxt); cxt.ok(valid); } } }; function getValidate(cxt, sch) { const { gen } = cxt; return sch.validate ? gen.scopeValue("validate", { ref: sch.validate }) : (0, codegen_1._)`${gen.scopeValue("wrapper", { ref: sch })}.validate`; } exports.getValidate = getValidate; function callRef(cxt, v, sch, $async) { const { gen, it } = cxt; const { allErrors, schemaEnv: env, opts } = it; const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil; if ($async) callAsyncRef(); else callSyncRef(); function callAsyncRef() { if (!env.$async) throw new Error("async schema referenced by sync schema"); const valid = gen.let("valid"); gen.try(() => { gen.code((0, codegen_1._)`await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`); addEvaluatedFrom(v); if (!allErrors) gen.assign(valid, true); }, (e) => { gen.if((0, codegen_1._)`!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e)); addErrorsFrom(e); if (!allErrors) gen.assign(valid, false); }); cxt.ok(valid); } function callSyncRef() { cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v)); } function addErrorsFrom(source) { const errs = (0, codegen_1._)`${source}.errors`; gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); gen.assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); } function addEvaluatedFrom(source) { var _a2; if (!it.opts.unevaluated) return; const schEvaluated = (_a2 = sch === null || sch === undefined ? undefined : sch.validate) === null || _a2 === undefined ? undefined : _a2.evaluated; if (it.props !== true) { if (schEvaluated && !schEvaluated.dynamicProps) { if (schEvaluated.props !== undefined) { it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props); } } else { const props = gen.var("props", (0, codegen_1._)`${source}.evaluated.props`); it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name); } } if (it.items !== true) { if (schEvaluated && !schEvaluated.dynamicItems) { if (schEvaluated.items !== undefined) { it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items); } } else { const items = gen.var("items", (0, codegen_1._)`${source}.evaluated.items`); it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name); } } } } exports.callRef = callRef; exports.default = def; }); // node_modules/ajv/dist/vocabularies/core/index.js var require_core2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var id_1 = require_id(); var ref_1 = require_ref(); var core2 = [ "$schema", "$id", "$defs", "$vocabulary", { keyword: "$comment" }, "definitions", id_1.default, ref_1.default ]; exports.default = core2; }); // node_modules/ajv/dist/vocabularies/validation/limitNumber.js var require_limitNumber = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var ops = codegen_1.operators; var KWDs = { maximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, minimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, exclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, exclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } }; var error2 = { message: ({ keyword, schemaCode }) => (0, codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`, params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` }; var def = { keyword: Object.keys(KWDs), type: "number", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; cxt.fail$data((0, codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/multipleOf.js var require_multipleOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must be multiple of ${schemaCode}`, params: ({ schemaCode }) => (0, codegen_1._)`{multipleOf: ${schemaCode}}` }; var def = { keyword: "multipleOf", type: "number", schemaType: "number", $data: true, error: error2, code(cxt) { const { gen, data, schemaCode, it } = cxt; const prec = it.opts.multipleOfPrecision; const res = gen.let("res"); const invalid = prec ? (0, codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}` : (0, codegen_1._)`${res} !== parseInt(${res})`; cxt.fail$data((0, codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`); } }; exports.default = def; }); // node_modules/ajv/dist/runtime/ucs2length.js var require_ucs2length = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); function ucs2length(str) { const len = str.length; let length = 0; let pos = 0; let value; while (pos < len) { length++; value = str.charCodeAt(pos++); if (value >= 55296 && value <= 56319 && pos < len) { value = str.charCodeAt(pos); if ((value & 64512) === 56320) pos++; } } return length; } exports.default = ucs2length; ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default'; }); // node_modules/ajv/dist/vocabularies/validation/limitLength.js var require_limitLength = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var ucs2length_1 = require_ucs2length(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxLength" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxLength", "minLength"], type: "string", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode, it } = cxt; const op = keyword === "maxLength" ? codegen_1.operators.GT : codegen_1.operators.LT; const len = it.opts.unicode === false ? (0, codegen_1._)`${data}.length` : (0, codegen_1._)`${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`; cxt.fail$data((0, codegen_1._)`${len} ${op} ${schemaCode}`); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/pattern.js var require_pattern = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var util_1 = require_util(); var codegen_1 = require_codegen(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`, params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}` }; var def = { keyword: "pattern", type: "string", schemaType: "string", $data: true, error: error2, code(cxt) { const { gen, data, $data, schema, schemaCode, it } = cxt; const u = it.opts.unicodeRegExp ? "u" : ""; if ($data) { const { regExp } = it.opts.code; const regExpCode = regExp.code === "new RegExp" ? (0, codegen_1._)`new RegExp` : (0, util_1.useFunc)(gen, regExp); const valid = gen.let("valid"); gen.try(() => gen.assign(valid, (0, codegen_1._)`${regExpCode}(${schemaCode}, ${u}).test(${data})`), () => gen.assign(valid, false)); cxt.fail$data((0, codegen_1._)`!${valid}`); } else { const regExp = (0, code_1.usePattern)(cxt, schema); cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/limitProperties.js var require_limitProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxProperties" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxProperties", "minProperties"], type: "object", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; const op = keyword === "maxProperties" ? codegen_1.operators.GT : codegen_1.operators.LT; cxt.fail$data((0, codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/required.js var require_required = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: ({ params: { missingProperty } }) => (0, codegen_1.str)`must have required property '${missingProperty}'`, params: ({ params: { missingProperty } }) => (0, codegen_1._)`{missingProperty: ${missingProperty}}` }; var def = { keyword: "required", type: "object", schemaType: "array", $data: true, error: error2, code(cxt) { const { gen, schema, schemaCode, data, $data, it } = cxt; const { opts } = it; if (!$data && schema.length === 0) return; const useLoop = schema.length >= opts.loopRequired; if (it.allErrors) allErrorsMode(); else exitOnErrorMode(); if (opts.strictRequired) { const props = cxt.parentSchema.properties; const { definedProperties } = cxt.it; for (const requiredKey of schema) { if ((props === null || props === undefined ? undefined : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) { const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; const msg = `required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`; (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired); } } } function allErrorsMode() { if (useLoop || $data) { cxt.block$data(codegen_1.nil, loopAllRequired); } else { for (const prop of schema) { (0, code_1.checkReportMissingProp)(cxt, prop); } } } function exitOnErrorMode() { const missing = gen.let("missing"); if (useLoop || $data) { const valid = gen.let("valid", true); cxt.block$data(valid, () => loopUntilMissing(missing, valid)); cxt.ok(valid); } else { gen.if((0, code_1.checkMissingProp)(cxt, schema, missing)); (0, code_1.reportMissingProp)(cxt, missing); gen.else(); } } function loopAllRequired() { gen.forOf("prop", schemaCode, (prop) => { cxt.setParams({ missingProperty: prop }); gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error()); }); } function loopUntilMissing(missing, valid) { cxt.setParams({ missingProperty: missing }); gen.forOf(missing, schemaCode, () => { gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties)); gen.if((0, codegen_1.not)(valid), () => { cxt.error(); gen.break(); }); }, codegen_1.nil); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/limitItems.js var require_limitItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxItems" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxItems", "minItems"], type: "array", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; const op = keyword === "maxItems" ? codegen_1.operators.GT : codegen_1.operators.LT; cxt.fail$data((0, codegen_1._)`${data}.length ${op} ${schemaCode}`); } }; exports.default = def; }); // node_modules/ajv/dist/runtime/equal.js var require_equal = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var equal = require_fast_deep_equal(); equal.code = 'require("ajv/dist/runtime/equal").default'; exports.default = equal; }); // node_modules/ajv/dist/vocabularies/validation/uniqueItems.js var require_uniqueItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dataType_1 = require_dataType(); var codegen_1 = require_codegen(); var util_1 = require_util(); var equal_1 = require_equal(); var error2 = { message: ({ params: { i, j } }) => (0, codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`, params: ({ params: { i, j } }) => (0, codegen_1._)`{i: ${i}, j: ${j}}` }; var def = { keyword: "uniqueItems", type: "array", schemaType: "boolean", $data: true, error: error2, code(cxt) { const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt; if (!$data && !schema) return; const valid = gen.let("valid"); const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : []; cxt.block$data(valid, validateUniqueItems, (0, codegen_1._)`${schemaCode} === false`); cxt.ok(valid); function validateUniqueItems() { const i = gen.let("i", (0, codegen_1._)`${data}.length`); const j = gen.let("j"); cxt.setParams({ i, j }); gen.assign(valid, true); gen.if((0, codegen_1._)`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j)); } function canOptimize() { return itemTypes.length > 0 && !itemTypes.some((t) => t === "object" || t === "array"); } function loopN(i, j) { const item = gen.name("item"); const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong); const indices = gen.const("indices", (0, codegen_1._)`{}`); gen.for((0, codegen_1._)`;${i}--;`, () => { gen.let(item, (0, codegen_1._)`${data}[${i}]`); gen.if(wrongType, (0, codegen_1._)`continue`); if (itemTypes.length > 1) gen.if((0, codegen_1._)`typeof ${item} == "string"`, (0, codegen_1._)`${item} += "_"`); gen.if((0, codegen_1._)`typeof ${indices}[${item}] == "number"`, () => { gen.assign(j, (0, codegen_1._)`${indices}[${item}]`); cxt.error(); gen.assign(valid, false).break(); }).code((0, codegen_1._)`${indices}[${item}] = ${i}`); }); } function loopN2(i, j) { const eql = (0, util_1.useFunc)(gen, equal_1.default); const outer = gen.name("outer"); gen.label(outer).for((0, codegen_1._)`;${i}--;`, () => gen.for((0, codegen_1._)`${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`, () => { cxt.error(); gen.assign(valid, false).break(outer); }))); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/const.js var require_const = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var equal_1 = require_equal(); var error2 = { message: "must be equal to constant", params: ({ schemaCode }) => (0, codegen_1._)`{allowedValue: ${schemaCode}}` }; var def = { keyword: "const", $data: true, error: error2, code(cxt) { const { gen, data, $data, schemaCode, schema } = cxt; if ($data || schema && typeof schema == "object") { cxt.fail$data((0, codegen_1._)`!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`); } else { cxt.fail((0, codegen_1._)`${schema} !== ${data}`); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/enum.js var require_enum = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var equal_1 = require_equal(); var error2 = { message: "must be equal to one of the allowed values", params: ({ schemaCode }) => (0, codegen_1._)`{allowedValues: ${schemaCode}}` }; var def = { keyword: "enum", schemaType: "array", $data: true, error: error2, code(cxt) { const { gen, data, $data, schema, schemaCode, it } = cxt; if (!$data && schema.length === 0) throw new Error("enum must have non-empty array"); const useLoop = schema.length >= it.opts.loopEnum; let eql; const getEql = () => eql !== null && eql !== undefined ? eql : eql = (0, util_1.useFunc)(gen, equal_1.default); let valid; if (useLoop || $data) { valid = gen.let("valid"); cxt.block$data(valid, loopEnum); } else { if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const vSchema = gen.const("vSchema", schemaCode); valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i))); } cxt.pass(valid); function loopEnum() { gen.assign(valid, false); gen.forOf("v", schemaCode, (v) => gen.if((0, codegen_1._)`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())); } function equalCode(vSchema, i) { const sch = schema[i]; return typeof sch === "object" && sch !== null ? (0, codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])` : (0, codegen_1._)`${data} === ${sch}`; } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/validation/index.js var require_validation = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var limitNumber_1 = require_limitNumber(); var multipleOf_1 = require_multipleOf(); var limitLength_1 = require_limitLength(); var pattern_1 = require_pattern(); var limitProperties_1 = require_limitProperties(); var required_1 = require_required(); var limitItems_1 = require_limitItems(); var uniqueItems_1 = require_uniqueItems(); var const_1 = require_const(); var enum_1 = require_enum(); var validation = [ limitNumber_1.default, multipleOf_1.default, limitLength_1.default, pattern_1.default, limitProperties_1.default, required_1.default, limitItems_1.default, uniqueItems_1.default, { keyword: "type", schemaType: ["string", "array"] }, { keyword: "nullable", schemaType: "boolean" }, const_1.default, enum_1.default ]; exports.default = validation; }); // node_modules/ajv/dist/vocabularies/applicator/additionalItems.js var require_additionalItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAdditionalItems = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` }; var def = { keyword: "additionalItems", type: "array", schemaType: ["boolean", "object"], before: "uniqueItems", error: error2, code(cxt) { const { parentSchema, it } = cxt; const { items } = parentSchema; if (!Array.isArray(items)) { (0, util_1.checkStrictMode)(it, '"additionalItems" is ignored when "items" is not an array of schemas'); return; } validateAdditionalItems(cxt, items); } }; function validateAdditionalItems(cxt, items) { const { gen, schema, data, keyword, it } = cxt; it.items = true; const len = gen.const("len", (0, codegen_1._)`${data}.length`); if (schema === false) { cxt.setParams({ len: items.length }); cxt.pass((0, codegen_1._)`${len} <= ${items.length}`); } else if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { const valid = gen.var("valid", (0, codegen_1._)`${len} <= ${items.length}`); gen.if((0, codegen_1.not)(valid), () => validateItems(valid)); cxt.ok(valid); } function validateItems(valid) { gen.forRange("i", items.length, len, (i) => { cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); if (!it.allErrors) gen.if((0, codegen_1.not)(valid), () => gen.break()); }); } } exports.validateAdditionalItems = validateAdditionalItems; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/items.js var require_items = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTuple = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); var code_1 = require_code2(); var def = { keyword: "items", type: "array", schemaType: ["object", "array", "boolean"], before: "uniqueItems", code(cxt) { const { schema, it } = cxt; if (Array.isArray(schema)) return validateTuple(cxt, "additionalItems", schema); it.items = true; if ((0, util_1.alwaysValidSchema)(it, schema)) return; cxt.ok((0, code_1.validateArray)(cxt)); } }; function validateTuple(cxt, extraItems, schArr = cxt.schema) { const { gen, parentSchema, data, keyword, it } = cxt; checkStrictTuple(parentSchema); if (it.opts.unevaluated && schArr.length && it.items !== true) { it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items); } const valid = gen.name("valid"); const len = gen.const("len", (0, codegen_1._)`${data}.length`); schArr.forEach((sch, i) => { if ((0, util_1.alwaysValidSchema)(it, sch)) return; gen.if((0, codegen_1._)`${len} > ${i}`, () => cxt.subschema({ keyword, schemaProp: i, dataProp: i }, valid)); cxt.ok(valid); }); function checkStrictTuple(sch) { const { opts, errSchemaPath } = it; const l = schArr.length; const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false); if (opts.strictTuples && !fullTuple) { const msg = `"${keyword}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`; (0, util_1.checkStrictMode)(it, msg, opts.strictTuples); } } } exports.validateTuple = validateTuple; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/prefixItems.js var require_prefixItems = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var items_1 = require_items(); var def = { keyword: "prefixItems", type: "array", schemaType: ["array"], before: "uniqueItems", code: (cxt) => (0, items_1.validateTuple)(cxt, "items") }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/items2020.js var require_items2020 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var code_1 = require_code2(); var additionalItems_1 = require_additionalItems(); var error2 = { message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` }; var def = { keyword: "items", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", error: error2, code(cxt) { const { schema, parentSchema, it } = cxt; const { prefixItems } = parentSchema; it.items = true; if ((0, util_1.alwaysValidSchema)(it, schema)) return; if (prefixItems) (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems); else cxt.ok((0, code_1.validateArray)(cxt)); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/contains.js var require_contains = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: ({ params: { min, max } }) => max === undefined ? (0, codegen_1.str)`must contain at least ${min} valid item(s)` : (0, codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`, params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._)`{minContains: ${min}}` : (0, codegen_1._)`{minContains: ${min}, maxContains: ${max}}` }; var def = { keyword: "contains", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, data, it } = cxt; let min; let max; const { minContains, maxContains } = parentSchema; if (it.opts.next) { min = minContains === undefined ? 1 : minContains; max = maxContains; } else { min = 1; } const len = gen.const("len", (0, codegen_1._)`${data}.length`); cxt.setParams({ min, max }); if (max === undefined && min === 0) { (0, util_1.checkStrictMode)(it, `"minContains" == 0 without "maxContains": "contains" keyword ignored`); return; } if (max !== undefined && min > max) { (0, util_1.checkStrictMode)(it, `"minContains" > "maxContains" is always invalid`); cxt.fail(); return; } if ((0, util_1.alwaysValidSchema)(it, schema)) { let cond = (0, codegen_1._)`${len} >= ${min}`; if (max !== undefined) cond = (0, codegen_1._)`${cond} && ${len} <= ${max}`; cxt.pass(cond); return; } it.items = true; const valid = gen.name("valid"); if (max === undefined && min === 1) { validateItems(valid, () => gen.if(valid, () => gen.break())); } else if (min === 0) { gen.let(valid, true); if (max !== undefined) gen.if((0, codegen_1._)`${data}.length > 0`, validateItemsWithCount); } else { gen.let(valid, false); validateItemsWithCount(); } cxt.result(valid, () => cxt.reset()); function validateItemsWithCount() { const schValid = gen.name("_valid"); const count = gen.let("count", 0); validateItems(schValid, () => gen.if(schValid, () => checkLimits(count))); } function validateItems(_valid, block) { gen.forRange("i", 0, len, (i) => { cxt.subschema({ keyword: "contains", dataProp: i, dataPropType: util_1.Type.Num, compositeRule: true }, _valid); block(); }); } function checkLimits(count) { gen.code((0, codegen_1._)`${count}++`); if (max === undefined) { gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true).break()); } else { gen.if((0, codegen_1._)`${count} > ${max}`, () => gen.assign(valid, false).break()); if (min === 1) gen.assign(valid, true); else gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true)); } } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/dependencies.js var require_dependencies = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined; var codegen_1 = require_codegen(); var util_1 = require_util(); var code_1 = require_code2(); exports.error = { message: ({ params: { property, depsCount, deps } }) => { const property_ies = depsCount === 1 ? "property" : "properties"; return (0, codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`; }, params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._)`{property: ${property}, missingProperty: ${missingProperty}, depsCount: ${depsCount}, deps: ${deps}}` }; var def = { keyword: "dependencies", type: "object", schemaType: "object", error: exports.error, code(cxt) { const [propDeps, schDeps] = splitDependencies(cxt); validatePropertyDeps(cxt, propDeps); validateSchemaDeps(cxt, schDeps); } }; function splitDependencies({ schema }) { const propertyDeps = {}; const schemaDeps = {}; for (const key in schema) { if (key === "__proto__") continue; const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps; deps[key] = schema[key]; } return [propertyDeps, schemaDeps]; } function validatePropertyDeps(cxt, propertyDeps = cxt.schema) { const { gen, data, it } = cxt; if (Object.keys(propertyDeps).length === 0) return; const missing = gen.let("missing"); for (const prop in propertyDeps) { const deps = propertyDeps[prop]; if (deps.length === 0) continue; const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties); cxt.setParams({ property: prop, depsCount: deps.length, deps: deps.join(", ") }); if (it.allErrors) { gen.if(hasProperty, () => { for (const depProp of deps) { (0, code_1.checkReportMissingProp)(cxt, depProp); } }); } else { gen.if((0, codegen_1._)`${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`); (0, code_1.reportMissingProp)(cxt, missing); gen.else(); } } } exports.validatePropertyDeps = validatePropertyDeps; function validateSchemaDeps(cxt, schemaDeps = cxt.schema) { const { gen, data, keyword, it } = cxt; const valid = gen.name("valid"); for (const prop in schemaDeps) { if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop])) continue; gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => { const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid); cxt.mergeValidEvaluated(schCxt, valid); }, () => gen.var(valid, true)); cxt.ok(valid); } } exports.validateSchemaDeps = validateSchemaDeps; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/propertyNames.js var require_propertyNames = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: "property name must be valid", params: ({ params }) => (0, codegen_1._)`{propertyName: ${params.propertyName}}` }; var def = { keyword: "propertyNames", type: "object", schemaType: ["object", "boolean"], error: error2, code(cxt) { const { gen, schema, data, it } = cxt; if ((0, util_1.alwaysValidSchema)(it, schema)) return; const valid = gen.name("valid"); gen.forIn("key", data, (key) => { cxt.setParams({ propertyName: key }); cxt.subschema({ keyword: "propertyNames", data: key, dataTypes: ["string"], propertyName: key, compositeRule: true }, valid); gen.if((0, codegen_1.not)(valid), () => { cxt.error(true); if (!it.allErrors) gen.break(); }); }); cxt.ok(valid); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js var require_additionalProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); var names_1 = require_names(); var util_1 = require_util(); var error2 = { message: "must NOT have additional properties", params: ({ params }) => (0, codegen_1._)`{additionalProperty: ${params.additionalProperty}}` }; var def = { keyword: "additionalProperties", type: ["object"], schemaType: ["boolean", "object"], allowUndefined: true, trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, data, errsCount, it } = cxt; if (!errsCount) throw new Error("ajv implementation error"); const { allErrors, opts } = it; it.props = true; if (opts.removeAdditional !== "all" && (0, util_1.alwaysValidSchema)(it, schema)) return; const props = (0, code_1.allSchemaProperties)(parentSchema.properties); const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties); checkAdditionalProperties(); cxt.ok((0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); function checkAdditionalProperties() { gen.forIn("key", data, (key) => { if (!props.length && !patProps.length) additionalPropertyCode(key); else gen.if(isAdditional(key), () => additionalPropertyCode(key)); }); } function isAdditional(key) { let definedProp; if (props.length > 8) { const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties"); definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key); } else if (props.length) { definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`)); } else { definedProp = codegen_1.nil; } if (patProps.length) { definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`)); } return (0, codegen_1.not)(definedProp); } function deleteAdditional(key) { gen.code((0, codegen_1._)`delete ${data}[${key}]`); } function additionalPropertyCode(key) { if (opts.removeAdditional === "all" || opts.removeAdditional && schema === false) { deleteAdditional(key); return; } if (schema === false) { cxt.setParams({ additionalProperty: key }); cxt.error(); if (!allErrors) gen.break(); return; } if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { const valid = gen.name("valid"); if (opts.removeAdditional === "failing") { applyAdditionalSchema(key, valid, false); gen.if((0, codegen_1.not)(valid), () => { cxt.reset(); deleteAdditional(key); }); } else { applyAdditionalSchema(key, valid); if (!allErrors) gen.if((0, codegen_1.not)(valid), () => gen.break()); } } } function applyAdditionalSchema(key, valid, errors3) { const subschema = { keyword: "additionalProperties", dataProp: key, dataPropType: util_1.Type.Str }; if (errors3 === false) { Object.assign(subschema, { compositeRule: true, createErrors: false, allErrors: false }); } cxt.subschema(subschema, valid); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/properties.js var require_properties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var validate_1 = require_validate(); var code_1 = require_code2(); var util_1 = require_util(); var additionalProperties_1 = require_additionalProperties(); var def = { keyword: "properties", type: "object", schemaType: "object", code(cxt) { const { gen, schema, parentSchema, data, it } = cxt; if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === undefined) { additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, "additionalProperties")); } const allProps = (0, code_1.allSchemaProperties)(schema); for (const prop of allProps) { it.definedProperties.add(prop); } if (it.opts.unevaluated && allProps.length && it.props !== true) { it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props); } const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p])); if (properties.length === 0) return; const valid = gen.name("valid"); for (const prop of properties) { if (hasDefault(prop)) { applyPropertySchema(prop); } else { gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties)); applyPropertySchema(prop); if (!it.allErrors) gen.else().var(valid, true); gen.endIf(); } cxt.it.definedProperties.add(prop); cxt.ok(valid); } function hasDefault(prop) { return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined; } function applyPropertySchema(prop) { cxt.subschema({ keyword: "properties", schemaProp: prop, dataProp: prop }, valid); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/patternProperties.js var require_patternProperties = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var codegen_1 = require_codegen(); var util_1 = require_util(); var util_2 = require_util(); var def = { keyword: "patternProperties", type: "object", schemaType: "object", code(cxt) { const { gen, schema, data, parentSchema, it } = cxt; const { opts } = it; const patterns = (0, code_1.allSchemaProperties)(schema); const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p])); if (patterns.length === 0 || alwaysValidPatterns.length === patterns.length && (!it.opts.unevaluated || it.props === true)) { return; } const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties; const valid = gen.name("valid"); if (it.props !== true && !(it.props instanceof codegen_1.Name)) { it.props = (0, util_2.evaluatedPropsToName)(gen, it.props); } const { props } = it; validatePatternProperties(); function validatePatternProperties() { for (const pat of patterns) { if (checkProperties) checkMatchingProperties(pat); if (it.allErrors) { validateProperties(pat); } else { gen.var(valid, true); validateProperties(pat); gen.if(valid); } } } function checkMatchingProperties(pat) { for (const prop in checkProperties) { if (new RegExp(pat).test(prop)) { (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`); } } } function validateProperties(pat) { gen.forIn("key", data, (key) => { gen.if((0, codegen_1._)`${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => { const alwaysValid = alwaysValidPatterns.includes(pat); if (!alwaysValid) { cxt.subschema({ keyword: "patternProperties", schemaProp: pat, dataProp: key, dataPropType: util_2.Type.Str }, valid); } if (it.opts.unevaluated && props !== true) { gen.assign((0, codegen_1._)`${props}[${key}]`, true); } else if (!alwaysValid && !it.allErrors) { gen.if((0, codegen_1.not)(valid), () => gen.break()); } }); }); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/not.js var require_not = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { keyword: "not", schemaType: ["object", "boolean"], trackErrors: true, code(cxt) { const { gen, schema, it } = cxt; if ((0, util_1.alwaysValidSchema)(it, schema)) { cxt.fail(); return; } const valid = gen.name("valid"); cxt.subschema({ keyword: "not", compositeRule: true, createErrors: false, allErrors: false }, valid); cxt.failResult(valid, () => cxt.reset(), () => cxt.error()); }, error: { message: "must NOT be valid" } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/anyOf.js var require_anyOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code2(); var def = { keyword: "anyOf", schemaType: "array", trackErrors: true, code: code_1.validateUnion, error: { message: "must match a schema in anyOf" } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/oneOf.js var require_oneOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: "must match exactly one schema in oneOf", params: ({ params }) => (0, codegen_1._)`{passingSchemas: ${params.passing}}` }; var def = { keyword: "oneOf", schemaType: "array", trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); if (it.opts.discriminator && parentSchema.discriminator) return; const schArr = schema; const valid = gen.let("valid", false); const passing = gen.let("passing", null); const schValid = gen.name("_valid"); cxt.setParams({ passing }); gen.block(validateOneOf); cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); function validateOneOf() { schArr.forEach((sch, i) => { let schCxt; if ((0, util_1.alwaysValidSchema)(it, sch)) { gen.var(schValid, true); } else { schCxt = cxt.subschema({ keyword: "oneOf", schemaProp: i, compositeRule: true }, schValid); } if (i > 0) { gen.if((0, codegen_1._)`${schValid} && ${valid}`).assign(valid, false).assign(passing, (0, codegen_1._)`[${passing}, ${i}]`).else(); } gen.if(schValid, () => { gen.assign(valid, true); gen.assign(passing, i); if (schCxt) cxt.mergeEvaluated(schCxt, codegen_1.Name); }); }); } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/allOf.js var require_allOf = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { keyword: "allOf", schemaType: "array", code(cxt) { const { gen, schema, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const valid = gen.name("valid"); schema.forEach((sch, i) => { if ((0, util_1.alwaysValidSchema)(it, sch)) return; const schCxt = cxt.subschema({ keyword: "allOf", schemaProp: i }, valid); cxt.ok(valid); cxt.mergeEvaluated(schCxt); }); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/if.js var require_if = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var util_1 = require_util(); var error2 = { message: ({ params }) => (0, codegen_1.str)`must match "${params.ifClause}" schema`, params: ({ params }) => (0, codegen_1._)`{failingKeyword: ${params.ifClause}}` }; var def = { keyword: "if", schemaType: ["object", "boolean"], trackErrors: true, error: error2, code(cxt) { const { gen, parentSchema, it } = cxt; if (parentSchema.then === undefined && parentSchema.else === undefined) { (0, util_1.checkStrictMode)(it, '"if" without "then" and "else" is ignored'); } const hasThen = hasSchema(it, "then"); const hasElse = hasSchema(it, "else"); if (!hasThen && !hasElse) return; const valid = gen.let("valid", true); const schValid = gen.name("_valid"); validateIf(); cxt.reset(); if (hasThen && hasElse) { const ifClause = gen.let("ifClause"); cxt.setParams({ ifClause }); gen.if(schValid, validateClause("then", ifClause), validateClause("else", ifClause)); } else if (hasThen) { gen.if(schValid, validateClause("then")); } else { gen.if((0, codegen_1.not)(schValid), validateClause("else")); } cxt.pass(valid, () => cxt.error(true)); function validateIf() { const schCxt = cxt.subschema({ keyword: "if", compositeRule: true, createErrors: false, allErrors: false }, schValid); cxt.mergeEvaluated(schCxt); } function validateClause(keyword, ifClause) { return () => { const schCxt = cxt.subschema({ keyword }, schValid); gen.assign(valid, schValid); cxt.mergeValidEvaluated(schCxt, valid); if (ifClause) gen.assign(ifClause, (0, codegen_1._)`${keyword}`); else cxt.setParams({ ifClause: keyword }); }; } } }; function hasSchema(it, keyword) { const schema = it.schema[keyword]; return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema); } exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/thenElse.js var require_thenElse = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util(); var def = { keyword: ["then", "else"], schemaType: ["object", "boolean"], code({ keyword, parentSchema, it }) { if (parentSchema.if === undefined) (0, util_1.checkStrictMode)(it, `"${keyword}" without "if" is ignored`); } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/applicator/index.js var require_applicator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var additionalItems_1 = require_additionalItems(); var prefixItems_1 = require_prefixItems(); var items_1 = require_items(); var items2020_1 = require_items2020(); var contains_1 = require_contains(); var dependencies_1 = require_dependencies(); var propertyNames_1 = require_propertyNames(); var additionalProperties_1 = require_additionalProperties(); var properties_1 = require_properties(); var patternProperties_1 = require_patternProperties(); var not_1 = require_not(); var anyOf_1 = require_anyOf(); var oneOf_1 = require_oneOf(); var allOf_1 = require_allOf(); var if_1 = require_if(); var thenElse_1 = require_thenElse(); function getApplicator(draft2020 = false) { const applicator = [ not_1.default, anyOf_1.default, oneOf_1.default, allOf_1.default, if_1.default, thenElse_1.default, propertyNames_1.default, additionalProperties_1.default, dependencies_1.default, properties_1.default, patternProperties_1.default ]; if (draft2020) applicator.push(prefixItems_1.default, items2020_1.default); else applicator.push(additionalItems_1.default, items_1.default); applicator.push(contains_1.default); return applicator; } exports.default = getApplicator; }); // node_modules/ajv/dist/vocabularies/format/format.js var require_format = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must match format "${schemaCode}"`, params: ({ schemaCode }) => (0, codegen_1._)`{format: ${schemaCode}}` }; var def = { keyword: "format", type: ["number", "string"], schemaType: "string", $data: true, error: error2, code(cxt, ruleType) { const { gen, data, $data, schema, schemaCode, it } = cxt; const { opts, errSchemaPath, schemaEnv, self: self2 } = it; if (!opts.validateFormats) return; if ($data) validate$DataFormat(); else validateFormat(); function validate$DataFormat() { const fmts = gen.scopeValue("formats", { ref: self2.formats, code: opts.code.formats }); const fDef = gen.const("fDef", (0, codegen_1._)`${fmts}[${schemaCode}]`); const fType = gen.let("fType"); const format = gen.let("format"); gen.if((0, codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._)`${fDef}.type || "string"`).assign(format, (0, codegen_1._)`${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._)`"string"`).assign(format, fDef)); cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt())); function unknownFmt() { if (opts.strictSchema === false) return codegen_1.nil; return (0, codegen_1._)`${schemaCode} && !${format}`; } function invalidFmt() { const callFormat = schemaEnv.$async ? (0, codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))` : (0, codegen_1._)`${format}(${data})`; const validData = (0, codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`; return (0, codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`; } } function validateFormat() { const formatDef = self2.formats[schema]; if (!formatDef) { unknownFormat(); return; } if (formatDef === true) return; const [fmtType, format, fmtRef] = getFormat(formatDef); if (fmtType === ruleType) cxt.pass(validCondition()); function unknownFormat() { if (opts.strictSchema === false) { self2.logger.warn(unknownMsg()); return; } throw new Error(unknownMsg()); function unknownMsg() { return `unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`; } } function getFormat(fmtDef) { const code = fmtDef instanceof RegExp ? (0, codegen_1.regexpCode)(fmtDef) : opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(schema)}` : undefined; const fmt = gen.scopeValue("formats", { key: schema, ref: fmtDef, code }); if (typeof fmtDef == "object" && !(fmtDef instanceof RegExp)) { return [fmtDef.type || "string", fmtDef.validate, (0, codegen_1._)`${fmt}.validate`]; } return ["string", fmtDef, fmt]; } function validCondition() { if (typeof formatDef == "object" && !(formatDef instanceof RegExp) && formatDef.async) { if (!schemaEnv.$async) throw new Error("async format in sync schema"); return (0, codegen_1._)`await ${fmtRef}(${data})`; } return typeof format == "function" ? (0, codegen_1._)`${fmtRef}(${data})` : (0, codegen_1._)`${fmtRef}.test(${data})`; } } } }; exports.default = def; }); // node_modules/ajv/dist/vocabularies/format/index.js var require_format2 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var format_1 = require_format(); var format = [format_1.default]; exports.default = format; }); // node_modules/ajv/dist/vocabularies/metadata.js var require_metadata = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.contentVocabulary = exports.metadataVocabulary = undefined; exports.metadataVocabulary = [ "title", "description", "default", "deprecated", "readOnly", "writeOnly", "examples" ]; exports.contentVocabulary = [ "contentMediaType", "contentEncoding", "contentSchema" ]; }); // node_modules/ajv/dist/vocabularies/draft7.js var require_draft7 = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require_core2(); var validation_1 = require_validation(); var applicator_1 = require_applicator(); var format_1 = require_format2(); var metadata_1 = require_metadata(); var draft7Vocabularies = [ core_1.default, validation_1.default, (0, applicator_1.default)(), format_1.default, metadata_1.metadataVocabulary, metadata_1.contentVocabulary ]; exports.default = draft7Vocabularies; }); // node_modules/ajv/dist/vocabularies/discriminator/types.js var require_types = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscrError = undefined; var DiscrError; (function(DiscrError2) { DiscrError2["Tag"] = "tag"; DiscrError2["Mapping"] = "mapping"; })(DiscrError || (exports.DiscrError = DiscrError = {})); }); // node_modules/ajv/dist/vocabularies/discriminator/index.js var require_discriminator = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen(); var types_1 = require_types(); var compile_1 = require_compile(); var ref_error_1 = require_ref_error(); var util_1 = require_util(); var error2 = { message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag ? `tag "${tagName}" must be string` : `value of tag "${tagName}" must be in oneOf`, params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}` }; var def = { keyword: "discriminator", type: "object", schemaType: "object", error: error2, code(cxt) { const { gen, data, schema, parentSchema, it } = cxt; const { oneOf } = parentSchema; if (!it.opts.discriminator) { throw new Error("discriminator: requires discriminator option"); } const tagName = schema.propertyName; if (typeof tagName != "string") throw new Error("discriminator: requires propertyName"); if (schema.mapping) throw new Error("discriminator: mapping is not supported"); if (!oneOf) throw new Error("discriminator: requires oneOf keyword"); const valid = gen.let("valid", false); const tag = gen.const("tag", (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(tagName)}`); gen.if((0, codegen_1._)`typeof ${tag} == "string"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName })); cxt.ok(valid); function validateMapping() { const mapping = getMapping(); gen.if(false); for (const tagValue in mapping) { gen.elseIf((0, codegen_1._)`${tag} === ${tagValue}`); gen.assign(valid, applyTagSchema(mapping[tagValue])); } gen.else(); cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName }); gen.endIf(); } function applyTagSchema(schemaProp) { const _valid = gen.name("valid"); const schCxt = cxt.subschema({ keyword: "oneOf", schemaProp }, _valid); cxt.mergeEvaluated(schCxt, codegen_1.Name); return _valid; } function getMapping() { var _a2; const oneOfMapping = {}; const topRequired = hasRequired(parentSchema); let tagRequired = true; for (let i = 0;i < oneOf.length; i++) { let sch = oneOf[i]; if ((sch === null || sch === undefined ? undefined : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) { const ref = sch.$ref; sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref); if (sch instanceof compile_1.SchemaEnv) sch = sch.schema; if (sch === undefined) throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref); } const propSch = (_a2 = sch === null || sch === undefined ? undefined : sch.properties) === null || _a2 === undefined ? undefined : _a2[tagName]; if (typeof propSch != "object") { throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`); } tagRequired = tagRequired && (topRequired || hasRequired(sch)); addMappings(propSch, i); } if (!tagRequired) throw new Error(`discriminator: "${tagName}" must be required`); return oneOfMapping; function hasRequired({ required: required2 }) { return Array.isArray(required2) && required2.includes(tagName); } function addMappings(sch, i) { if (sch.const) { addMapping(sch.const, i); } else if (sch.enum) { for (const tagValue of sch.enum) { addMapping(tagValue, i); } } else { throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`); } } function addMapping(tagValue, i) { if (typeof tagValue != "string" || tagValue in oneOfMapping) { throw new Error(`discriminator: "${tagName}" values must be unique strings`); } oneOfMapping[tagValue] = i; } } } }; exports.default = def; }); // node_modules/ajv/dist/refs/json-schema-draft-07.json var require_json_schema_draft_07 = __commonJS((exports, module) => { module.exports = { $schema: "http://json-schema.org/draft-07/schema#", $id: "http://json-schema.org/draft-07/schema#", title: "Core schema meta-schema", definitions: { schemaArray: { type: "array", minItems: 1, items: { $ref: "#" } }, nonNegativeInteger: { type: "integer", minimum: 0 }, nonNegativeIntegerDefault0: { allOf: [{ $ref: "#/definitions/nonNegativeInteger" }, { default: 0 }] }, simpleTypes: { enum: ["array", "boolean", "integer", "null", "number", "object", "string"] }, stringArray: { type: "array", items: { type: "string" }, uniqueItems: true, default: [] } }, type: ["object", "boolean"], properties: { $id: { type: "string", format: "uri-reference" }, $schema: { type: "string", format: "uri" }, $ref: { type: "string", format: "uri-reference" }, $comment: { type: "string" }, title: { type: "string" }, description: { type: "string" }, default: true, readOnly: { type: "boolean", default: false }, examples: { type: "array", items: true }, multipleOf: { type: "number", exclusiveMinimum: 0 }, maximum: { type: "number" }, exclusiveMaximum: { type: "number" }, minimum: { type: "number" }, exclusiveMinimum: { type: "number" }, maxLength: { $ref: "#/definitions/nonNegativeInteger" }, minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, pattern: { type: "string", format: "regex" }, additionalItems: { $ref: "#" }, items: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/schemaArray" }], default: true }, maxItems: { $ref: "#/definitions/nonNegativeInteger" }, minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, uniqueItems: { type: "boolean", default: false }, contains: { $ref: "#" }, maxProperties: { $ref: "#/definitions/nonNegativeInteger" }, minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, required: { $ref: "#/definitions/stringArray" }, additionalProperties: { $ref: "#" }, definitions: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, properties: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, patternProperties: { type: "object", additionalProperties: { $ref: "#" }, propertyNames: { format: "regex" }, default: {} }, dependencies: { type: "object", additionalProperties: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/stringArray" }] } }, propertyNames: { $ref: "#" }, const: true, enum: { type: "array", items: true, minItems: 1, uniqueItems: true }, type: { anyOf: [ { $ref: "#/definitions/simpleTypes" }, { type: "array", items: { $ref: "#/definitions/simpleTypes" }, minItems: 1, uniqueItems: true } ] }, format: { type: "string" }, contentMediaType: { type: "string" }, contentEncoding: { type: "string" }, if: { $ref: "#" }, then: { $ref: "#" }, else: { $ref: "#" }, allOf: { $ref: "#/definitions/schemaArray" }, anyOf: { $ref: "#/definitions/schemaArray" }, oneOf: { $ref: "#/definitions/schemaArray" }, not: { $ref: "#" } }, default: true }; }); // node_modules/ajv/dist/ajv.js var require_ajv = __commonJS((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = undefined; var core_1 = require_core(); var draft7_1 = require_draft7(); var discriminator_1 = require_discriminator(); var draft7MetaSchema = require_json_schema_draft_07(); var META_SUPPORT_DATA = ["/properties"]; var META_SCHEMA_ID = "http://json-schema.org/draft-07/schema"; class Ajv extends core_1.default { _addVocabularies() { super._addVocabularies(); draft7_1.default.forEach((v) => this.addVocabulary(v)); if (this.opts.discriminator) this.addKeyword(discriminator_1.default); } _addDefaultMetaSchema() { super._addDefaultMetaSchema(); if (!this.opts.meta) return; const metaSchema = this.opts.$data ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA) : draft7MetaSchema; this.addMetaSchema(metaSchema, META_SCHEMA_ID, false); this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID; } defaultMeta() { return this.opts.defaultMeta = super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined); } } exports.Ajv = Ajv; module.exports = exports = Ajv; module.exports.Ajv = Ajv; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Ajv; var validate_1 = require_validate(); Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { return validate_1.KeywordCxt; } }); var codegen_1 = require_codegen(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return codegen_1._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return codegen_1.str; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return codegen_1.stringify; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return codegen_1.nil; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return codegen_1.Name; } }); Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { return codegen_1.CodeGen; } }); var validation_error_1 = require_validation_error(); Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function() { return validation_error_1.default; } }); var ref_error_1 = require_ref_error(); Object.defineProperty(exports, "MissingRefError", { enumerable: true, get: function() { return ref_error_1.default; } }); }); // node_modules/ajv-formats/dist/formats.js var require_formats = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatNames = exports.fastFormats = exports.fullFormats = undefined; function fmtDef(validate, compare) { return { validate, compare }; } exports.fullFormats = { date: fmtDef(date4, compareDate), time: fmtDef(getTime(true), compareTime), "date-time": fmtDef(getDateTime(true), compareDateTime), "iso-time": fmtDef(getTime(), compareIsoTime), "iso-date-time": fmtDef(getDateTime(), compareIsoDateTime), duration: /^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/, uri, "uri-reference": /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, "uri-template": /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i, url: /^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu, email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, hostname: /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i, ipv4: /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/, ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i, regex, uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i, "json-pointer": /^(?:\/(?:[^~/]|~0|~1)*)*$/, "json-pointer-uri-fragment": /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i, "relative-json-pointer": /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/, byte, int32: { type: "number", validate: validateInt32 }, int64: { type: "number", validate: validateInt64 }, float: { type: "number", validate: validateNumber }, double: { type: "number", validate: validateNumber }, password: true, binary: true }; exports.fastFormats = { ...exports.fullFormats, date: fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/, compareDate), time: fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareTime), "date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareDateTime), "iso-time": fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoTime), "iso-date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoDateTime), uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, "uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i }; exports.formatNames = Object.keys(exports.fullFormats); function isLeapYear(year) { return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); } var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function date4(str) { const matches = DATE.exec(str); if (!matches) return false; const year = +matches[1]; const month = +matches[2]; const day = +matches[3]; return month >= 1 && month <= 12 && day >= 1 && day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]); } function compareDate(d1, d2) { if (!(d1 && d2)) return; if (d1 > d2) return 1; if (d1 < d2) return -1; return 0; } var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i; function getTime(strictTimeZone) { return function time3(str) { const matches = TIME.exec(str); if (!matches) return false; const hr = +matches[1]; const min = +matches[2]; const sec = +matches[3]; const tz = matches[4]; const tzSign = matches[5] === "-" ? -1 : 1; const tzH = +(matches[6] || 0); const tzM = +(matches[7] || 0); if (tzH > 23 || tzM > 59 || strictTimeZone && !tz) return false; if (hr <= 23 && min <= 59 && sec < 60) return true; const utcMin = min - tzM * tzSign; const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0); return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61; }; } function compareTime(s1, s2) { if (!(s1 && s2)) return; const t1 = new Date("2020-01-01T" + s1).valueOf(); const t2 = new Date("2020-01-01T" + s2).valueOf(); if (!(t1 && t2)) return; return t1 - t2; } function compareIsoTime(t1, t2) { if (!(t1 && t2)) return; const a1 = TIME.exec(t1); const a2 = TIME.exec(t2); if (!(a1 && a2)) return; t1 = a1[1] + a1[2] + a1[3]; t2 = a2[1] + a2[2] + a2[3]; if (t1 > t2) return 1; if (t1 < t2) return -1; return 0; } var DATE_TIME_SEPARATOR = /t|\s/i; function getDateTime(strictTimeZone) { const time3 = getTime(strictTimeZone); return function date_time(str) { const dateTime = str.split(DATE_TIME_SEPARATOR); return dateTime.length === 2 && date4(dateTime[0]) && time3(dateTime[1]); }; } function compareDateTime(dt1, dt2) { if (!(dt1 && dt2)) return; const d1 = new Date(dt1).valueOf(); const d2 = new Date(dt2).valueOf(); if (!(d1 && d2)) return; return d1 - d2; } function compareIsoDateTime(dt1, dt2) { if (!(dt1 && dt2)) return; const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR); const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR); const res = compareDate(d1, d2); if (res === undefined) return; return res || compareTime(t1, t2); } var NOT_URI_FRAGMENT = /\/|:/; var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; function uri(str) { return NOT_URI_FRAGMENT.test(str) && URI.test(str); } var BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm; function byte(str) { BYTE.lastIndex = 0; return BYTE.test(str); } var MIN_INT32 = -(2 ** 31); var MAX_INT32 = 2 ** 31 - 1; function validateInt32(value) { return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32; } function validateInt64(value) { return Number.isInteger(value); } function validateNumber() { return true; } var Z_ANCHOR = /[^\\]\\Z/; function regex(str) { if (Z_ANCHOR.test(str)) return false; try { new RegExp(str); return true; } catch (e) { return false; } } }); // node_modules/ajv-formats/dist/limit.js var require_limit = __commonJS((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatLimitDefinition = undefined; var ajv_1 = require_ajv(); var codegen_1 = require_codegen(); var ops = codegen_1.operators; var KWDs = { formatMaximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, formatMinimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, formatExclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, formatExclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } }; var error2 = { message: ({ keyword, schemaCode }) => (0, codegen_1.str)`should be ${KWDs[keyword].okStr} ${schemaCode}`, params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` }; exports.formatLimitDefinition = { keyword: Object.keys(KWDs), type: "string", schemaType: "string", $data: true, error: error2, code(cxt) { const { gen, data, schemaCode, keyword, it } = cxt; const { opts, self: self2 } = it; if (!opts.validateFormats) return; const fCxt = new ajv_1.KeywordCxt(it, self2.RULES.all.format.definition, "format"); if (fCxt.$data) validate$DataFormat(); else validateFormat(); function validate$DataFormat() { const fmts = gen.scopeValue("formats", { ref: self2.formats, code: opts.code.formats }); const fmt = gen.const("fmt", (0, codegen_1._)`${fmts}[${fCxt.schemaCode}]`); cxt.fail$data((0, codegen_1.or)((0, codegen_1._)`typeof ${fmt} != "object"`, (0, codegen_1._)`${fmt} instanceof RegExp`, (0, codegen_1._)`typeof ${fmt}.compare != "function"`, compareCode(fmt))); } function validateFormat() { const format = fCxt.schema; const fmtDef = self2.formats[format]; if (!fmtDef || fmtDef === true) return; if (typeof fmtDef != "object" || fmtDef instanceof RegExp || typeof fmtDef.compare != "function") { throw new Error(`"${keyword}": format "${format}" does not define "compare" function`); } const fmt = gen.scopeValue("formats", { key: format, ref: fmtDef, code: opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(format)}` : undefined }); cxt.fail$data(compareCode(fmt)); } function compareCode(fmt) { return (0, codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`; } }, dependencies: ["format"] }; var formatLimitPlugin = (ajv) => { ajv.addKeyword(exports.formatLimitDefinition); return ajv; }; exports.default = formatLimitPlugin; }); // node_modules/ajv-formats/dist/index.js var require_dist = __commonJS((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); var formats_1 = require_formats(); var limit_1 = require_limit(); var codegen_1 = require_codegen(); var fullName = new codegen_1.Name("fullFormats"); var fastName = new codegen_1.Name("fastFormats"); var formatsPlugin = (ajv, opts = { keywords: true }) => { if (Array.isArray(opts)) { addFormats(ajv, opts, formats_1.fullFormats, fullName); return ajv; } const [formats, exportName] = opts.mode === "fast" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName]; const list = opts.formats || formats_1.formatNames; addFormats(ajv, list, formats, exportName); if (opts.keywords) (0, limit_1.default)(ajv); return ajv; }; formatsPlugin.get = (name, mode = "full") => { const formats = mode === "fast" ? formats_1.fastFormats : formats_1.fullFormats; const f = formats[name]; if (!f) throw new Error(`Unknown format "${name}"`); return f; }; function addFormats(ajv, list, fs, exportName) { var _a2; var _b; (_a2 = (_b = ajv.opts.code).formats) !== null && _a2 !== undefined || (_b.formats = (0, codegen_1._)`require("ajv-formats/dist/formats").${exportName}`); for (const f of list) ajv.addFormat(f, fs[f]); } module.exports = exports = formatsPlugin; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = formatsPlugin; }); // node_modules/isexe/windows.js var require_windows = __commonJS((exports, module) => { module.exports = isexe; isexe.sync = sync; var fs = __require("fs"); function checkPathExt(path, options) { var pathext = options.pathExt !== undefined ? options.pathExt : process.env.PATHEXT; if (!pathext) { return true; } pathext = pathext.split(";"); if (pathext.indexOf("") !== -1) { return true; } for (var i = 0;i < pathext.length; i++) { var p = pathext[i].toLowerCase(); if (p && path.substr(-p.length).toLowerCase() === p) { return true; } } return false; } function checkStat(stat, path, options) { if (!stat.isSymbolicLink() && !stat.isFile()) { return false; } return checkPathExt(path, options); } function isexe(path, options, cb) { fs.stat(path, function(er, stat) { cb(er, er ? false : checkStat(stat, path, options)); }); } function sync(path, options) { return checkStat(fs.statSync(path), path, options); } }); // node_modules/isexe/mode.js var require_mode = __commonJS((exports, module) => { module.exports = isexe; isexe.sync = sync; var fs = __require("fs"); function isexe(path, options, cb) { fs.stat(path, function(er, stat) { cb(er, er ? false : checkStat(stat, options)); }); } function sync(path, options) { return checkStat(fs.statSync(path), options); } function checkStat(stat, options) { return stat.isFile() && checkMode(stat, options); } function checkMode(stat, options) { var mod = stat.mode; var uid = stat.uid; var gid = stat.gid; var myUid = options.uid !== undefined ? options.uid : process.getuid && process.getuid(); var myGid = options.gid !== undefined ? options.gid : process.getgid && process.getgid(); var u = parseInt("100", 8); var g = parseInt("010", 8); var o = parseInt("001", 8); var ug = u | g; var ret = mod & o || mod & g && gid === myGid || mod & u && uid === myUid || mod & ug && myUid === 0; return ret; } }); // node_modules/isexe/index.js var require_isexe = __commonJS((exports, module) => { var fs = __require("fs"); var core2; if (process.platform === "win32" || global.TESTING_WINDOWS) { core2 = require_windows(); } else { core2 = require_mode(); } module.exports = isexe; isexe.sync = sync; function isexe(path, options, cb) { if (typeof options === "function") { cb = options; options = {}; } if (!cb) { if (typeof Promise !== "function") { throw new TypeError("callback not provided"); } return new Promise(function(resolve, reject) { isexe(path, options || {}, function(er, is) { if (er) { reject(er); } else { resolve(is); } }); }); } core2(path, options || {}, function(er, is) { if (er) { if (er.code === "EACCES" || options && options.ignoreErrors) { er = null; is = false; } } cb(er, is); }); } function sync(path, options) { try { return core2.sync(path, options || {}); } catch (er) { if (options && options.ignoreErrors || er.code === "EACCES") { return false; } else { throw er; } } } }); // node_modules/which/which.js var require_which = __commonJS((exports, module) => { var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys"; var path = __require("path"); var COLON = isWindows ? ";" : ":"; var isexe = require_isexe(); var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: "ENOENT" }); var getPathInfo = (cmd, opt) => { const colon = opt.colon || COLON; const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [""] : [ ...isWindows ? [process.cwd()] : [], ...(opt.path || process.env.PATH || "").split(colon) ]; const pathExtExe = isWindows ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : ""; const pathExt = isWindows ? pathExtExe.split(colon) : [""]; if (isWindows) { if (cmd.indexOf(".") !== -1 && pathExt[0] !== "") pathExt.unshift(""); } return { pathEnv, pathExt, pathExtExe }; }; var which = (cmd, opt, cb) => { if (typeof opt === "function") { cb = opt; opt = {}; } if (!opt) opt = {}; const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); const found = []; const step = (i) => new Promise((resolve, reject) => { if (i === pathEnv.length) return opt.all && found.length ? resolve(found) : reject(getNotFoundError(cmd)); const ppRaw = pathEnv[i]; const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; const pCmd = path.join(pathPart, cmd); const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; resolve(subStep(p, i, 0)); }); const subStep = (p, i, ii) => new Promise((resolve, reject) => { if (ii === pathExt.length) return resolve(step(i + 1)); const ext = pathExt[ii]; isexe(p + ext, { pathExt: pathExtExe }, (er, is) => { if (!er && is) { if (opt.all) found.push(p + ext); else return resolve(p + ext); } return resolve(subStep(p, i, ii + 1)); }); }); return cb ? step(0).then((res) => cb(null, res), cb) : step(0); }; var whichSync = (cmd, opt) => { opt = opt || {}; const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt); const found = []; for (let i = 0;i < pathEnv.length; i++) { const ppRaw = pathEnv[i]; const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw; const pCmd = path.join(pathPart, cmd); const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd; for (let j = 0;j < pathExt.length; j++) { const cur = p + pathExt[j]; try { const is = isexe.sync(cur, { pathExt: pathExtExe }); if (is) { if (opt.all) found.push(cur); else return cur; } } catch (ex) {} } } if (opt.all && found.length) return found; if (opt.nothrow) return null; throw getNotFoundError(cmd); }; module.exports = which; which.sync = whichSync; }); // node_modules/path-key/index.js var require_path_key = __commonJS((exports, module) => { var pathKey = (options = {}) => { const environment = options.env || process.env; const platform = options.platform || process.platform; if (platform !== "win32") { return "PATH"; } return Object.keys(environment).reverse().find((key) => key.toUpperCase() === "PATH") || "Path"; }; module.exports = pathKey; module.exports.default = pathKey; }); // node_modules/cross-spawn/lib/util/resolveCommand.js var require_resolveCommand = __commonJS((exports, module) => { var path = __require("path"); var which = require_which(); var getPathKey = require_path_key(); function resolveCommandAttempt(parsed, withoutPathExt) { const env = parsed.options.env || process.env; const cwd = process.cwd(); const hasCustomCwd = parsed.options.cwd != null; const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled; if (shouldSwitchCwd) { try { process.chdir(parsed.options.cwd); } catch (err) {} } let resolved; try { resolved = which.sync(parsed.command, { path: env[getPathKey({ env })], pathExt: withoutPathExt ? path.delimiter : undefined }); } catch (e) {} finally { if (shouldSwitchCwd) { process.chdir(cwd); } } if (resolved) { resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : "", resolved); } return resolved; } function resolveCommand(parsed) { return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); } module.exports = resolveCommand; }); // node_modules/cross-spawn/lib/util/escape.js var require_escape = __commonJS((exports, module) => { var metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; function escapeCommand(arg) { arg = arg.replace(metaCharsRegExp, "^$1"); return arg; } function escapeArgument(arg, doubleEscapeMetaChars) { arg = `${arg}`; arg = arg.replace(/(?=(\\+?)?)\1"/g, "$1$1\\\""); arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1"); arg = `"${arg}"`; arg = arg.replace(metaCharsRegExp, "^$1"); if (doubleEscapeMetaChars) { arg = arg.replace(metaCharsRegExp, "^$1"); } return arg; } exports.command = escapeCommand; exports.argument = escapeArgument; }); // node_modules/shebang-regex/index.js var require_shebang_regex = __commonJS((exports, module) => { module.exports = /^#!(.*)/; }); // node_modules/shebang-command/index.js var require_shebang_command = __commonJS((exports, module) => { var shebangRegex = require_shebang_regex(); module.exports = (string4 = "") => { const match = string4.match(shebangRegex); if (!match) { return null; } const [path, argument] = match[0].replace(/#! ?/, "").split(" "); const binary = path.split("/").pop(); if (binary === "env") { return argument; } return argument ? `${binary} ${argument}` : binary; }; }); // node_modules/cross-spawn/lib/util/readShebang.js var require_readShebang = __commonJS((exports, module) => { var fs = __require("fs"); var shebangCommand = require_shebang_command(); function readShebang(command) { const size = 150; const buffer = Buffer.alloc(size); let fd; try { fd = fs.openSync(command, "r"); fs.readSync(fd, buffer, 0, size, 0); fs.closeSync(fd); } catch (e) {} return shebangCommand(buffer.toString()); } module.exports = readShebang; }); // node_modules/cross-spawn/lib/parse.js var require_parse = __commonJS((exports, module) => { var path = __require("path"); var resolveCommand = require_resolveCommand(); var escape2 = require_escape(); var readShebang = require_readShebang(); var isWin = process.platform === "win32"; var isExecutableRegExp = /\.(?:com|exe)$/i; var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; function detectShebang(parsed) { parsed.file = resolveCommand(parsed); const shebang = parsed.file && readShebang(parsed.file); if (shebang) { parsed.args.unshift(parsed.file); parsed.command = shebang; return resolveCommand(parsed); } return parsed.file; } function parseNonShell(parsed) { if (!isWin) { return parsed; } const commandFile = detectShebang(parsed); const needsShell = !isExecutableRegExp.test(commandFile); if (parsed.options.forceShell || needsShell) { const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); parsed.command = path.normalize(parsed.command); parsed.command = escape2.command(parsed.command); parsed.args = parsed.args.map((arg) => escape2.argument(arg, needsDoubleEscapeMetaChars)); const shellCommand = [parsed.command].concat(parsed.args).join(" "); parsed.args = ["/d", "/s", "/c", `"${shellCommand}"`]; parsed.command = process.env.comspec || "cmd.exe"; parsed.options.windowsVerbatimArguments = true; } return parsed; } function parse5(command, args, options) { if (args && !Array.isArray(args)) { options = args; args = null; } args = args ? args.slice(0) : []; options = Object.assign({}, options); const parsed = { command, args, options, file: undefined, original: { command, args } }; return options.shell ? parsed : parseNonShell(parsed); } module.exports = parse5; }); // node_modules/cross-spawn/lib/enoent.js var require_enoent = __commonJS((exports, module) => { var isWin = process.platform === "win32"; function notFoundError(original, syscall) { return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { code: "ENOENT", errno: "ENOENT", syscall: `${syscall} ${original.command}`, path: original.command, spawnargs: original.args }); } function hookChildProcess(cp, parsed) { if (!isWin) { return; } const originalEmit = cp.emit; cp.emit = function(name, arg1) { if (name === "exit") { const err = verifyENOENT(arg1, parsed); if (err) { return originalEmit.call(cp, "error", err); } } return originalEmit.apply(cp, arguments); }; } function verifyENOENT(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, "spawn"); } return null; } function verifyENOENTSync(status, parsed) { if (isWin && status === 1 && !parsed.file) { return notFoundError(parsed.original, "spawnSync"); } return null; } module.exports = { hookChildProcess, verifyENOENT, verifyENOENTSync, notFoundError }; }); // node_modules/cross-spawn/index.js var require_cross_spawn = __commonJS((exports, module) => { var cp = __require("child_process"); var parse5 = require_parse(); var enoent = require_enoent(); function spawn(command, args, options) { const parsed = parse5(command, args, options); const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); enoent.hookChildProcess(spawned, parsed); return spawned; } function spawnSync(command, args, options) { const parsed = parse5(command, args, options); const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); return result; } module.exports = spawn; module.exports.spawn = spawn; module.exports.sync = spawnSync; module.exports._parse = parse5; module.exports._enoent = enoent; }); // src/utils/logger.ts import { appendFileSync, existsSync, mkdirSync, readFileSync } from "fs"; import { join } from "path"; import { homedir } from "os"; class Logger { level = null; useColor; logFilePath = null; logFileInitialized = false; constructor() { this.useColor = process.stdout.isTTY ?? false; } ensureLogFileInitialized() { if (this.logFileInitialized) return; this.logFileInitialized = true; try { const logsDir = join(DEFAULT_DATA_DIR, "logs"); if (!existsSync(logsDir)) { mkdirSync(logsDir, { recursive: true }); } const date4 = new Date().toISOString().split("T")[0]; this.logFilePath = join(logsDir, `claude-mem-${date4}.log`); } catch (error2) { console.error("[LOGGER] Failed to initialize log file:", error2); this.logFilePath = null; } } getLevel() { if (this.level === null) { try { const settingsPath = join(DEFAULT_DATA_DIR, "settings.json"); if (existsSync(settingsPath)) { const settingsData = readFileSync(settingsPath, "utf-8"); const settings = JSON.parse(settingsData); const envLevel = (settings.CLAUDE_MEM_LOG_LEVEL || "INFO").toUpperCase(); this.level = LogLevel[envLevel] ?? 1 /* INFO */; } else { this.level = 1 /* INFO */; } } catch (error2) { this.level = 1 /* INFO */; } } return this.level; } correlationId(sessionId, observationNum) { return `obs-${sessionId}-${observationNum}`; } sessionId(sessionId) { return `session-${sessionId}`; } formatData(data) { if (data === null || data === undefined) return ""; if (typeof data === "string") return data; if (typeof data === "number") return data.toString(); if (typeof data === "boolean") return data.toString(); if (typeof data === "object") { if (data instanceof Error) { return this.getLevel() === 0 /* DEBUG */ ? `${data.message} ${data.stack}` : data.message; } if (Array.isArray(data)) { return `[${data.length} items]`; } const keys = Object.keys(data); if (keys.length === 0) return "{}"; if (keys.length <= 3) { return JSON.stringify(data); } return `{${keys.length} keys: ${keys.slice(0, 3).join(", ")}...}`; } return String(data); } formatTool(toolName, toolInput) { if (!toolInput) return toolName; let input = toolInput; if (typeof toolInput === "string") { try { input = JSON.parse(toolInput); } catch { input = toolInput; } } if (toolName === "Bash" && input.command) { return `${toolName}(${input.command})`; } if (input.file_path) { return `${toolName}(${input.file_path})`; } if (input.notebook_path) { return `${toolName}(${input.notebook_path})`; } if (toolName === "Glob" && input.pattern) { return `${toolName}(${input.pattern})`; } if (toolName === "Grep" && input.pattern) { return `${toolName}(${input.pattern})`; } if (input.url) { return `${toolName}(${input.url})`; } if (input.query) { return `${toolName}(${input.query})`; } if (toolName === "Task") { if (input.subagent_type) { return `${toolName}(${input.subagent_type})`; } if (input.description) { return `${toolName}(${input.description})`; } } if (toolName === "Skill" && input.skill) { return `${toolName}(${input.skill})`; } if (toolName === "LSP" && input.operation) { return `${toolName}(${input.operation})`; } return toolName; } formatTimestamp(date4) { const year = date4.getFullYear(); const month = String(date4.getMonth() + 1).padStart(2, "0"); const day = String(date4.getDate()).padStart(2, "0"); const hours = String(date4.getHours()).padStart(2, "0"); const minutes = String(date4.getMinutes()).padStart(2, "0"); const seconds = String(date4.getSeconds()).padStart(2, "0"); const ms = String(date4.getMilliseconds()).padStart(3, "0"); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${ms}`; } log(level, component, message, context, data) { if (level < this.getLevel()) return; this.ensureLogFileInitialized(); const timestamp = this.formatTimestamp(new Date); const levelStr = LogLevel[level].padEnd(5); const componentStr = component.padEnd(6); let correlationStr = ""; if (context?.correlationId) { correlationStr = `[${context.correlationId}] `; } else if (context?.sessionId) { correlationStr = `[session-${context.sessionId}] `; } let dataStr = ""; if (data !== undefined && data !== null) { if (data instanceof Error) { dataStr = this.getLevel() === 0 /* DEBUG */ ? ` ${data.message} ${data.stack}` : ` ${data.message}`; } else if (this.getLevel() === 0 /* DEBUG */ && typeof data === "object") { dataStr = ` ` + JSON.stringify(data, null, 2); } else { dataStr = " " + this.formatData(data); } } let contextStr = ""; if (context) { const { sessionId, memorySessionId, correlationId, ...rest } = context; if (Object.keys(rest).length > 0) { const pairs = Object.entries(rest).map(([k, v]) => `${k}=${v}`); contextStr = ` {${pairs.join(", ")}}`; } } const logLine = `[${timestamp}] [${levelStr}] [${componentStr}] ${correlationStr}${message}${contextStr}${dataStr}`; if (this.logFilePath) { try { appendFileSync(this.logFilePath, logLine + ` `, "utf8"); } catch (error2) { process.stderr.write(`[LOGGER] Failed to write to log file: ${error2} `); } } else { process.stderr.write(logLine + ` `); } } debug(component, message, context, data) { this.log(0 /* DEBUG */, component, message, context, data); } info(component, message, context, data) { this.log(1 /* INFO */, component, message, context, data); } warn(component, message, context, data) { this.log(2 /* WARN */, component, message, context, data); } error(component, message, context, data) { this.log(3 /* ERROR */, component, message, context, data); } dataIn(component, message, context, data) { this.info(component, `→ ${message}`, context, data); } dataOut(component, message, context, data) { this.info(component, `← ${message}`, context, data); } success(component, message, context, data) { this.info(component, `✓ ${message}`, context, data); } failure(component, message, context, data) { this.error(component, `✗ ${message}`, context, data); } timing(component, message, durationMs, context) { this.info(component, `⏱ ${message}`, context, { duration: `${durationMs}ms` }); } happyPathError(component, message, context, data, fallback = "") { const stack = new Error().stack || ""; const stackLines = stack.split(` `); const callerLine = stackLines[2] || ""; const callerMatch = callerLine.match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/); const location = callerMatch ? `${callerMatch[1].split("/").pop()}:${callerMatch[2]}` : "unknown"; const enhancedContext = { ...context, location }; this.warn(component, `[HAPPY-PATH] ${message}`, enhancedContext, data); return fallback; } } var LogLevel, DEFAULT_DATA_DIR, logger; var init_logger = __esm(() => { ((LogLevel2) => { LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG"; LogLevel2[LogLevel2["INFO"] = 1] = "INFO"; LogLevel2[LogLevel2["WARN"] = 2] = "WARN"; LogLevel2[LogLevel2["ERROR"] = 3] = "ERROR"; LogLevel2[LogLevel2["SILENT"] = 4] = "SILENT"; })(LogLevel ||= {}); DEFAULT_DATA_DIR = join(homedir(), ".claude-mem"); logger = new Logger; }); // src/shared/hook-constants.ts function getTimeout(baseTimeout) { return process.platform === "win32" ? Math.round(baseTimeout * HOOK_TIMEOUTS.WINDOWS_MULTIPLIER) : baseTimeout; } var HOOK_TIMEOUTS, HOOK_EXIT_CODES; var init_hook_constants = __esm(() => { HOOK_TIMEOUTS = { DEFAULT: 300000, HEALTH_CHECK: 3000, POST_SPAWN_WAIT: 5000, READINESS_WAIT: 30000, PORT_IN_USE_WAIT: 3000, WORKER_STARTUP_WAIT: 1000, PRE_RESTART_SETTLE_DELAY: 2000, POWERSHELL_COMMAND: 1e4, WINDOWS_MULTIPLIER: 1.5 }; HOOK_EXIT_CODES = { SUCCESS: 0, FAILURE: 1, BLOCKING_ERROR: 2, USER_MESSAGE_ONLY: 3 }; }); // src/shared/SettingsDefaultsManager.ts var exports_SettingsDefaultsManager = {}; __export(exports_SettingsDefaultsManager, { SettingsDefaultsManager: () => SettingsDefaultsManager }); import { readFileSync as readFileSync2, writeFileSync, existsSync as existsSync2, mkdirSync as mkdirSync2 } from "fs"; import { join as join2, dirname } from "path"; import { homedir as homedir2 } from "os"; var SettingsDefaultsManager; var init_SettingsDefaultsManager = __esm(() => { SettingsDefaultsManager = class SettingsDefaultsManager { static DEFAULTS = { CLAUDE_MEM_MODEL: "claude-sonnet-4-5", CLAUDE_MEM_CONTEXT_OBSERVATIONS: "50", CLAUDE_MEM_WORKER_PORT: "37777", CLAUDE_MEM_WORKER_HOST: "127.0.0.1", CLAUDE_MEM_SKIP_TOOLS: "ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion", CLAUDE_MEM_PROVIDER: "claude", CLAUDE_MEM_CLAUDE_AUTH_METHOD: "cli", CLAUDE_MEM_GEMINI_API_KEY: "", CLAUDE_MEM_GEMINI_MODEL: "gemini-2.5-flash-lite", CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED: "true", CLAUDE_MEM_OPENROUTER_API_KEY: "", CLAUDE_MEM_OPENROUTER_MODEL: "xiaomi/mimo-v2-flash:free", CLAUDE_MEM_OPENROUTER_SITE_URL: "", CLAUDE_MEM_OPENROUTER_APP_NAME: "claude-mem", CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES: "20", CLAUDE_MEM_OPENROUTER_MAX_TOKENS: "100000", CLAUDE_MEM_DATA_DIR: join2(homedir2(), ".claude-mem"), CLAUDE_MEM_LOG_LEVEL: "INFO", CLAUDE_MEM_PYTHON_VERSION: "3.13", CLAUDE_CODE_PATH: "", CLAUDE_MEM_MODE: "code", CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS: "false", CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS: "false", CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT: "false", CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT: "true", CLAUDE_MEM_CONTEXT_FULL_COUNT: "0", CLAUDE_MEM_CONTEXT_FULL_FIELD: "narrative", CLAUDE_MEM_CONTEXT_SESSION_COUNT: "10", CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY: "true", CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE: "false", CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT: "true", CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED: "false", CLAUDE_MEM_MAX_CONCURRENT_AGENTS: "2", CLAUDE_MEM_EXCLUDED_PROJECTS: "", CLAUDE_MEM_FOLDER_MD_EXCLUDE: "[]", CLAUDE_MEM_CHROMA_ENABLED: "true", CLAUDE_MEM_CHROMA_MODE: "local", CLAUDE_MEM_CHROMA_HOST: "127.0.0.1", CLAUDE_MEM_CHROMA_PORT: "8000", CLAUDE_MEM_CHROMA_SSL: "false", CLAUDE_MEM_CHROMA_API_KEY: "", CLAUDE_MEM_CHROMA_TENANT: "default_tenant", CLAUDE_MEM_CHROMA_DATABASE: "default_database" }; static getAllDefaults() { return { ...this.DEFAULTS }; } static get(key) { return process.env[key] ?? this.DEFAULTS[key]; } static getInt(key) { const value = this.get(key); return parseInt(value, 10); } static getBool(key) { const value = this.get(key); return value === "true" || value === true; } static applyEnvOverrides(settings) { const result = { ...settings }; for (const key of Object.keys(this.DEFAULTS)) { if (process.env[key] !== undefined) { result[key] = process.env[key]; } } return result; } static loadFromFile(settingsPath) { try { if (!existsSync2(settingsPath)) { const defaults = this.getAllDefaults(); try { const dir = dirname(settingsPath); if (!existsSync2(dir)) { mkdirSync2(dir, { recursive: true }); } writeFileSync(settingsPath, JSON.stringify(defaults, null, 2), "utf-8"); console.log("[SETTINGS] Created settings file with defaults:", settingsPath); } catch (error2) { console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:", settingsPath, error2); } return this.applyEnvOverrides(defaults); } const settingsData = readFileSync2(settingsPath, "utf-8"); const settings = JSON.parse(settingsData); let flatSettings = settings; if (settings.env && typeof settings.env === "object") { flatSettings = settings.env; try { writeFileSync(settingsPath, JSON.stringify(flatSettings, null, 2), "utf-8"); console.log("[SETTINGS] Migrated settings file from nested to flat schema:", settingsPath); } catch (error2) { console.warn("[SETTINGS] Failed to auto-migrate settings file:", settingsPath, error2); } } const result = { ...this.DEFAULTS }; for (const key of Object.keys(this.DEFAULTS)) { if (flatSettings[key] !== undefined) { result[key] = flatSettings[key]; } } return this.applyEnvOverrides(result); } catch (error2) { console.warn("[SETTINGS] Failed to load settings, using defaults:", settingsPath, error2); return this.applyEnvOverrides(this.getAllDefaults()); } } }; }); // src/shared/paths.ts var exports_paths = {}; __export(exports_paths, { getWorkerSocketPath: () => getWorkerSocketPath, getProjectArchiveDir: () => getProjectArchiveDir, getPackageRoot: () => getPackageRoot, getPackageCommandsDir: () => getPackageCommandsDir, getCurrentProjectName: () => getCurrentProjectName, ensureModesDir: () => ensureModesDir, ensureDir: () => ensureDir, ensureAllDataDirs: () => ensureAllDataDirs, ensureAllClaudeDirs: () => ensureAllClaudeDirs, createBackupFilename: () => createBackupFilename, VECTOR_DB_DIR: () => VECTOR_DB_DIR, USER_SETTINGS_PATH: () => USER_SETTINGS_PATH, TRASH_DIR: () => TRASH_DIR, OBSERVER_SESSIONS_DIR: () => OBSERVER_SESSIONS_DIR, MODES_DIR: () => MODES_DIR, MARKETPLACE_ROOT: () => MARKETPLACE_ROOT, LOGS_DIR: () => LOGS_DIR, DB_PATH: () => DB_PATH, DATA_DIR: () => DATA_DIR, CLAUDE_SETTINGS_PATH: () => CLAUDE_SETTINGS_PATH, CLAUDE_MD_PATH: () => CLAUDE_MD_PATH, CLAUDE_CONFIG_DIR: () => CLAUDE_CONFIG_DIR, CLAUDE_COMMANDS_DIR: () => CLAUDE_COMMANDS_DIR, BACKUPS_DIR: () => BACKUPS_DIR, ARCHIVES_DIR: () => ARCHIVES_DIR }); import { join as join3, dirname as dirname2, basename } from "path"; import { homedir as homedir3 } from "os"; import { existsSync as existsSync3, mkdirSync as mkdirSync3 } from "fs"; import { execSync } from "child_process"; import { fileURLToPath } from "url"; function getDirname() { if (typeof __dirname !== "undefined") { return __dirname; } return dirname2(fileURLToPath(import.meta.url)); } function resolveDataDir() { if (process.env.CLAUDE_MEM_DATA_DIR) { return process.env.CLAUDE_MEM_DATA_DIR; } const defaultDataDir = join3(homedir3(), ".claude-mem"); const settingsPath = join3(defaultDataDir, "settings.json"); try { if (existsSync3(settingsPath)) { const { readFileSync: readFileSync3 } = __require("fs"); const raw = JSON.parse(readFileSync3(settingsPath, "utf-8")); const settings = raw.env ?? raw; if (settings.CLAUDE_MEM_DATA_DIR) { return settings.CLAUDE_MEM_DATA_DIR; } } } catch {} return defaultDataDir; } function getProjectArchiveDir(projectName) { return join3(ARCHIVES_DIR, projectName); } function getWorkerSocketPath(sessionId) { return join3(DATA_DIR, `worker-${sessionId}.sock`); } function ensureDir(dirPath) { mkdirSync3(dirPath, { recursive: true }); } function ensureAllDataDirs() { ensureDir(DATA_DIR); ensureDir(ARCHIVES_DIR); ensureDir(LOGS_DIR); ensureDir(TRASH_DIR); ensureDir(BACKUPS_DIR); ensureDir(MODES_DIR); } function ensureModesDir() { ensureDir(MODES_DIR); } function ensureAllClaudeDirs() { ensureDir(CLAUDE_CONFIG_DIR); ensureDir(CLAUDE_COMMANDS_DIR); } function getCurrentProjectName() { try { const gitRoot = execSync("git rev-parse --show-toplevel", { cwd: process.cwd(), encoding: "utf8", stdio: ["pipe", "pipe", "ignore"], windowsHide: true }).trim(); return basename(dirname2(gitRoot)) + "/" + basename(gitRoot); } catch (error2) { logger.debug("SYSTEM", "Git root detection failed, using cwd basename", { cwd: process.cwd() }, error2); const cwd = process.cwd(); return basename(dirname2(cwd)) + "/" + basename(cwd); } } function getPackageRoot() { return join3(_dirname, ".."); } function getPackageCommandsDir() { const packageRoot = getPackageRoot(); return join3(packageRoot, "commands"); } function createBackupFilename(originalPath) { const timestamp = new Date().toISOString().replace(/[:.]/g, "-").replace("T", "_").slice(0, 19); return `${originalPath}.backup.${timestamp}`; } var __dirname = "/Users/alexnewman/conductor/workspaces/claude-mem/banjul/src/shared", _dirname, DATA_DIR, CLAUDE_CONFIG_DIR, MARKETPLACE_ROOT, ARCHIVES_DIR, LOGS_DIR, TRASH_DIR, BACKUPS_DIR, MODES_DIR, USER_SETTINGS_PATH, DB_PATH, VECTOR_DB_DIR, OBSERVER_SESSIONS_DIR, CLAUDE_SETTINGS_PATH, CLAUDE_COMMANDS_DIR, CLAUDE_MD_PATH; var init_paths = __esm(() => { init_logger(); _dirname = getDirname(); DATA_DIR = resolveDataDir(); CLAUDE_CONFIG_DIR = process.env.CLAUDE_CONFIG_DIR || join3(homedir3(), ".claude"); MARKETPLACE_ROOT = join3(CLAUDE_CONFIG_DIR, "plugins", "marketplaces", "thedotmack"); ARCHIVES_DIR = join3(DATA_DIR, "archives"); LOGS_DIR = join3(DATA_DIR, "logs"); TRASH_DIR = join3(DATA_DIR, "trash"); BACKUPS_DIR = join3(DATA_DIR, "backups"); MODES_DIR = join3(DATA_DIR, "modes"); USER_SETTINGS_PATH = join3(DATA_DIR, "settings.json"); DB_PATH = join3(DATA_DIR, "claude-mem.db"); VECTOR_DB_DIR = join3(DATA_DIR, "vector-db"); OBSERVER_SESSIONS_DIR = join3(DATA_DIR, "observer-sessions"); CLAUDE_SETTINGS_PATH = join3(CLAUDE_CONFIG_DIR, "settings.json"); CLAUDE_COMMANDS_DIR = join3(CLAUDE_CONFIG_DIR, "commands"); CLAUDE_MD_PATH = join3(CLAUDE_CONFIG_DIR, "CLAUDE.md"); }); // src/shared/worker-utils.ts import path from "path"; import { readFileSync as readFileSync3 } from "fs"; function fetchWithTimeout(url, init = {}, timeoutMs) { return new Promise((resolve, reject) => { const timeoutId = setTimeout(() => reject(new Error(`Request timed out after ${timeoutMs}ms`)), timeoutMs); fetch(url, init).then((response) => { clearTimeout(timeoutId); resolve(response); }, (err) => { clearTimeout(timeoutId); reject(err); }); }); } function getWorkerPort() { if (cachedPort !== null) { return cachedPort; } const settingsPath = path.join(SettingsDefaultsManager.get("CLAUDE_MEM_DATA_DIR"), "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); cachedPort = parseInt(settings.CLAUDE_MEM_WORKER_PORT, 10); return cachedPort; } function getWorkerHost() { if (cachedHost !== null) { return cachedHost; } const settingsPath = path.join(SettingsDefaultsManager.get("CLAUDE_MEM_DATA_DIR"), "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); cachedHost = settings.CLAUDE_MEM_WORKER_HOST; return cachedHost; } function clearPortCache() { cachedPort = null; cachedHost = null; } function buildWorkerUrl(apiPath) { return `http://${getWorkerHost()}:${getWorkerPort()}${apiPath}`; } function workerHttpRequest(apiPath, options = {}) { const method = options.method ?? "GET"; const timeoutMs = options.timeoutMs ?? HEALTH_CHECK_TIMEOUT_MS; const url = buildWorkerUrl(apiPath); const init = { method }; if (options.headers) { init.headers = options.headers; } if (options.body) { init.body = options.body; } if (timeoutMs > 0) { return fetchWithTimeout(url, init, timeoutMs); } return fetch(url, init); } async function isWorkerHealthy() { const response = await workerHttpRequest("/api/health", { timeoutMs: HEALTH_CHECK_TIMEOUT_MS }); return response.ok; } function getPluginVersion() { try { const packageJsonPath = path.join(MARKETPLACE_ROOT, "package.json"); const packageJson = JSON.parse(readFileSync3(packageJsonPath, "utf-8")); return packageJson.version; } catch (error2) { const code = error2.code; if (code === "ENOENT" || code === "EBUSY") { logger.debug("SYSTEM", "Could not read plugin version (shutdown race)", { code }); return "unknown"; } throw error2; } } async function getWorkerVersion() { const response = await workerHttpRequest("/api/version", { timeoutMs: HEALTH_CHECK_TIMEOUT_MS }); if (!response.ok) { throw new Error(`Failed to get worker version: ${response.status}`); } const data = await response.json(); return data.version; } async function checkWorkerVersion() { try { const pluginVersion = getPluginVersion(); if (pluginVersion === "unknown") return; const workerVersion = await getWorkerVersion(); if (workerVersion === "unknown") return; if (pluginVersion !== workerVersion) { logger.debug("SYSTEM", "Version check", { pluginVersion, workerVersion, note: "Mismatch will be auto-restarted by worker-service start command" }); } } catch (error2) { logger.debug("SYSTEM", "Version check failed", { error: error2 instanceof Error ? error2.message : String(error2) }); } } async function ensureWorkerRunning() { try { if (await isWorkerHealthy()) { await checkWorkerVersion(); return true; } } catch (e) { logger.debug("SYSTEM", "Worker health check failed", { error: e instanceof Error ? e.message : String(e) }); } logger.warn("SYSTEM", "Worker not healthy, hook will proceed gracefully"); return false; } var HEALTH_CHECK_TIMEOUT_MS, cachedPort = null, cachedHost = null; var init_worker_utils = __esm(() => { init_logger(); init_hook_constants(); init_SettingsDefaultsManager(); init_paths(); HEALTH_CHECK_TIMEOUT_MS = (() => { const envVal = process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS; if (envVal) { const parsed = parseInt(envVal, 10); if (Number.isFinite(parsed) && parsed >= 500 && parsed <= 300000) { return parsed; } logger.warn("SYSTEM", "Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default", { value: envVal, min: 500, max: 300000 }); } return getTimeout(HOOK_TIMEOUTS.HEALTH_CHECK); })(); }); // src/services/sqlite/observations/store.ts import { createHash } from "crypto"; function computeObservationContentHash(memorySessionId, title, narrative) { return createHash("sha256").update((memorySessionId || "") + (title || "") + (narrative || "")).digest("hex").slice(0, 16); } function findDuplicateObservation(db, contentHash, timestampEpoch) { const windowStart = timestampEpoch - DEDUP_WINDOW_MS; const stmt = db.prepare("SELECT id, created_at_epoch FROM observations WHERE content_hash = ? AND created_at_epoch > ?"); return stmt.get(contentHash, windowStart); } var DEDUP_WINDOW_MS = 30000; var init_store = __esm(() => { init_logger(); init_paths(); }); // src/services/sqlite/SessionStore.ts import { Database } from "bun:sqlite"; class SessionStore { db; constructor(dbPath = DB_PATH) { if (dbPath !== ":memory:") { ensureDir(DATA_DIR); } this.db = new Database(dbPath); this.db.run("PRAGMA journal_mode = WAL"); this.db.run("PRAGMA synchronous = NORMAL"); this.db.run("PRAGMA foreign_keys = ON"); this.initializeSchema(); this.ensureWorkerPortColumn(); this.ensurePromptTrackingColumns(); this.removeSessionSummariesUniqueConstraint(); this.addObservationHierarchicalFields(); this.makeObservationsTextNullable(); this.createUserPromptsTable(); this.ensureDiscoveryTokensColumn(); this.createPendingMessagesTable(); this.renameSessionIdColumns(); this.repairSessionIdColumnRename(); this.addFailedAtEpochColumn(); this.addOnUpdateCascadeToForeignKeys(); this.addObservationContentHashColumn(); this.addSessionCustomTitleColumn(); } initializeSchema() { this.db.run(` CREATE TABLE IF NOT EXISTS schema_versions ( id INTEGER PRIMARY KEY, version INTEGER UNIQUE NOT NULL, applied_at TEXT NOT NULL ) `); this.db.run(` CREATE TABLE IF NOT EXISTS sdk_sessions ( id INTEGER PRIMARY KEY AUTOINCREMENT, content_session_id TEXT UNIQUE NOT NULL, memory_session_id TEXT UNIQUE, project TEXT NOT NULL, user_prompt TEXT, started_at TEXT NOT NULL, started_at_epoch INTEGER NOT NULL, completed_at TEXT, completed_at_epoch INTEGER, status TEXT CHECK(status IN ('active', 'completed', 'failed')) NOT NULL DEFAULT 'active' ); CREATE INDEX IF NOT EXISTS idx_sdk_sessions_claude_id ON sdk_sessions(content_session_id); CREATE INDEX IF NOT EXISTS idx_sdk_sessions_sdk_id ON sdk_sessions(memory_session_id); CREATE INDEX IF NOT EXISTS idx_sdk_sessions_project ON sdk_sessions(project); CREATE INDEX IF NOT EXISTS idx_sdk_sessions_status ON sdk_sessions(status); CREATE INDEX IF NOT EXISTS idx_sdk_sessions_started ON sdk_sessions(started_at_epoch DESC); CREATE TABLE IF NOT EXISTS observations ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT NOT NULL, project TEXT NOT NULL, text TEXT NOT NULL, type TEXT NOT NULL, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX IF NOT EXISTS idx_observations_sdk_session ON observations(memory_session_id); CREATE INDEX IF NOT EXISTS idx_observations_project ON observations(project); CREATE INDEX IF NOT EXISTS idx_observations_type ON observations(type); CREATE INDEX IF NOT EXISTS idx_observations_created ON observations(created_at_epoch DESC); CREATE TABLE IF NOT EXISTS session_summaries ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT UNIQUE NOT NULL, project TEXT NOT NULL, request TEXT, investigated TEXT, learned TEXT, completed TEXT, next_steps TEXT, files_read TEXT, files_edited TEXT, notes TEXT, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ON UPDATE CASCADE ); CREATE INDEX IF NOT EXISTS idx_session_summaries_sdk_session ON session_summaries(memory_session_id); CREATE INDEX IF NOT EXISTS idx_session_summaries_project ON session_summaries(project); CREATE INDEX IF NOT EXISTS idx_session_summaries_created ON session_summaries(created_at_epoch DESC); `); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(4, new Date().toISOString()); } ensureWorkerPortColumn() { const tableInfo = this.db.query("PRAGMA table_info(sdk_sessions)").all(); const hasWorkerPort = tableInfo.some((col) => col.name === "worker_port"); if (!hasWorkerPort) { this.db.run("ALTER TABLE sdk_sessions ADD COLUMN worker_port INTEGER"); logger.debug("DB", "Added worker_port column to sdk_sessions table"); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(5, new Date().toISOString()); } ensurePromptTrackingColumns() { const sessionsInfo = this.db.query("PRAGMA table_info(sdk_sessions)").all(); const hasPromptCounter = sessionsInfo.some((col) => col.name === "prompt_counter"); if (!hasPromptCounter) { this.db.run("ALTER TABLE sdk_sessions ADD COLUMN prompt_counter INTEGER DEFAULT 0"); logger.debug("DB", "Added prompt_counter column to sdk_sessions table"); } const observationsInfo = this.db.query("PRAGMA table_info(observations)").all(); const obsHasPromptNumber = observationsInfo.some((col) => col.name === "prompt_number"); if (!obsHasPromptNumber) { this.db.run("ALTER TABLE observations ADD COLUMN prompt_number INTEGER"); logger.debug("DB", "Added prompt_number column to observations table"); } const summariesInfo = this.db.query("PRAGMA table_info(session_summaries)").all(); const sumHasPromptNumber = summariesInfo.some((col) => col.name === "prompt_number"); if (!sumHasPromptNumber) { this.db.run("ALTER TABLE session_summaries ADD COLUMN prompt_number INTEGER"); logger.debug("DB", "Added prompt_number column to session_summaries table"); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(6, new Date().toISOString()); } removeSessionSummariesUniqueConstraint() { const summariesIndexes = this.db.query("PRAGMA index_list(session_summaries)").all(); const hasUniqueConstraint = summariesIndexes.some((idx) => idx.unique === 1); if (!hasUniqueConstraint) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(7, new Date().toISOString()); return; } logger.debug("DB", "Removing UNIQUE constraint from session_summaries.memory_session_id"); this.db.run("BEGIN TRANSACTION"); this.db.run("DROP TABLE IF EXISTS session_summaries_new"); this.db.run(` CREATE TABLE session_summaries_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT NOT NULL, project TEXT NOT NULL, request TEXT, investigated TEXT, learned TEXT, completed TEXT, next_steps TEXT, files_read TEXT, files_edited TEXT, notes TEXT, prompt_number INTEGER, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ) `); this.db.run(` INSERT INTO session_summaries_new SELECT id, memory_session_id, project, request, investigated, learned, completed, next_steps, files_read, files_edited, notes, prompt_number, created_at, created_at_epoch FROM session_summaries `); this.db.run("DROP TABLE session_summaries"); this.db.run("ALTER TABLE session_summaries_new RENAME TO session_summaries"); this.db.run(` CREATE INDEX idx_session_summaries_sdk_session ON session_summaries(memory_session_id); CREATE INDEX idx_session_summaries_project ON session_summaries(project); CREATE INDEX idx_session_summaries_created ON session_summaries(created_at_epoch DESC); `); this.db.run("COMMIT"); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(7, new Date().toISOString()); logger.debug("DB", "Successfully removed UNIQUE constraint from session_summaries.memory_session_id"); } addObservationHierarchicalFields() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(8); if (applied) return; const tableInfo = this.db.query("PRAGMA table_info(observations)").all(); const hasTitle = tableInfo.some((col) => col.name === "title"); if (hasTitle) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(8, new Date().toISOString()); return; } logger.debug("DB", "Adding hierarchical fields to observations table"); this.db.run(` ALTER TABLE observations ADD COLUMN title TEXT; ALTER TABLE observations ADD COLUMN subtitle TEXT; ALTER TABLE observations ADD COLUMN facts TEXT; ALTER TABLE observations ADD COLUMN narrative TEXT; ALTER TABLE observations ADD COLUMN concepts TEXT; ALTER TABLE observations ADD COLUMN files_read TEXT; ALTER TABLE observations ADD COLUMN files_modified TEXT; `); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(8, new Date().toISOString()); logger.debug("DB", "Successfully added hierarchical fields to observations table"); } makeObservationsTextNullable() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(9); if (applied) return; const tableInfo = this.db.query("PRAGMA table_info(observations)").all(); const textColumn = tableInfo.find((col) => col.name === "text"); if (!textColumn || textColumn.notnull === 0) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(9, new Date().toISOString()); return; } logger.debug("DB", "Making observations.text nullable"); this.db.run("BEGIN TRANSACTION"); this.db.run("DROP TABLE IF EXISTS observations_new"); this.db.run(` CREATE TABLE observations_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT NOT NULL, project TEXT NOT NULL, text TEXT, type TEXT NOT NULL, title TEXT, subtitle TEXT, facts TEXT, narrative TEXT, concepts TEXT, files_read TEXT, files_modified TEXT, prompt_number INTEGER, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ) `); this.db.run(` INSERT INTO observations_new SELECT id, memory_session_id, project, text, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, created_at, created_at_epoch FROM observations `); this.db.run("DROP TABLE observations"); this.db.run("ALTER TABLE observations_new RENAME TO observations"); this.db.run(` CREATE INDEX idx_observations_sdk_session ON observations(memory_session_id); CREATE INDEX idx_observations_project ON observations(project); CREATE INDEX idx_observations_type ON observations(type); CREATE INDEX idx_observations_created ON observations(created_at_epoch DESC); `); this.db.run("COMMIT"); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(9, new Date().toISOString()); logger.debug("DB", "Successfully made observations.text nullable"); } createUserPromptsTable() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(10); if (applied) return; const tableInfo = this.db.query("PRAGMA table_info(user_prompts)").all(); if (tableInfo.length > 0) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(10, new Date().toISOString()); return; } logger.debug("DB", "Creating user_prompts table with FTS5 support"); this.db.run("BEGIN TRANSACTION"); this.db.run(` CREATE TABLE user_prompts ( id INTEGER PRIMARY KEY AUTOINCREMENT, content_session_id TEXT NOT NULL, prompt_number INTEGER NOT NULL, prompt_text TEXT NOT NULL, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(content_session_id) REFERENCES sdk_sessions(content_session_id) ON DELETE CASCADE ); CREATE INDEX idx_user_prompts_claude_session ON user_prompts(content_session_id); CREATE INDEX idx_user_prompts_created ON user_prompts(created_at_epoch DESC); CREATE INDEX idx_user_prompts_prompt_number ON user_prompts(prompt_number); CREATE INDEX idx_user_prompts_lookup ON user_prompts(content_session_id, prompt_number); `); try { this.db.run(` CREATE VIRTUAL TABLE user_prompts_fts USING fts5( prompt_text, content='user_prompts', content_rowid='id' ); `); this.db.run(` CREATE TRIGGER user_prompts_ai AFTER INSERT ON user_prompts BEGIN INSERT INTO user_prompts_fts(rowid, prompt_text) VALUES (new.id, new.prompt_text); END; CREATE TRIGGER user_prompts_ad AFTER DELETE ON user_prompts BEGIN INSERT INTO user_prompts_fts(user_prompts_fts, rowid, prompt_text) VALUES('delete', old.id, old.prompt_text); END; CREATE TRIGGER user_prompts_au AFTER UPDATE ON user_prompts BEGIN INSERT INTO user_prompts_fts(user_prompts_fts, rowid, prompt_text) VALUES('delete', old.id, old.prompt_text); INSERT INTO user_prompts_fts(rowid, prompt_text) VALUES (new.id, new.prompt_text); END; `); } catch (ftsError) { logger.warn("DB", "FTS5 not available — user_prompts_fts skipped (search uses ChromaDB)", {}, ftsError); } this.db.run("COMMIT"); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(10, new Date().toISOString()); logger.debug("DB", "Successfully created user_prompts table"); } ensureDiscoveryTokensColumn() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(11); if (applied) return; const observationsInfo = this.db.query("PRAGMA table_info(observations)").all(); const obsHasDiscoveryTokens = observationsInfo.some((col) => col.name === "discovery_tokens"); if (!obsHasDiscoveryTokens) { this.db.run("ALTER TABLE observations ADD COLUMN discovery_tokens INTEGER DEFAULT 0"); logger.debug("DB", "Added discovery_tokens column to observations table"); } const summariesInfo = this.db.query("PRAGMA table_info(session_summaries)").all(); const sumHasDiscoveryTokens = summariesInfo.some((col) => col.name === "discovery_tokens"); if (!sumHasDiscoveryTokens) { this.db.run("ALTER TABLE session_summaries ADD COLUMN discovery_tokens INTEGER DEFAULT 0"); logger.debug("DB", "Added discovery_tokens column to session_summaries table"); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(11, new Date().toISOString()); } createPendingMessagesTable() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(16); if (applied) return; const tables = this.db.query("SELECT name FROM sqlite_master WHERE type='table' AND name='pending_messages'").all(); if (tables.length > 0) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(16, new Date().toISOString()); return; } logger.debug("DB", "Creating pending_messages table"); this.db.run(` CREATE TABLE pending_messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_db_id INTEGER NOT NULL, content_session_id TEXT NOT NULL, message_type TEXT NOT NULL CHECK(message_type IN ('observation', 'summarize')), tool_name TEXT, tool_input TEXT, tool_response TEXT, cwd TEXT, last_user_message TEXT, last_assistant_message TEXT, prompt_number INTEGER, status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'processing', 'processed', 'failed')), retry_count INTEGER NOT NULL DEFAULT 0, created_at_epoch INTEGER NOT NULL, started_processing_at_epoch INTEGER, completed_at_epoch INTEGER, FOREIGN KEY (session_db_id) REFERENCES sdk_sessions(id) ON DELETE CASCADE ) `); this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_session ON pending_messages(session_db_id)"); this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_status ON pending_messages(status)"); this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_claude_session ON pending_messages(content_session_id)"); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(16, new Date().toISOString()); logger.debug("DB", "pending_messages table created successfully"); } renameSessionIdColumns() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(17); if (applied) return; logger.debug("DB", "Checking session ID columns for semantic clarity rename"); let renamesPerformed = 0; const safeRenameColumn = (table, oldCol, newCol) => { const tableInfo = this.db.query(`PRAGMA table_info(${table})`).all(); const hasOldCol = tableInfo.some((col) => col.name === oldCol); const hasNewCol = tableInfo.some((col) => col.name === newCol); if (hasNewCol) { return false; } if (hasOldCol) { this.db.run(`ALTER TABLE ${table} RENAME COLUMN ${oldCol} TO ${newCol}`); logger.debug("DB", `Renamed ${table}.${oldCol} to ${newCol}`); return true; } logger.warn("DB", `Column ${oldCol} not found in ${table}, skipping rename`); return false; }; if (safeRenameColumn("sdk_sessions", "claude_session_id", "content_session_id")) renamesPerformed++; if (safeRenameColumn("sdk_sessions", "sdk_session_id", "memory_session_id")) renamesPerformed++; if (safeRenameColumn("pending_messages", "claude_session_id", "content_session_id")) renamesPerformed++; if (safeRenameColumn("observations", "sdk_session_id", "memory_session_id")) renamesPerformed++; if (safeRenameColumn("session_summaries", "sdk_session_id", "memory_session_id")) renamesPerformed++; if (safeRenameColumn("user_prompts", "claude_session_id", "content_session_id")) renamesPerformed++; this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(17, new Date().toISOString()); if (renamesPerformed > 0) { logger.debug("DB", `Successfully renamed ${renamesPerformed} session ID columns`); } else { logger.debug("DB", "No session ID column renames needed (already up to date)"); } } repairSessionIdColumnRename() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(19); if (applied) return; this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(19, new Date().toISOString()); } addFailedAtEpochColumn() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(20); if (applied) return; const tableInfo = this.db.query("PRAGMA table_info(pending_messages)").all(); const hasColumn = tableInfo.some((col) => col.name === "failed_at_epoch"); if (!hasColumn) { this.db.run("ALTER TABLE pending_messages ADD COLUMN failed_at_epoch INTEGER"); logger.debug("DB", "Added failed_at_epoch column to pending_messages table"); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(20, new Date().toISOString()); } addOnUpdateCascadeToForeignKeys() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(21); if (applied) return; logger.debug("DB", "Adding ON UPDATE CASCADE to FK constraints on observations and session_summaries"); this.db.run("PRAGMA foreign_keys = OFF"); this.db.run("BEGIN TRANSACTION"); try { this.db.run("DROP TRIGGER IF EXISTS observations_ai"); this.db.run("DROP TRIGGER IF EXISTS observations_ad"); this.db.run("DROP TRIGGER IF EXISTS observations_au"); this.db.run("DROP TABLE IF EXISTS observations_new"); this.db.run(` CREATE TABLE observations_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT NOT NULL, project TEXT NOT NULL, text TEXT, type TEXT NOT NULL, title TEXT, subtitle TEXT, facts TEXT, narrative TEXT, concepts TEXT, files_read TEXT, files_modified TEXT, prompt_number INTEGER, discovery_tokens INTEGER DEFAULT 0, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ON UPDATE CASCADE ) `); this.db.run(` INSERT INTO observations_new SELECT id, memory_session_id, project, text, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch FROM observations `); this.db.run("DROP TABLE observations"); this.db.run("ALTER TABLE observations_new RENAME TO observations"); this.db.run(` CREATE INDEX idx_observations_sdk_session ON observations(memory_session_id); CREATE INDEX idx_observations_project ON observations(project); CREATE INDEX idx_observations_type ON observations(type); CREATE INDEX idx_observations_created ON observations(created_at_epoch DESC); `); const hasFTS = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='observations_fts'").all().length > 0; if (hasFTS) { this.db.run(` CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts) VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts); END; CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, text, facts, concepts) VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts); END; CREATE TRIGGER IF NOT EXISTS observations_au AFTER UPDATE ON observations BEGIN INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, text, facts, concepts) VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts); INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts) VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts); END; `); } this.db.run("DROP TABLE IF EXISTS session_summaries_new"); this.db.run(` CREATE TABLE session_summaries_new ( id INTEGER PRIMARY KEY AUTOINCREMENT, memory_session_id TEXT NOT NULL, project TEXT NOT NULL, request TEXT, investigated TEXT, learned TEXT, completed TEXT, next_steps TEXT, files_read TEXT, files_edited TEXT, notes TEXT, prompt_number INTEGER, discovery_tokens INTEGER DEFAULT 0, created_at TEXT NOT NULL, created_at_epoch INTEGER NOT NULL, FOREIGN KEY(memory_session_id) REFERENCES sdk_sessions(memory_session_id) ON DELETE CASCADE ON UPDATE CASCADE ) `); this.db.run(` INSERT INTO session_summaries_new SELECT id, memory_session_id, project, request, investigated, learned, completed, next_steps, files_read, files_edited, notes, prompt_number, discovery_tokens, created_at, created_at_epoch FROM session_summaries `); this.db.run("DROP TRIGGER IF EXISTS session_summaries_ai"); this.db.run("DROP TRIGGER IF EXISTS session_summaries_ad"); this.db.run("DROP TRIGGER IF EXISTS session_summaries_au"); this.db.run("DROP TABLE session_summaries"); this.db.run("ALTER TABLE session_summaries_new RENAME TO session_summaries"); this.db.run(` CREATE INDEX idx_session_summaries_sdk_session ON session_summaries(memory_session_id); CREATE INDEX idx_session_summaries_project ON session_summaries(project); CREATE INDEX idx_session_summaries_created ON session_summaries(created_at_epoch DESC); `); const hasSummariesFTS = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='session_summaries_fts'").all().length > 0; if (hasSummariesFTS) { this.db.run(` CREATE TRIGGER IF NOT EXISTS session_summaries_ai AFTER INSERT ON session_summaries BEGIN INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes) VALUES (new.id, new.request, new.investigated, new.learned, new.completed, new.next_steps, new.notes); END; CREATE TRIGGER IF NOT EXISTS session_summaries_ad AFTER DELETE ON session_summaries BEGIN INSERT INTO session_summaries_fts(session_summaries_fts, rowid, request, investigated, learned, completed, next_steps, notes) VALUES('delete', old.id, old.request, old.investigated, old.learned, old.completed, old.next_steps, old.notes); END; CREATE TRIGGER IF NOT EXISTS session_summaries_au AFTER UPDATE ON session_summaries BEGIN INSERT INTO session_summaries_fts(session_summaries_fts, rowid, request, investigated, learned, completed, next_steps, notes) VALUES('delete', old.id, old.request, old.investigated, old.learned, old.completed, old.next_steps, old.notes); INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes) VALUES (new.id, new.request, new.investigated, new.learned, new.completed, new.next_steps, new.notes); END; `); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(21, new Date().toISOString()); this.db.run("COMMIT"); this.db.run("PRAGMA foreign_keys = ON"); logger.debug("DB", "Successfully added ON UPDATE CASCADE to FK constraints"); } catch (error2) { this.db.run("ROLLBACK"); this.db.run("PRAGMA foreign_keys = ON"); throw error2; } } addObservationContentHashColumn() { const tableInfo = this.db.query("PRAGMA table_info(observations)").all(); const hasColumn = tableInfo.some((col) => col.name === "content_hash"); if (hasColumn) { this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22, new Date().toISOString()); return; } this.db.run("ALTER TABLE observations ADD COLUMN content_hash TEXT"); this.db.run("UPDATE observations SET content_hash = substr(hex(randomblob(8)), 1, 16) WHERE content_hash IS NULL"); this.db.run("CREATE INDEX IF NOT EXISTS idx_observations_content_hash ON observations(content_hash, created_at_epoch)"); logger.debug("DB", "Added content_hash column to observations table with backfill and index"); this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22, new Date().toISOString()); } addSessionCustomTitleColumn() { const applied = this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(23); if (applied) return; const tableInfo = this.db.query("PRAGMA table_info(sdk_sessions)").all(); const hasColumn = tableInfo.some((col) => col.name === "custom_title"); if (!hasColumn) { this.db.run("ALTER TABLE sdk_sessions ADD COLUMN custom_title TEXT"); logger.debug("DB", "Added custom_title column to sdk_sessions table"); } this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(23, new Date().toISOString()); } updateMemorySessionId(sessionDbId, memorySessionId) { this.db.prepare(` UPDATE sdk_sessions SET memory_session_id = ? WHERE id = ? `).run(memorySessionId, sessionDbId); } ensureMemorySessionIdRegistered(sessionDbId, memorySessionId) { const session = this.db.prepare(` SELECT id, memory_session_id FROM sdk_sessions WHERE id = ? `).get(sessionDbId); if (!session) { throw new Error(`Session ${sessionDbId} not found in sdk_sessions`); } if (session.memory_session_id !== memorySessionId) { this.db.prepare(` UPDATE sdk_sessions SET memory_session_id = ? WHERE id = ? `).run(memorySessionId, sessionDbId); logger.info("DB", "Registered memory_session_id before storage (FK fix)", { sessionDbId, oldId: session.memory_session_id, newId: memorySessionId }); } } getRecentSummaries(project, limit = 10) { const stmt = this.db.prepare(` SELECT request, investigated, learned, completed, next_steps, files_read, files_edited, notes, prompt_number, created_at FROM session_summaries WHERE project = ? ORDER BY created_at_epoch DESC LIMIT ? `); return stmt.all(project, limit); } getRecentSummariesWithSessionInfo(project, limit = 3) { const stmt = this.db.prepare(` SELECT memory_session_id, request, learned, completed, next_steps, prompt_number, created_at FROM session_summaries WHERE project = ? ORDER BY created_at_epoch DESC LIMIT ? `); return stmt.all(project, limit); } getRecentObservations(project, limit = 20) { const stmt = this.db.prepare(` SELECT type, text, prompt_number, created_at FROM observations WHERE project = ? ORDER BY created_at_epoch DESC LIMIT ? `); return stmt.all(project, limit); } getAllRecentObservations(limit = 100) { const stmt = this.db.prepare(` SELECT id, type, title, subtitle, text, project, prompt_number, created_at, created_at_epoch FROM observations ORDER BY created_at_epoch DESC LIMIT ? `); return stmt.all(limit); } getAllRecentSummaries(limit = 50) { const stmt = this.db.prepare(` SELECT id, request, investigated, learned, completed, next_steps, files_read, files_edited, notes, project, prompt_number, created_at, created_at_epoch FROM session_summaries ORDER BY created_at_epoch DESC LIMIT ? `); return stmt.all(limit); } getAllRecentUserPrompts(limit = 100) { const stmt = this.db.prepare(` SELECT up.id, up.content_session_id, s.project, up.prompt_number, up.prompt_text, up.created_at, up.created_at_epoch FROM user_prompts up LEFT JOIN sdk_sessions s ON up.content_session_id = s.content_session_id ORDER BY up.created_at_epoch DESC LIMIT ? `); return stmt.all(limit); } getAllProjects() { const stmt = this.db.prepare(` SELECT DISTINCT project FROM sdk_sessions WHERE project IS NOT NULL AND project != '' ORDER BY project ASC `); const rows = stmt.all(); return rows.map((row) => row.project); } getLatestUserPrompt(contentSessionId) { const stmt = this.db.prepare(` SELECT up.*, s.memory_session_id, s.project FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE up.content_session_id = ? ORDER BY up.created_at_epoch DESC LIMIT 1 `); return stmt.get(contentSessionId); } getRecentSessionsWithStatus(project, limit = 3) { const stmt = this.db.prepare(` SELECT * FROM ( SELECT s.memory_session_id, s.status, s.started_at, s.started_at_epoch, s.user_prompt, CASE WHEN sum.memory_session_id IS NOT NULL THEN 1 ELSE 0 END as has_summary FROM sdk_sessions s LEFT JOIN session_summaries sum ON s.memory_session_id = sum.memory_session_id WHERE s.project = ? AND s.memory_session_id IS NOT NULL GROUP BY s.memory_session_id ORDER BY s.started_at_epoch DESC LIMIT ? ) ORDER BY started_at_epoch ASC `); return stmt.all(project, limit); } getObservationsForSession(memorySessionId) { const stmt = this.db.prepare(` SELECT title, subtitle, type, prompt_number FROM observations WHERE memory_session_id = ? ORDER BY created_at_epoch ASC `); return stmt.all(memorySessionId); } getObservationById(id) { const stmt = this.db.prepare(` SELECT * FROM observations WHERE id = ? `); return stmt.get(id) || null; } getObservationsByIds(ids, options = {}) { if (ids.length === 0) return []; const { orderBy = "date_desc", limit, project, type, concepts, files } = options; const orderClause = orderBy === "date_asc" ? "ASC" : "DESC"; const limitClause = limit ? `LIMIT ${limit}` : ""; const placeholders = ids.map(() => "?").join(","); const params = [...ids]; const additionalConditions = []; if (project) { additionalConditions.push("project = ?"); params.push(project); } if (type) { if (Array.isArray(type)) { const typePlaceholders = type.map(() => "?").join(","); additionalConditions.push(`type IN (${typePlaceholders})`); params.push(...type); } else { additionalConditions.push("type = ?"); params.push(type); } } if (concepts) { const conceptsList = Array.isArray(concepts) ? concepts : [concepts]; const conceptConditions = conceptsList.map(() => "EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)"); params.push(...conceptsList); additionalConditions.push(`(${conceptConditions.join(" OR ")})`); } if (files) { const filesList = Array.isArray(files) ? files : [files]; const fileConditions = filesList.map(() => { return "(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))"; }); filesList.forEach((file) => { params.push(`%${file}%`, `%${file}%`); }); additionalConditions.push(`(${fileConditions.join(" OR ")})`); } const whereClause = additionalConditions.length > 0 ? `WHERE id IN (${placeholders}) AND ${additionalConditions.join(" AND ")}` : `WHERE id IN (${placeholders})`; const stmt = this.db.prepare(` SELECT * FROM observations ${whereClause} ORDER BY created_at_epoch ${orderClause} ${limitClause} `); return stmt.all(...params); } getSummaryForSession(memorySessionId) { const stmt = this.db.prepare(` SELECT request, investigated, learned, completed, next_steps, files_read, files_edited, notes, prompt_number, created_at, created_at_epoch FROM session_summaries WHERE memory_session_id = ? ORDER BY created_at_epoch DESC LIMIT 1 `); return stmt.get(memorySessionId) || null; } getFilesForSession(memorySessionId) { const stmt = this.db.prepare(` SELECT files_read, files_modified FROM observations WHERE memory_session_id = ? `); const rows = stmt.all(memorySessionId); const filesReadSet = new Set; const filesModifiedSet = new Set; for (const row of rows) { if (row.files_read) { const files = JSON.parse(row.files_read); if (Array.isArray(files)) { files.forEach((f) => filesReadSet.add(f)); } } if (row.files_modified) { const files = JSON.parse(row.files_modified); if (Array.isArray(files)) { files.forEach((f) => filesModifiedSet.add(f)); } } } return { filesRead: Array.from(filesReadSet), filesModified: Array.from(filesModifiedSet) }; } getSessionById(id) { const stmt = this.db.prepare(` SELECT id, content_session_id, memory_session_id, project, user_prompt, custom_title FROM sdk_sessions WHERE id = ? LIMIT 1 `); return stmt.get(id) || null; } getSdkSessionsBySessionIds(memorySessionIds) { if (memorySessionIds.length === 0) return []; const placeholders = memorySessionIds.map(() => "?").join(","); const stmt = this.db.prepare(` SELECT id, content_session_id, memory_session_id, project, user_prompt, custom_title, started_at, started_at_epoch, completed_at, completed_at_epoch, status FROM sdk_sessions WHERE memory_session_id IN (${placeholders}) ORDER BY started_at_epoch DESC `); return stmt.all(...memorySessionIds); } getPromptNumberFromUserPrompts(contentSessionId) { const result = this.db.prepare(` SELECT COUNT(*) as count FROM user_prompts WHERE content_session_id = ? `).get(contentSessionId); return result.count; } createSDKSession(contentSessionId, project, userPrompt, customTitle) { const now = new Date; const nowEpoch = now.getTime(); const existing = this.db.prepare(` SELECT id FROM sdk_sessions WHERE content_session_id = ? `).get(contentSessionId); if (existing) { if (project) { this.db.prepare(` UPDATE sdk_sessions SET project = ? WHERE content_session_id = ? AND (project IS NULL OR project = '') `).run(project, contentSessionId); } if (customTitle) { this.db.prepare(` UPDATE sdk_sessions SET custom_title = ? WHERE content_session_id = ? AND custom_title IS NULL `).run(customTitle, contentSessionId); } return existing.id; } this.db.prepare(` INSERT INTO sdk_sessions (content_session_id, memory_session_id, project, user_prompt, custom_title, started_at, started_at_epoch, status) VALUES (?, NULL, ?, ?, ?, ?, ?, 'active') `).run(contentSessionId, project, userPrompt, customTitle || null, now.toISOString(), nowEpoch); const row = this.db.prepare("SELECT id FROM sdk_sessions WHERE content_session_id = ?").get(contentSessionId); return row.id; } saveUserPrompt(contentSessionId, promptNumber, promptText) { const now = new Date; const nowEpoch = now.getTime(); const stmt = this.db.prepare(` INSERT INTO user_prompts (content_session_id, prompt_number, prompt_text, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?) `); const result = stmt.run(contentSessionId, promptNumber, promptText, now.toISOString(), nowEpoch); return result.lastInsertRowid; } getUserPrompt(contentSessionId, promptNumber) { const stmt = this.db.prepare(` SELECT prompt_text FROM user_prompts WHERE content_session_id = ? AND prompt_number = ? LIMIT 1 `); const result = stmt.get(contentSessionId, promptNumber); return result?.prompt_text ?? null; } storeObservation(memorySessionId, project, observation, promptNumber, discoveryTokens = 0, overrideTimestampEpoch) { const timestampEpoch = overrideTimestampEpoch ?? Date.now(); const timestampIso = new Date(timestampEpoch).toISOString(); const contentHash = computeObservationContentHash(memorySessionId, observation.title, observation.narrative); const existing = findDuplicateObservation(this.db, contentHash, timestampEpoch); if (existing) { return { id: existing.id, createdAtEpoch: existing.created_at_epoch }; } const stmt = this.db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, content_hash, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run(memorySessionId, project, observation.type, observation.title, observation.subtitle, JSON.stringify(observation.facts), observation.narrative, JSON.stringify(observation.concepts), JSON.stringify(observation.files_read), JSON.stringify(observation.files_modified), promptNumber || null, discoveryTokens, contentHash, timestampIso, timestampEpoch); return { id: Number(result.lastInsertRowid), createdAtEpoch: timestampEpoch }; } storeSummary(memorySessionId, project, summary, promptNumber, discoveryTokens = 0, overrideTimestampEpoch) { const timestampEpoch = overrideTimestampEpoch ?? Date.now(); const timestampIso = new Date(timestampEpoch).toISOString(); const stmt = this.db.prepare(` INSERT INTO session_summaries (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run(memorySessionId, project, summary.request, summary.investigated, summary.learned, summary.completed, summary.next_steps, summary.notes, promptNumber || null, discoveryTokens, timestampIso, timestampEpoch); return { id: Number(result.lastInsertRowid), createdAtEpoch: timestampEpoch }; } storeObservations(memorySessionId, project, observations, summary, promptNumber, discoveryTokens = 0, overrideTimestampEpoch) { const timestampEpoch = overrideTimestampEpoch ?? Date.now(); const timestampIso = new Date(timestampEpoch).toISOString(); const storeTx = this.db.transaction(() => { const observationIds = []; const obsStmt = this.db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, content_hash, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); for (const observation of observations) { const contentHash = computeObservationContentHash(memorySessionId, observation.title, observation.narrative); const existing = findDuplicateObservation(this.db, contentHash, timestampEpoch); if (existing) { observationIds.push(existing.id); continue; } const result = obsStmt.run(memorySessionId, project, observation.type, observation.title, observation.subtitle, JSON.stringify(observation.facts), observation.narrative, JSON.stringify(observation.concepts), JSON.stringify(observation.files_read), JSON.stringify(observation.files_modified), promptNumber || null, discoveryTokens, contentHash, timestampIso, timestampEpoch); observationIds.push(Number(result.lastInsertRowid)); } let summaryId = null; if (summary) { const summaryStmt = this.db.prepare(` INSERT INTO session_summaries (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = summaryStmt.run(memorySessionId, project, summary.request, summary.investigated, summary.learned, summary.completed, summary.next_steps, summary.notes, promptNumber || null, discoveryTokens, timestampIso, timestampEpoch); summaryId = Number(result.lastInsertRowid); } return { observationIds, summaryId, createdAtEpoch: timestampEpoch }; }); return storeTx(); } storeObservationsAndMarkComplete(memorySessionId, project, observations, summary, messageId, _pendingStore, promptNumber, discoveryTokens = 0, overrideTimestampEpoch) { const timestampEpoch = overrideTimestampEpoch ?? Date.now(); const timestampIso = new Date(timestampEpoch).toISOString(); const storeAndMarkTx = this.db.transaction(() => { const observationIds = []; const obsStmt = this.db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, content_hash, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); for (const observation of observations) { const contentHash = computeObservationContentHash(memorySessionId, observation.title, observation.narrative); const existing = findDuplicateObservation(this.db, contentHash, timestampEpoch); if (existing) { observationIds.push(existing.id); continue; } const result = obsStmt.run(memorySessionId, project, observation.type, observation.title, observation.subtitle, JSON.stringify(observation.facts), observation.narrative, JSON.stringify(observation.concepts), JSON.stringify(observation.files_read), JSON.stringify(observation.files_modified), promptNumber || null, discoveryTokens, contentHash, timestampIso, timestampEpoch); observationIds.push(Number(result.lastInsertRowid)); } let summaryId; if (summary) { const summaryStmt = this.db.prepare(` INSERT INTO session_summaries (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = summaryStmt.run(memorySessionId, project, summary.request, summary.investigated, summary.learned, summary.completed, summary.next_steps, summary.notes, promptNumber || null, discoveryTokens, timestampIso, timestampEpoch); summaryId = Number(result.lastInsertRowid); } const updateStmt = this.db.prepare(` UPDATE pending_messages SET status = 'processed', completed_at_epoch = ?, tool_input = NULL, tool_response = NULL WHERE id = ? AND status = 'processing' `); updateStmt.run(timestampEpoch, messageId); return { observationIds, summaryId, createdAtEpoch: timestampEpoch }; }); return storeAndMarkTx(); } getSessionSummariesByIds(ids, options = {}) { if (ids.length === 0) return []; const { orderBy = "date_desc", limit, project } = options; const orderClause = orderBy === "date_asc" ? "ASC" : "DESC"; const limitClause = limit ? `LIMIT ${limit}` : ""; const placeholders = ids.map(() => "?").join(","); const params = [...ids]; const whereClause = project ? `WHERE id IN (${placeholders}) AND project = ?` : `WHERE id IN (${placeholders})`; if (project) params.push(project); const stmt = this.db.prepare(` SELECT * FROM session_summaries ${whereClause} ORDER BY created_at_epoch ${orderClause} ${limitClause} `); return stmt.all(...params); } getUserPromptsByIds(ids, options = {}) { if (ids.length === 0) return []; const { orderBy = "date_desc", limit, project } = options; const orderClause = orderBy === "date_asc" ? "ASC" : "DESC"; const limitClause = limit ? `LIMIT ${limit}` : ""; const placeholders = ids.map(() => "?").join(","); const params = [...ids]; const projectFilter = project ? "AND s.project = ?" : ""; if (project) params.push(project); const stmt = this.db.prepare(` SELECT up.*, s.project, s.memory_session_id FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE up.id IN (${placeholders}) ${projectFilter} ORDER BY up.created_at_epoch ${orderClause} ${limitClause} `); return stmt.all(...params); } getTimelineAroundTimestamp(anchorEpoch, depthBefore = 10, depthAfter = 10, project) { return this.getTimelineAroundObservation(null, anchorEpoch, depthBefore, depthAfter, project); } getTimelineAroundObservation(anchorObservationId, anchorEpoch, depthBefore = 10, depthAfter = 10, project) { const projectFilter = project ? "AND project = ?" : ""; const projectParams = project ? [project] : []; let startEpoch; let endEpoch; if (anchorObservationId !== null) { const beforeQuery = ` SELECT id, created_at_epoch FROM observations WHERE id <= ? ${projectFilter} ORDER BY id DESC LIMIT ? `; const afterQuery = ` SELECT id, created_at_epoch FROM observations WHERE id >= ? ${projectFilter} ORDER BY id ASC LIMIT ? `; try { const beforeRecords = this.db.prepare(beforeQuery).all(anchorObservationId, ...projectParams, depthBefore + 1); const afterRecords = this.db.prepare(afterQuery).all(anchorObservationId, ...projectParams, depthAfter + 1); if (beforeRecords.length === 0 && afterRecords.length === 0) { return { observations: [], sessions: [], prompts: [] }; } startEpoch = beforeRecords.length > 0 ? beforeRecords[beforeRecords.length - 1].created_at_epoch : anchorEpoch; endEpoch = afterRecords.length > 0 ? afterRecords[afterRecords.length - 1].created_at_epoch : anchorEpoch; } catch (err) { logger.error("DB", "Error getting boundary observations", undefined, { error: err, project }); return { observations: [], sessions: [], prompts: [] }; } } else { const beforeQuery = ` SELECT created_at_epoch FROM observations WHERE created_at_epoch <= ? ${projectFilter} ORDER BY created_at_epoch DESC LIMIT ? `; const afterQuery = ` SELECT created_at_epoch FROM observations WHERE created_at_epoch >= ? ${projectFilter} ORDER BY created_at_epoch ASC LIMIT ? `; try { const beforeRecords = this.db.prepare(beforeQuery).all(anchorEpoch, ...projectParams, depthBefore); const afterRecords = this.db.prepare(afterQuery).all(anchorEpoch, ...projectParams, depthAfter + 1); if (beforeRecords.length === 0 && afterRecords.length === 0) { return { observations: [], sessions: [], prompts: [] }; } startEpoch = beforeRecords.length > 0 ? beforeRecords[beforeRecords.length - 1].created_at_epoch : anchorEpoch; endEpoch = afterRecords.length > 0 ? afterRecords[afterRecords.length - 1].created_at_epoch : anchorEpoch; } catch (err) { logger.error("DB", "Error getting boundary timestamps", undefined, { error: err, project }); return { observations: [], sessions: [], prompts: [] }; } } const obsQuery = ` SELECT * FROM observations WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${projectFilter} ORDER BY created_at_epoch ASC `; const sessQuery = ` SELECT * FROM session_summaries WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${projectFilter} ORDER BY created_at_epoch ASC `; const promptQuery = ` SELECT up.*, s.project, s.memory_session_id FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE up.created_at_epoch >= ? AND up.created_at_epoch <= ? ${projectFilter.replace("project", "s.project")} ORDER BY up.created_at_epoch ASC `; const observations = this.db.prepare(obsQuery).all(startEpoch, endEpoch, ...projectParams); const sessions = this.db.prepare(sessQuery).all(startEpoch, endEpoch, ...projectParams); const prompts = this.db.prepare(promptQuery).all(startEpoch, endEpoch, ...projectParams); return { observations, sessions: sessions.map((s) => ({ id: s.id, memory_session_id: s.memory_session_id, project: s.project, request: s.request, completed: s.completed, next_steps: s.next_steps, created_at: s.created_at, created_at_epoch: s.created_at_epoch })), prompts: prompts.map((p) => ({ id: p.id, content_session_id: p.content_session_id, prompt_number: p.prompt_number, prompt_text: p.prompt_text, project: p.project, created_at: p.created_at, created_at_epoch: p.created_at_epoch })) }; } getPromptById(id) { const stmt = this.db.prepare(` SELECT p.id, p.content_session_id, p.prompt_number, p.prompt_text, s.project, p.created_at, p.created_at_epoch FROM user_prompts p LEFT JOIN sdk_sessions s ON p.content_session_id = s.content_session_id WHERE p.id = ? LIMIT 1 `); return stmt.get(id) || null; } getPromptsByIds(ids) { if (ids.length === 0) return []; const placeholders = ids.map(() => "?").join(","); const stmt = this.db.prepare(` SELECT p.id, p.content_session_id, p.prompt_number, p.prompt_text, s.project, p.created_at, p.created_at_epoch FROM user_prompts p LEFT JOIN sdk_sessions s ON p.content_session_id = s.content_session_id WHERE p.id IN (${placeholders}) ORDER BY p.created_at_epoch DESC `); return stmt.all(...ids); } getSessionSummaryById(id) { const stmt = this.db.prepare(` SELECT id, memory_session_id, content_session_id, project, user_prompt, request_summary, learned_summary, status, created_at, created_at_epoch FROM sdk_sessions WHERE id = ? LIMIT 1 `); return stmt.get(id) || null; } getOrCreateManualSession(project) { const memorySessionId = `manual-${project}`; const contentSessionId = `manual-content-${project}`; const existing = this.db.prepare("SELECT memory_session_id FROM sdk_sessions WHERE memory_session_id = ?").get(memorySessionId); if (existing) { return memorySessionId; } const now = new Date; this.db.prepare(` INSERT INTO sdk_sessions (memory_session_id, content_session_id, project, started_at, started_at_epoch, status) VALUES (?, ?, ?, ?, ?, 'active') `).run(memorySessionId, contentSessionId, project, now.toISOString(), now.getTime()); logger.info("SESSION", "Created manual session", { memorySessionId, project }); return memorySessionId; } close() { this.db.close(); } importSdkSession(session) { const existing = this.db.prepare("SELECT id FROM sdk_sessions WHERE content_session_id = ?").get(session.content_session_id); if (existing) { return { imported: false, id: existing.id }; } const stmt = this.db.prepare(` INSERT INTO sdk_sessions ( content_session_id, memory_session_id, project, user_prompt, started_at, started_at_epoch, completed_at, completed_at_epoch, status ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run(session.content_session_id, session.memory_session_id, session.project, session.user_prompt, session.started_at, session.started_at_epoch, session.completed_at, session.completed_at_epoch, session.status); return { imported: true, id: result.lastInsertRowid }; } importSessionSummary(summary) { const existing = this.db.prepare("SELECT id FROM session_summaries WHERE memory_session_id = ?").get(summary.memory_session_id); if (existing) { return { imported: false, id: existing.id }; } const stmt = this.db.prepare(` INSERT INTO session_summaries ( memory_session_id, project, request, investigated, learned, completed, next_steps, files_read, files_edited, notes, prompt_number, discovery_tokens, created_at, created_at_epoch ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run(summary.memory_session_id, summary.project, summary.request, summary.investigated, summary.learned, summary.completed, summary.next_steps, summary.files_read, summary.files_edited, summary.notes, summary.prompt_number, summary.discovery_tokens || 0, summary.created_at, summary.created_at_epoch); return { imported: true, id: result.lastInsertRowid }; } importObservation(obs) { const existing = this.db.prepare(` SELECT id FROM observations WHERE memory_session_id = ? AND title = ? AND created_at_epoch = ? `).get(obs.memory_session_id, obs.title, obs.created_at_epoch); if (existing) { return { imported: false, id: existing.id }; } const stmt = this.db.prepare(` INSERT INTO observations ( memory_session_id, project, text, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run(obs.memory_session_id, obs.project, obs.text, obs.type, obs.title, obs.subtitle, obs.facts, obs.narrative, obs.concepts, obs.files_read, obs.files_modified, obs.prompt_number, obs.discovery_tokens || 0, obs.created_at, obs.created_at_epoch); return { imported: true, id: result.lastInsertRowid }; } importUserPrompt(prompt) { const existing = this.db.prepare(` SELECT id FROM user_prompts WHERE content_session_id = ? AND prompt_number = ? `).get(prompt.content_session_id, prompt.prompt_number); if (existing) { return { imported: false, id: existing.id }; } const stmt = this.db.prepare(` INSERT INTO user_prompts ( content_session_id, prompt_number, prompt_text, created_at, created_at_epoch ) VALUES (?, ?, ?, ?, ?) `); const result = stmt.run(prompt.content_session_id, prompt.prompt_number, prompt.prompt_text, prompt.created_at, prompt.created_at_epoch); return { imported: true, id: result.lastInsertRowid }; } } var init_SessionStore = __esm(() => { init_paths(); init_logger(); init_store(); }); // node_modules/depd/index.js var require_depd = __commonJS((exports, module) => { /*! * depd * Copyright(c) 2014-2018 Douglas Christopher Wilson * MIT Licensed */ var relative = __require("path").relative; module.exports = depd; var basePath = process.cwd(); function containsNamespace(str, namespace) { var vals = str.split(/[ ,]+/); var ns = String(namespace).toLowerCase(); for (var i = 0;i < vals.length; i++) { var val = vals[i]; if (val && (val === "*" || val.toLowerCase() === ns)) { return true; } } return false; } function convertDataDescriptorToAccessor(obj, prop, message) { var descriptor = Object.getOwnPropertyDescriptor(obj, prop); var value = descriptor.value; descriptor.get = function getter() { return value; }; if (descriptor.writable) { descriptor.set = function setter(val) { return value = val; }; } delete descriptor.value; delete descriptor.writable; Object.defineProperty(obj, prop, descriptor); return descriptor; } function createArgumentsString(arity) { var str = ""; for (var i = 0;i < arity; i++) { str += ", arg" + i; } return str.substr(2); } function createStackString(stack) { var str = this.name + ": " + this.namespace; if (this.message) { str += " deprecated " + this.message; } for (var i = 0;i < stack.length; i++) { str += ` at ` + stack[i].toString(); } return str; } function depd(namespace) { if (!namespace) { throw new TypeError("argument namespace is required"); } var stack = getStack(); var site = callSiteLocation(stack[1]); var file = site[0]; function deprecate(message) { log.call(deprecate, message); } deprecate._file = file; deprecate._ignored = isignored(namespace); deprecate._namespace = namespace; deprecate._traced = istraced(namespace); deprecate._warned = Object.create(null); deprecate.function = wrapfunction; deprecate.property = wrapproperty; return deprecate; } function eehaslisteners(emitter, type) { var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type); return count > 0; } function isignored(namespace) { if (process.noDeprecation) { return true; } var str = process.env.NO_DEPRECATION || ""; return containsNamespace(str, namespace); } function istraced(namespace) { if (process.traceDeprecation) { return true; } var str = process.env.TRACE_DEPRECATION || ""; return containsNamespace(str, namespace); } function log(message, site) { var haslisteners = eehaslisteners(process, "deprecation"); if (!haslisteners && this._ignored) { return; } var caller; var callFile; var callSite; var depSite; var i = 0; var seen = false; var stack = getStack(); var file = this._file; if (site) { depSite = site; callSite = callSiteLocation(stack[1]); callSite.name = depSite.name; file = callSite[0]; } else { i = 2; depSite = callSiteLocation(stack[i]); callSite = depSite; } for (;i < stack.length; i++) { caller = callSiteLocation(stack[i]); callFile = caller[0]; if (callFile === file) { seen = true; } else if (callFile === this._file) { file = this._file; } else if (seen) { break; } } var key = caller ? depSite.join(":") + "__" + caller.join(":") : undefined; if (key !== undefined && key in this._warned) { return; } this._warned[key] = true; var msg = message; if (!msg) { msg = callSite === depSite || !callSite.name ? defaultMessage(depSite) : defaultMessage(callSite); } if (haslisteners) { var err = DeprecationError(this._namespace, msg, stack.slice(i)); process.emit("deprecation", err); return; } var format = process.stderr.isTTY ? formatColor : formatPlain; var output = format.call(this, msg, caller, stack.slice(i)); process.stderr.write(output + ` `, "utf8"); } function callSiteLocation(callSite) { var file = callSite.getFileName() || ""; var line = callSite.getLineNumber(); var colm = callSite.getColumnNumber(); if (callSite.isEval()) { file = callSite.getEvalOrigin() + ", " + file; } var site = [file, line, colm]; site.callSite = callSite; site.name = callSite.getFunctionName(); return site; } function defaultMessage(site) { var callSite = site.callSite; var funcName = site.name; if (!funcName) { funcName = ""; } var context = callSite.getThis(); var typeName = context && callSite.getTypeName(); if (typeName === "Object") { typeName = undefined; } if (typeName === "Function") { typeName = context.name || typeName; } return typeName && callSite.getMethodName() ? typeName + "." + funcName : funcName; } function formatPlain(msg, caller, stack) { var timestamp = new Date().toUTCString(); var formatted = timestamp + " " + this._namespace + " deprecated " + msg; if (this._traced) { for (var i = 0;i < stack.length; i++) { formatted += ` at ` + stack[i].toString(); } return formatted; } if (caller) { formatted += " at " + formatLocation(caller); } return formatted; } function formatColor(msg, caller, stack) { var formatted = "\x1B[36;1m" + this._namespace + "\x1B[22;39m" + " \x1B[33;1mdeprecated\x1B[22;39m" + " \x1B[0m" + msg + "\x1B[39m"; if (this._traced) { for (var i = 0;i < stack.length; i++) { formatted += ` \x1B[36mat ` + stack[i].toString() + "\x1B[39m"; } return formatted; } if (caller) { formatted += " \x1B[36m" + formatLocation(caller) + "\x1B[39m"; } return formatted; } function formatLocation(callSite) { return relative(basePath, callSite[0]) + ":" + callSite[1] + ":" + callSite[2]; } function getStack() { var limit = Error.stackTraceLimit; var obj = {}; var prep = Error.prepareStackTrace; Error.prepareStackTrace = prepareObjectStackTrace; Error.stackTraceLimit = Math.max(10, limit); Error.captureStackTrace(obj); var stack = obj.stack.slice(1); Error.prepareStackTrace = prep; Error.stackTraceLimit = limit; return stack; } function prepareObjectStackTrace(obj, stack) { return stack; } function wrapfunction(fn, message) { if (typeof fn !== "function") { throw new TypeError("argument fn must be a function"); } var args = createArgumentsString(fn.length); var stack = getStack(); var site = callSiteLocation(stack[1]); site.name = fn.name; var deprecatedfn = new Function("fn", "log", "deprecate", "message", "site", `"use strict" ` + "return function (" + args + ") {" + `log.call(deprecate, message, site) ` + `return fn.apply(this, arguments) ` + "}")(fn, log, this, message, site); return deprecatedfn; } function wrapproperty(obj, prop, message) { if (!obj || typeof obj !== "object" && typeof obj !== "function") { throw new TypeError("argument obj must be object"); } var descriptor = Object.getOwnPropertyDescriptor(obj, prop); if (!descriptor) { throw new TypeError("must call property on owner object"); } if (!descriptor.configurable) { throw new TypeError("property must be configurable"); } var deprecate = this; var stack = getStack(); var site = callSiteLocation(stack[1]); site.name = prop; if ("value" in descriptor) { descriptor = convertDataDescriptorToAccessor(obj, prop, message); } var get = descriptor.get; var set2 = descriptor.set; if (typeof get === "function") { descriptor.get = function getter() { log.call(deprecate, message, site); return get.apply(this, arguments); }; } if (typeof set2 === "function") { descriptor.set = function setter() { log.call(deprecate, message, site); return set2.apply(this, arguments); }; } Object.defineProperty(obj, prop, descriptor); } function DeprecationError(namespace, message, stack) { var error2 = new Error; var stackString; Object.defineProperty(error2, "constructor", { value: DeprecationError }); Object.defineProperty(error2, "message", { configurable: true, enumerable: false, value: message, writable: true }); Object.defineProperty(error2, "name", { enumerable: false, configurable: true, value: "DeprecationError", writable: true }); Object.defineProperty(error2, "namespace", { configurable: true, enumerable: false, value: namespace, writable: true }); Object.defineProperty(error2, "stack", { configurable: true, enumerable: false, get: function() { if (stackString !== undefined) { return stackString; } return stackString = createStackString.call(this, stack); }, set: function setter(val) { stackString = val; } }); return error2; } }); // node_modules/bytes/index.js var require_bytes = __commonJS((exports, module) => { /*! * bytes * Copyright(c) 2012-2014 TJ Holowaychuk * Copyright(c) 2015 Jed Watson * MIT Licensed */ module.exports = bytes; module.exports.format = format; module.exports.parse = parse5; var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; var map2 = { b: 1, kb: 1 << 10, mb: 1 << 20, gb: 1 << 30, tb: Math.pow(1024, 4), pb: Math.pow(1024, 5) }; var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; function bytes(value, options) { if (typeof value === "string") { return parse5(value); } if (typeof value === "number") { return format(value, options); } return null; } function format(value, options) { if (!Number.isFinite(value)) { return null; } var mag = Math.abs(value); var thousandsSeparator = options && options.thousandsSeparator || ""; var unitSeparator = options && options.unitSeparator || ""; var decimalPlaces = options && options.decimalPlaces !== undefined ? options.decimalPlaces : 2; var fixedDecimals = Boolean(options && options.fixedDecimals); var unit = options && options.unit || ""; if (!unit || !map2[unit.toLowerCase()]) { if (mag >= map2.pb) { unit = "PB"; } else if (mag >= map2.tb) { unit = "TB"; } else if (mag >= map2.gb) { unit = "GB"; } else if (mag >= map2.mb) { unit = "MB"; } else if (mag >= map2.kb) { unit = "KB"; } else { unit = "B"; } } var val = value / map2[unit.toLowerCase()]; var str = val.toFixed(decimalPlaces); if (!fixedDecimals) { str = str.replace(formatDecimalsRegExp, "$1"); } if (thousandsSeparator) { str = str.split(".").map(function(s, i) { return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s; }).join("."); } return str + unitSeparator + unit; } function parse5(val) { if (typeof val === "number" && !isNaN(val)) { return val; } if (typeof val !== "string") { return null; } var results = parseRegExp.exec(val); var floatValue; var unit = "b"; if (!results) { floatValue = parseInt(val, 10); unit = "b"; } else { floatValue = parseFloat(results[1]); unit = results[4].toLowerCase(); } if (isNaN(floatValue)) { return null; } return Math.floor(map2[unit] * floatValue); } }); // node_modules/content-type/index.js var require_content_type = __commonJS((exports) => { /*! * content-type * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g; var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/; var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g; var QUOTE_REGEXP = /([\\"])/g; var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/; exports.format = format; exports.parse = parse5; function format(obj) { if (!obj || typeof obj !== "object") { throw new TypeError("argument obj is required"); } var parameters = obj.parameters; var type = obj.type; if (!type || !TYPE_REGEXP.test(type)) { throw new TypeError("invalid type"); } var string4 = type; if (parameters && typeof parameters === "object") { var param; var params = Object.keys(parameters).sort(); for (var i = 0;i < params.length; i++) { param = params[i]; if (!TOKEN_REGEXP.test(param)) { throw new TypeError("invalid parameter name"); } string4 += "; " + param + "=" + qstring(parameters[param]); } } return string4; } function parse5(string4) { if (!string4) { throw new TypeError("argument string is required"); } var header = typeof string4 === "object" ? getcontenttype(string4) : string4; if (typeof header !== "string") { throw new TypeError("argument string is required to be a string"); } var index = header.indexOf(";"); var type = index !== -1 ? header.slice(0, index).trim() : header.trim(); if (!TYPE_REGEXP.test(type)) { throw new TypeError("invalid media type"); } var obj = new ContentType(type.toLowerCase()); if (index !== -1) { var key; var match; var value; PARAM_REGEXP.lastIndex = index; while (match = PARAM_REGEXP.exec(header)) { if (match.index !== index) { throw new TypeError("invalid parameter format"); } index += match[0].length; key = match[1].toLowerCase(); value = match[2]; if (value.charCodeAt(0) === 34) { value = value.slice(1, -1); if (value.indexOf("\\") !== -1) { value = value.replace(QESC_REGEXP, "$1"); } } obj.parameters[key] = value; } if (index !== header.length) { throw new TypeError("invalid parameter format"); } } return obj; } function getcontenttype(obj) { var header; if (typeof obj.getHeader === "function") { header = obj.getHeader("content-type"); } else if (typeof obj.headers === "object") { header = obj.headers && obj.headers["content-type"]; } if (typeof header !== "string") { throw new TypeError("content-type header is missing from object"); } return header; } function qstring(val) { var str = String(val); if (TOKEN_REGEXP.test(str)) { return str; } if (str.length > 0 && !TEXT_REGEXP.test(str)) { throw new TypeError("invalid parameter value"); } return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"'; } function ContentType(type) { this.parameters = Object.create(null); this.type = type; } }); // node_modules/setprototypeof/index.js var require_setprototypeof = __commonJS((exports, module) => { module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties); function setProtoOf(obj, proto) { obj.__proto__ = proto; return obj; } function mixinProperties(obj, proto) { for (var prop in proto) { if (!Object.prototype.hasOwnProperty.call(obj, prop)) { obj[prop] = proto[prop]; } } return obj; } }); // node_modules/statuses/codes.json var require_codes = __commonJS((exports, module) => { module.exports = { "100": "Continue", "101": "Switching Protocols", "102": "Processing", "103": "Early Hints", "200": "OK", "201": "Created", "202": "Accepted", "203": "Non-Authoritative Information", "204": "No Content", "205": "Reset Content", "206": "Partial Content", "207": "Multi-Status", "208": "Already Reported", "226": "IM Used", "300": "Multiple Choices", "301": "Moved Permanently", "302": "Found", "303": "See Other", "304": "Not Modified", "305": "Use Proxy", "307": "Temporary Redirect", "308": "Permanent Redirect", "400": "Bad Request", "401": "Unauthorized", "402": "Payment Required", "403": "Forbidden", "404": "Not Found", "405": "Method Not Allowed", "406": "Not Acceptable", "407": "Proxy Authentication Required", "408": "Request Timeout", "409": "Conflict", "410": "Gone", "411": "Length Required", "412": "Precondition Failed", "413": "Payload Too Large", "414": "URI Too Long", "415": "Unsupported Media Type", "416": "Range Not Satisfiable", "417": "Expectation Failed", "418": "I'm a Teapot", "421": "Misdirected Request", "422": "Unprocessable Entity", "423": "Locked", "424": "Failed Dependency", "425": "Too Early", "426": "Upgrade Required", "428": "Precondition Required", "429": "Too Many Requests", "431": "Request Header Fields Too Large", "451": "Unavailable For Legal Reasons", "500": "Internal Server Error", "501": "Not Implemented", "502": "Bad Gateway", "503": "Service Unavailable", "504": "Gateway Timeout", "505": "HTTP Version Not Supported", "506": "Variant Also Negotiates", "507": "Insufficient Storage", "508": "Loop Detected", "509": "Bandwidth Limit Exceeded", "510": "Not Extended", "511": "Network Authentication Required" }; }); // node_modules/statuses/index.js var require_statuses = __commonJS((exports, module) => { /*! * statuses * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed */ var codes = require_codes(); module.exports = status; status.message = codes; status.code = createMessageToStatusCodeMap(codes); status.codes = createStatusCodeList(codes); status.redirect = { 300: true, 301: true, 302: true, 303: true, 305: true, 307: true, 308: true }; status.empty = { 204: true, 205: true, 304: true }; status.retry = { 502: true, 503: true, 504: true }; function createMessageToStatusCodeMap(codes2) { var map2 = {}; Object.keys(codes2).forEach(function forEachCode(code) { var message = codes2[code]; var status2 = Number(code); map2[message.toLowerCase()] = status2; }); return map2; } function createStatusCodeList(codes2) { return Object.keys(codes2).map(function mapCode(code) { return Number(code); }); } function getStatusCode(message) { var msg = message.toLowerCase(); if (!Object.prototype.hasOwnProperty.call(status.code, msg)) { throw new Error('invalid status message: "' + message + '"'); } return status.code[msg]; } function getStatusMessage(code) { if (!Object.prototype.hasOwnProperty.call(status.message, code)) { throw new Error("invalid status code: " + code); } return status.message[code]; } function status(code) { if (typeof code === "number") { return getStatusMessage(code); } if (typeof code !== "string") { throw new TypeError("code must be a number or string"); } var n = parseInt(code, 10); if (!isNaN(n)) { return getStatusMessage(n); } return getStatusCode(code); } }); // node_modules/inherits/inherits_browser.js var require_inherits_browser = __commonJS((exports, module) => { if (typeof Object.create === "function") { module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); } }; } else { module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor; var TempCtor = function() {}; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor; ctor.prototype.constructor = ctor; } }; } }); // node_modules/inherits/inherits.js var require_inherits = __commonJS((exports, module) => { try { util = __require("util"); if (typeof util.inherits !== "function") throw ""; module.exports = util.inherits; } catch (e) { module.exports = require_inherits_browser(); } var util; }); // node_modules/toidentifier/index.js var require_toidentifier = __commonJS((exports, module) => { /*! * toidentifier * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed */ module.exports = toIdentifier; function toIdentifier(str) { return str.split(" ").map(function(token) { return token.slice(0, 1).toUpperCase() + token.slice(1); }).join("").replace(/[^ _0-9a-z]/gi, ""); } }); // node_modules/http-errors/index.js var require_http_errors = __commonJS((exports, module) => { /*! * http-errors * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed */ var deprecate = require_depd()("http-errors"); var setPrototypeOf = require_setprototypeof(); var statuses = require_statuses(); var inherits = require_inherits(); var toIdentifier = require_toidentifier(); module.exports = createError; module.exports.HttpError = createHttpErrorConstructor(); module.exports.isHttpError = createIsHttpErrorFunction(module.exports.HttpError); populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError); function codeClass(status) { return Number(String(status).charAt(0) + "00"); } function createError() { var err; var msg; var status = 500; var props = {}; for (var i = 0;i < arguments.length; i++) { var arg = arguments[i]; var type = typeof arg; if (type === "object" && arg instanceof Error) { err = arg; status = err.status || err.statusCode || status; } else if (type === "number" && i === 0) { status = arg; } else if (type === "string") { msg = arg; } else if (type === "object") { props = arg; } else { throw new TypeError("argument #" + (i + 1) + " unsupported type " + type); } } if (typeof status === "number" && (status < 400 || status >= 600)) { deprecate("non-error status code; use only 4xx or 5xx status codes"); } if (typeof status !== "number" || !statuses.message[status] && (status < 400 || status >= 600)) { status = 500; } var HttpError = createError[status] || createError[codeClass(status)]; if (!err) { err = HttpError ? new HttpError(msg) : new Error(msg || statuses.message[status]); Error.captureStackTrace(err, createError); } if (!HttpError || !(err instanceof HttpError) || err.status !== status) { err.expose = status < 500; err.status = err.statusCode = status; } for (var key in props) { if (key !== "status" && key !== "statusCode") { err[key] = props[key]; } } return err; } function createHttpErrorConstructor() { function HttpError() { throw new TypeError("cannot construct abstract class"); } inherits(HttpError, Error); return HttpError; } function createClientErrorConstructor(HttpError, name, code) { var className = toClassName(name); function ClientError(message) { var msg = message != null ? message : statuses.message[code]; var err = new Error(msg); Error.captureStackTrace(err, ClientError); setPrototypeOf(err, ClientError.prototype); Object.defineProperty(err, "message", { enumerable: true, configurable: true, value: msg, writable: true }); Object.defineProperty(err, "name", { enumerable: false, configurable: true, value: className, writable: true }); return err; } inherits(ClientError, HttpError); nameFunc(ClientError, className); ClientError.prototype.status = code; ClientError.prototype.statusCode = code; ClientError.prototype.expose = true; return ClientError; } function createIsHttpErrorFunction(HttpError) { return function isHttpError(val) { if (!val || typeof val !== "object") { return false; } if (val instanceof HttpError) { return true; } return val instanceof Error && typeof val.expose === "boolean" && typeof val.statusCode === "number" && val.status === val.statusCode; }; } function createServerErrorConstructor(HttpError, name, code) { var className = toClassName(name); function ServerError(message) { var msg = message != null ? message : statuses.message[code]; var err = new Error(msg); Error.captureStackTrace(err, ServerError); setPrototypeOf(err, ServerError.prototype); Object.defineProperty(err, "message", { enumerable: true, configurable: true, value: msg, writable: true }); Object.defineProperty(err, "name", { enumerable: false, configurable: true, value: className, writable: true }); return err; } inherits(ServerError, HttpError); nameFunc(ServerError, className); ServerError.prototype.status = code; ServerError.prototype.statusCode = code; ServerError.prototype.expose = false; return ServerError; } function nameFunc(func, name) { var desc = Object.getOwnPropertyDescriptor(func, "name"); if (desc && desc.configurable) { desc.value = name; Object.defineProperty(func, "name", desc); } } function populateConstructorExports(exports2, codes, HttpError) { codes.forEach(function forEachCode(code) { var CodeError; var name = toIdentifier(statuses.message[code]); switch (codeClass(code)) { case 400: CodeError = createClientErrorConstructor(HttpError, name, code); break; case 500: CodeError = createServerErrorConstructor(HttpError, name, code); break; } if (CodeError) { exports2[code] = CodeError; exports2[name] = CodeError; } }); } function toClassName(name) { return name.slice(-5) === "Error" ? name : name + "Error"; } }); // node_modules/ms/index.js var require_ms = __commonJS((exports, module) => { var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; var y = d * 365.25; module.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === "string" && val.length > 0) { return parse5(val); } else if (type === "number" && isNaN(val) === false) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); }; function parse5(str) { str = String(str); if (str.length > 100) { return; } var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y; case "days": case "day": case "d": return n * d; case "hours": case "hour": case "hrs": case "hr": case "h": return n * h; case "minutes": case "minute": case "mins": case "min": case "m": return n * m; case "seconds": case "second": case "secs": case "sec": case "s": return n * s; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n; default: return; } } function fmtShort(ms) { if (ms >= d) { return Math.round(ms / d) + "d"; } if (ms >= h) { return Math.round(ms / h) + "h"; } if (ms >= m) { return Math.round(ms / m) + "m"; } if (ms >= s) { return Math.round(ms / s) + "s"; } return ms + "ms"; } function fmtLong(ms) { return plural(ms, d, "day") || plural(ms, h, "hour") || plural(ms, m, "minute") || plural(ms, s, "second") || ms + " ms"; } function plural(ms, n, name) { if (ms < n) { return; } if (ms < n * 1.5) { return Math.floor(ms / n) + " " + name; } return Math.ceil(ms / n) + " " + name + "s"; } }); // node_modules/debug/src/debug.js var require_debug = __commonJS((exports, module) => { exports = module.exports = createDebug.debug = createDebug["default"] = createDebug; exports.coerce = coerce; exports.disable = disable; exports.enable = enable; exports.enabled = enabled; exports.humanize = require_ms(); exports.names = []; exports.skips = []; exports.formatters = {}; var prevTime; function selectColor(namespace) { var hash = 0, i; for (i in namespace) { hash = (hash << 5) - hash + namespace.charCodeAt(i); hash |= 0; } return exports.colors[Math.abs(hash) % exports.colors.length]; } function createDebug(namespace) { function debug() { if (!debug.enabled) return; var self2 = debug; var curr = +new Date; var ms = curr - (prevTime || curr); self2.diff = ms; self2.prev = prevTime; self2.curr = curr; prevTime = curr; var args = new Array(arguments.length); for (var i = 0;i < args.length; i++) { args[i] = arguments[i]; } args[0] = exports.coerce(args[0]); if (typeof args[0] !== "string") { args.unshift("%O"); } var index = 0; args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { if (match === "%%") return match; index++; var formatter = exports.formatters[format]; if (typeof formatter === "function") { var val = args[index]; match = formatter.call(self2, val); args.splice(index, 1); index--; } return match; }); exports.formatArgs.call(self2, args); var logFn = debug.log || exports.log || console.log.bind(console); logFn.apply(self2, args); } debug.namespace = namespace; debug.enabled = exports.enabled(namespace); debug.useColors = exports.useColors(); debug.color = selectColor(namespace); if (typeof exports.init === "function") { exports.init(debug); } return debug; } function enable(namespaces) { exports.save(namespaces); exports.names = []; exports.skips = []; var split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); var len = split.length; for (var i = 0;i < len; i++) { if (!split[i]) continue; namespaces = split[i].replace(/\*/g, ".*?"); if (namespaces[0] === "-") { exports.skips.push(new RegExp("^" + namespaces.substr(1) + "$")); } else { exports.names.push(new RegExp("^" + namespaces + "$")); } } } function disable() { exports.enable(""); } function enabled(name) { var i, len; for (i = 0, len = exports.skips.length;i < len; i++) { if (exports.skips[i].test(name)) { return false; } } for (i = 0, len = exports.names.length;i < len; i++) { if (exports.names[i].test(name)) { return true; } } return false; } function coerce(val) { if (val instanceof Error) return val.stack || val.message; return val; } }); // node_modules/debug/src/browser.js var require_browser = __commonJS((exports, module) => { exports = module.exports = require_debug(); exports.log = log; exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.storage = typeof chrome != "undefined" && typeof chrome.storage != "undefined" ? chrome.storage.local : localstorage(); exports.colors = [ "lightseagreen", "forestgreen", "goldenrod", "dodgerblue", "darkorchid", "crimson" ]; function useColors() { if (typeof window !== "undefined" && window.process && window.process.type === "renderer") { return true; } return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); } exports.formatters.j = function(v) { try { return JSON.stringify(v); } catch (err) { return "[UnexpectedJSONParseError]: " + err.message; } }; function formatArgs(args) { var useColors2 = this.useColors; args[0] = (useColors2 ? "%c" : "") + this.namespace + (useColors2 ? " %c" : " ") + args[0] + (useColors2 ? "%c " : " ") + "+" + exports.humanize(this.diff); if (!useColors2) return; var c = "color: " + this.color; args.splice(1, 0, c, "color: inherit"); var index = 0; var lastC = 0; args[0].replace(/%[a-zA-Z%]/g, function(match) { if (match === "%%") return; index++; if (match === "%c") { lastC = index; } }); args.splice(lastC, 0, c); } function log() { return typeof console === "object" && console.log && Function.prototype.apply.call(console.log, console, arguments); } function save(namespaces) { try { if (namespaces == null) { exports.storage.removeItem("debug"); } else { exports.storage.debug = namespaces; } } catch (e) {} } function load() { var r; try { r = exports.storage.debug; } catch (e) {} if (!r && typeof process !== "undefined" && "env" in process) { r = process.env.DEBUG; } return r; } exports.enable(load()); function localstorage() { try { return window.localStorage; } catch (e) {} } }); // node_modules/debug/src/node.js var require_node = __commonJS((exports, module) => { var tty = __require("tty"); var util = __require("util"); exports = module.exports = require_debug(); exports.init = init; exports.log = log; exports.formatArgs = formatArgs; exports.save = save; exports.load = load; exports.useColors = useColors; exports.colors = [6, 2, 3, 4, 5, 1]; exports.inspectOpts = Object.keys(process.env).filter(function(key) { return /^debug_/i.test(key); }).reduce(function(obj, key) { var prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, function(_, k) { return k.toUpperCase(); }); var val = process.env[key]; if (/^(yes|on|true|enabled)$/i.test(val)) val = true; else if (/^(no|off|false|disabled)$/i.test(val)) val = false; else if (val === "null") val = null; else val = Number(val); obj[prop] = val; return obj; }, {}); var fd = parseInt(process.env.DEBUG_FD, 10) || 2; if (fd !== 1 && fd !== 2) { util.deprecate(function() {}, "except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)")(); } var stream = fd === 1 ? process.stdout : fd === 2 ? process.stderr : createWritableStdioStream(fd); function useColors() { return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(fd); } exports.formatters.o = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts).split(` `).map(function(str) { return str.trim(); }).join(" "); }; exports.formatters.O = function(v) { this.inspectOpts.colors = this.useColors; return util.inspect(v, this.inspectOpts); }; function formatArgs(args) { var name = this.namespace; var useColors2 = this.useColors; if (useColors2) { var c = this.color; var prefix = " \x1B[3" + c + ";1m" + name + " " + "\x1B[0m"; args[0] = prefix + args[0].split(` `).join(` ` + prefix); args.push("\x1B[3" + c + "m+" + exports.humanize(this.diff) + "\x1B[0m"); } else { args[0] = new Date().toUTCString() + " " + name + " " + args[0]; } } function log() { return stream.write(util.format.apply(util, arguments) + ` `); } function save(namespaces) { if (namespaces == null) { delete process.env.DEBUG; } else { process.env.DEBUG = namespaces; } } function load() { return process.env.DEBUG; } function createWritableStdioStream(fd2) { var stream2; var tty_wrap = process.binding("tty_wrap"); switch (tty_wrap.guessHandleType(fd2)) { case "TTY": stream2 = new tty.WriteStream(fd2); stream2._type = "tty"; if (stream2._handle && stream2._handle.unref) { stream2._handle.unref(); } break; case "FILE": var fs2 = __require("fs"); stream2 = new fs2.SyncWriteStream(fd2, { autoClose: false }); stream2._type = "fs"; break; case "PIPE": case "TCP": var net = __require("net"); stream2 = new net.Socket({ fd: fd2, readable: false, writable: true }); stream2.readable = false; stream2.read = null; stream2._type = "pipe"; if (stream2._handle && stream2._handle.unref) { stream2._handle.unref(); } break; default: throw new Error("Implement me. Unknown stream file type!"); } stream2.fd = fd2; stream2._isStdio = true; return stream2; } function init(debug) { debug.inspectOpts = {}; var keys = Object.keys(exports.inspectOpts); for (var i = 0;i < keys.length; i++) { debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; } } exports.enable(load()); }); // node_modules/debug/src/index.js var require_src = __commonJS((exports, module) => { if (typeof process !== "undefined" && process.type === "renderer") { module.exports = require_browser(); } else { module.exports = require_node(); } }); // node_modules/destroy/index.js var require_destroy = __commonJS((exports, module) => { /*! * destroy * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */ var EventEmitter = __require("events").EventEmitter; var ReadStream = __require("fs").ReadStream; var Stream = __require("stream"); var Zlib = __require("zlib"); module.exports = destroy; function destroy(stream, suppress) { if (isFsReadStream(stream)) { destroyReadStream(stream); } else if (isZlibStream(stream)) { destroyZlibStream(stream); } else if (hasDestroy(stream)) { stream.destroy(); } if (isEventEmitter(stream) && suppress) { stream.removeAllListeners("error"); stream.addListener("error", noop); } return stream; } function destroyReadStream(stream) { stream.destroy(); if (typeof stream.close === "function") { stream.on("open", onOpenClose); } } function closeZlibStream(stream) { if (stream._hadError === true) { var prop = stream._binding === null ? "_binding" : "_handle"; stream[prop] = { close: function() { this[prop] = null; } }; } stream.close(); } function destroyZlibStream(stream) { if (typeof stream.destroy === "function") { if (stream._binding) { stream.destroy(); if (stream._processing) { stream._needDrain = true; stream.once("drain", onDrainClearBinding); } else { stream._binding.clear(); } } else if (stream._destroy && stream._destroy !== Stream.Transform.prototype._destroy) { stream.destroy(); } else if (stream._destroy && typeof stream.close === "function") { stream.destroyed = true; stream.close(); } else { stream.destroy(); } } else if (typeof stream.close === "function") { closeZlibStream(stream); } } function hasDestroy(stream) { return stream instanceof Stream && typeof stream.destroy === "function"; } function isEventEmitter(val) { return val instanceof EventEmitter; } function isFsReadStream(stream) { return stream instanceof ReadStream; } function isZlibStream(stream) { return stream instanceof Zlib.Gzip || stream instanceof Zlib.Gunzip || stream instanceof Zlib.Deflate || stream instanceof Zlib.DeflateRaw || stream instanceof Zlib.Inflate || stream instanceof Zlib.InflateRaw || stream instanceof Zlib.Unzip; } function noop() {} function onDrainClearBinding() { this._binding.clear(); } function onOpenClose() { if (typeof this.fd === "number") { this.close(); } } }); // node_modules/safer-buffer/safer.js var require_safer = __commonJS((exports, module) => { var buffer = __require("buffer"); var Buffer2 = buffer.Buffer; var safer = {}; var key; for (key in buffer) { if (!buffer.hasOwnProperty(key)) continue; if (key === "SlowBuffer" || key === "Buffer") continue; safer[key] = buffer[key]; } var Safer = safer.Buffer = {}; for (key in Buffer2) { if (!Buffer2.hasOwnProperty(key)) continue; if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue; Safer[key] = Buffer2[key]; } safer.Buffer.prototype = Buffer2.prototype; if (!Safer.from || Safer.from === Uint8Array.from) { Safer.from = function(value, encodingOrOffset, length) { if (typeof value === "number") { throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value); } if (value && typeof value.length === "undefined") { throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value); } return Buffer2(value, encodingOrOffset, length); }; } if (!Safer.alloc) { Safer.alloc = function(size, fill, encoding) { if (typeof size !== "number") { throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size); } if (size < 0 || size >= 2 * (1 << 30)) { throw new RangeError('The value "' + size + '" is invalid for option "size"'); } var buf = Buffer2(size); if (!fill || fill.length === 0) { buf.fill(0); } else if (typeof encoding === "string") { buf.fill(fill, encoding); } else { buf.fill(fill); } return buf; }; } if (!safer.kStringMaxLength) { try { safer.kStringMaxLength = process.binding("buffer").kStringMaxLength; } catch (e) {} } if (!safer.constants) { safer.constants = { MAX_LENGTH: safer.kMaxLength }; if (safer.kStringMaxLength) { safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength; } } module.exports = safer; }); // node_modules/iconv-lite/lib/bom-handling.js var require_bom_handling = __commonJS((exports) => { var BOMChar = "\uFEFF"; exports.PrependBOM = PrependBOMWrapper; function PrependBOMWrapper(encoder, options) { this.encoder = encoder; this.addBOM = true; } PrependBOMWrapper.prototype.write = function(str) { if (this.addBOM) { str = BOMChar + str; this.addBOM = false; } return this.encoder.write(str); }; PrependBOMWrapper.prototype.end = function() { return this.encoder.end(); }; exports.StripBOM = StripBOMWrapper; function StripBOMWrapper(decoder, options) { this.decoder = decoder; this.pass = false; this.options = options || {}; } StripBOMWrapper.prototype.write = function(buf) { var res = this.decoder.write(buf); if (this.pass || !res) return res; if (res[0] === BOMChar) { res = res.slice(1); if (typeof this.options.stripBOM === "function") this.options.stripBOM(); } this.pass = true; return res; }; StripBOMWrapper.prototype.end = function() { return this.decoder.end(); }; }); // node_modules/iconv-lite/encodings/internal.js var require_internal = __commonJS((exports, module) => { var Buffer2 = require_safer().Buffer; module.exports = { utf8: { type: "_internal", bomAware: true }, cesu8: { type: "_internal", bomAware: true }, unicode11utf8: "utf8", ucs2: { type: "_internal", bomAware: true }, utf16le: "ucs2", binary: { type: "_internal" }, base64: { type: "_internal" }, hex: { type: "_internal" }, _internal: InternalCodec }; function InternalCodec(codecOptions, iconv) { this.enc = codecOptions.encodingName; this.bomAware = codecOptions.bomAware; if (this.enc === "base64") this.encoder = InternalEncoderBase64; else if (this.enc === "cesu8") { this.enc = "utf8"; this.encoder = InternalEncoderCesu8; if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "\uD83D\uDCA9") { this.decoder = InternalDecoderCesu8; this.defaultCharUnicode = iconv.defaultCharUnicode; } } } InternalCodec.prototype.encoder = InternalEncoder; InternalCodec.prototype.decoder = InternalDecoder; var StringDecoder = __require("string_decoder").StringDecoder; if (!StringDecoder.prototype.end) StringDecoder.prototype.end = function() {}; function InternalDecoder(options, codec) { StringDecoder.call(this, codec.enc); } InternalDecoder.prototype = StringDecoder.prototype; function InternalEncoder(options, codec) { this.enc = codec.enc; } InternalEncoder.prototype.write = function(str) { return Buffer2.from(str, this.enc); }; InternalEncoder.prototype.end = function() {}; function InternalEncoderBase64(options, codec) { this.prevStr = ""; } InternalEncoderBase64.prototype.write = function(str) { str = this.prevStr + str; var completeQuads = str.length - str.length % 4; this.prevStr = str.slice(completeQuads); str = str.slice(0, completeQuads); return Buffer2.from(str, "base64"); }; InternalEncoderBase64.prototype.end = function() { return Buffer2.from(this.prevStr, "base64"); }; function InternalEncoderCesu8(options, codec) {} InternalEncoderCesu8.prototype.write = function(str) { var buf = Buffer2.alloc(str.length * 3), bufIdx = 0; for (var i = 0;i < str.length; i++) { var charCode = str.charCodeAt(i); if (charCode < 128) buf[bufIdx++] = charCode; else if (charCode < 2048) { buf[bufIdx++] = 192 + (charCode >>> 6); buf[bufIdx++] = 128 + (charCode & 63); } else { buf[bufIdx++] = 224 + (charCode >>> 12); buf[bufIdx++] = 128 + (charCode >>> 6 & 63); buf[bufIdx++] = 128 + (charCode & 63); } } return buf.slice(0, bufIdx); }; InternalEncoderCesu8.prototype.end = function() {}; function InternalDecoderCesu8(options, codec) { this.acc = 0; this.contBytes = 0; this.accBytes = 0; this.defaultCharUnicode = codec.defaultCharUnicode; } InternalDecoderCesu8.prototype.write = function(buf) { var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = ""; for (var i = 0;i < buf.length; i++) { var curByte = buf[i]; if ((curByte & 192) !== 128) { if (contBytes > 0) { res += this.defaultCharUnicode; contBytes = 0; } if (curByte < 128) { res += String.fromCharCode(curByte); } else if (curByte < 224) { acc = curByte & 31; contBytes = 1; accBytes = 1; } else if (curByte < 240) { acc = curByte & 15; contBytes = 2; accBytes = 1; } else { res += this.defaultCharUnicode; } } else { if (contBytes > 0) { acc = acc << 6 | curByte & 63; contBytes--; accBytes++; if (contBytes === 0) { if (accBytes === 2 && acc < 128 && acc > 0) res += this.defaultCharUnicode; else if (accBytes === 3 && acc < 2048) res += this.defaultCharUnicode; else res += String.fromCharCode(acc); } } else { res += this.defaultCharUnicode; } } } this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; return res; }; InternalDecoderCesu8.prototype.end = function() { var res = 0; if (this.contBytes > 0) res += this.defaultCharUnicode; return res; }; }); // node_modules/iconv-lite/encodings/utf16.js var require_utf16 = __commonJS((exports) => { var Buffer2 = require_safer().Buffer; exports.utf16be = Utf16BECodec; function Utf16BECodec() {} Utf16BECodec.prototype.encoder = Utf16BEEncoder; Utf16BECodec.prototype.decoder = Utf16BEDecoder; Utf16BECodec.prototype.bomAware = true; function Utf16BEEncoder() {} Utf16BEEncoder.prototype.write = function(str) { var buf = Buffer2.from(str, "ucs2"); for (var i = 0;i < buf.length; i += 2) { var tmp = buf[i]; buf[i] = buf[i + 1]; buf[i + 1] = tmp; } return buf; }; Utf16BEEncoder.prototype.end = function() {}; function Utf16BEDecoder() { this.overflowByte = -1; } Utf16BEDecoder.prototype.write = function(buf) { if (buf.length == 0) return ""; var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0; if (this.overflowByte !== -1) { buf2[0] = buf[0]; buf2[1] = this.overflowByte; i = 1; j = 2; } for (;i < buf.length - 1; i += 2, j += 2) { buf2[j] = buf[i + 1]; buf2[j + 1] = buf[i]; } this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1; return buf2.slice(0, j).toString("ucs2"); }; Utf16BEDecoder.prototype.end = function() {}; exports.utf16 = Utf16Codec; function Utf16Codec(codecOptions, iconv) { this.iconv = iconv; } Utf16Codec.prototype.encoder = Utf16Encoder; Utf16Codec.prototype.decoder = Utf16Decoder; function Utf16Encoder(options, codec) { options = options || {}; if (options.addBOM === undefined) options.addBOM = true; this.encoder = codec.iconv.getEncoder("utf-16le", options); } Utf16Encoder.prototype.write = function(str) { return this.encoder.write(str); }; Utf16Encoder.prototype.end = function() { return this.encoder.end(); }; function Utf16Decoder(options, codec) { this.decoder = null; this.initialBytes = []; this.initialBytesLen = 0; this.options = options || {}; this.iconv = codec.iconv; } Utf16Decoder.prototype.write = function(buf) { if (!this.decoder) { this.initialBytes.push(buf); this.initialBytesLen += buf.length; if (this.initialBytesLen < 16) return ""; var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding); this.decoder = this.iconv.getDecoder(encoding, this.options); this.initialBytes.length = this.initialBytesLen = 0; } return this.decoder.write(buf); }; Utf16Decoder.prototype.end = function() { if (!this.decoder) { var buf = Buffer2.concat(this.initialBytes), encoding = detectEncoding(buf, this.options.defaultEncoding); this.decoder = this.iconv.getDecoder(encoding, this.options); var res = this.decoder.write(buf), trail = this.decoder.end(); return trail ? res + trail : res; } return this.decoder.end(); }; function detectEncoding(buf, defaultEncoding) { var enc = defaultEncoding || "utf-16le"; if (buf.length >= 2) { if (buf[0] == 254 && buf[1] == 255) enc = "utf-16be"; else if (buf[0] == 255 && buf[1] == 254) enc = "utf-16le"; else { var asciiCharsLE = 0, asciiCharsBE = 0, _len = Math.min(buf.length - buf.length % 2, 64); for (var i = 0;i < _len; i += 2) { if (buf[i] === 0 && buf[i + 1] !== 0) asciiCharsBE++; if (buf[i] !== 0 && buf[i + 1] === 0) asciiCharsLE++; } if (asciiCharsBE > asciiCharsLE) enc = "utf-16be"; else if (asciiCharsBE < asciiCharsLE) enc = "utf-16le"; } } return enc; } }); // node_modules/iconv-lite/encodings/utf7.js var require_utf7 = __commonJS((exports) => { var Buffer2 = require_safer().Buffer; exports.utf7 = Utf7Codec; exports.unicode11utf7 = "utf7"; function Utf7Codec(codecOptions, iconv) { this.iconv = iconv; } Utf7Codec.prototype.encoder = Utf7Encoder; Utf7Codec.prototype.decoder = Utf7Decoder; Utf7Codec.prototype.bomAware = true; var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; function Utf7Encoder(options, codec) { this.iconv = codec.iconv; } Utf7Encoder.prototype.write = function(str) { return Buffer2.from(str.replace(nonDirectChars, function(chunk) { return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-"; }.bind(this))); }; Utf7Encoder.prototype.end = function() {}; function Utf7Decoder(options, codec) { this.iconv = codec.iconv; this.inBase64 = false; this.base64Accum = ""; } var base64Regex = /[A-Za-z0-9\/+]/; var base64Chars = []; for (i = 0;i < 256; i++) base64Chars[i] = base64Regex.test(String.fromCharCode(i)); var i; var plusChar = 43; var minusChar = 45; var andChar = 38; Utf7Decoder.prototype.write = function(buf) { var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum; for (var i2 = 0;i2 < buf.length; i2++) { if (!inBase64) { if (buf[i2] == plusChar) { res += this.iconv.decode(buf.slice(lastI, i2), "ascii"); lastI = i2 + 1; inBase64 = true; } } else { if (!base64Chars[buf[i2]]) { if (i2 == lastI && buf[i2] == minusChar) { res += "+"; } else { var b64str = base64Accum + buf.slice(lastI, i2).toString(); res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); } if (buf[i2] != minusChar) i2--; lastI = i2 + 1; inBase64 = false; base64Accum = ""; } } } if (!inBase64) { res += this.iconv.decode(buf.slice(lastI), "ascii"); } else { var b64str = base64Accum + buf.slice(lastI).toString(); var canBeDecoded = b64str.length - b64str.length % 8; base64Accum = b64str.slice(canBeDecoded); b64str = b64str.slice(0, canBeDecoded); res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); } this.inBase64 = inBase64; this.base64Accum = base64Accum; return res; }; Utf7Decoder.prototype.end = function() { var res = ""; if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be"); this.inBase64 = false; this.base64Accum = ""; return res; }; exports.utf7imap = Utf7IMAPCodec; function Utf7IMAPCodec(codecOptions, iconv) { this.iconv = iconv; } Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; Utf7IMAPCodec.prototype.bomAware = true; function Utf7IMAPEncoder(options, codec) { this.iconv = codec.iconv; this.inBase64 = false; this.base64Accum = Buffer2.alloc(6); this.base64AccumIdx = 0; } Utf7IMAPEncoder.prototype.write = function(str) { var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0; for (var i2 = 0;i2 < str.length; i2++) { var uChar = str.charCodeAt(i2); if (32 <= uChar && uChar <= 126) { if (inBase64) { if (base64AccumIdx > 0) { bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx); base64AccumIdx = 0; } buf[bufIdx++] = minusChar; inBase64 = false; } if (!inBase64) { buf[bufIdx++] = uChar; if (uChar === andChar) buf[bufIdx++] = minusChar; } } else { if (!inBase64) { buf[bufIdx++] = andChar; inBase64 = true; } if (inBase64) { base64Accum[base64AccumIdx++] = uChar >> 8; base64Accum[base64AccumIdx++] = uChar & 255; if (base64AccumIdx == base64Accum.length) { bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx); base64AccumIdx = 0; } } } } this.inBase64 = inBase64; this.base64AccumIdx = base64AccumIdx; return buf.slice(0, bufIdx); }; Utf7IMAPEncoder.prototype.end = function() { var buf = Buffer2.alloc(10), bufIdx = 0; if (this.inBase64) { if (this.base64AccumIdx > 0) { bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx); this.base64AccumIdx = 0; } buf[bufIdx++] = minusChar; this.inBase64 = false; } return buf.slice(0, bufIdx); }; function Utf7IMAPDecoder(options, codec) { this.iconv = codec.iconv; this.inBase64 = false; this.base64Accum = ""; } var base64IMAPChars = base64Chars.slice(); base64IMAPChars[44] = true; Utf7IMAPDecoder.prototype.write = function(buf) { var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum; for (var i2 = 0;i2 < buf.length; i2++) { if (!inBase64) { if (buf[i2] == andChar) { res += this.iconv.decode(buf.slice(lastI, i2), "ascii"); lastI = i2 + 1; inBase64 = true; } } else { if (!base64IMAPChars[buf[i2]]) { if (i2 == lastI && buf[i2] == minusChar) { res += "&"; } else { var b64str = base64Accum + buf.slice(lastI, i2).toString().replace(/,/g, "/"); res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); } if (buf[i2] != minusChar) i2--; lastI = i2 + 1; inBase64 = false; base64Accum = ""; } } } if (!inBase64) { res += this.iconv.decode(buf.slice(lastI), "ascii"); } else { var b64str = base64Accum + buf.slice(lastI).toString().replace(/,/g, "/"); var canBeDecoded = b64str.length - b64str.length % 8; base64Accum = b64str.slice(canBeDecoded); b64str = b64str.slice(0, canBeDecoded); res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be"); } this.inBase64 = inBase64; this.base64Accum = base64Accum; return res; }; Utf7IMAPDecoder.prototype.end = function() { var res = ""; if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be"); this.inBase64 = false; this.base64Accum = ""; return res; }; }); // node_modules/iconv-lite/encodings/sbcs-codec.js var require_sbcs_codec = __commonJS((exports) => { var Buffer2 = require_safer().Buffer; exports._sbcs = SBCSCodec; function SBCSCodec(codecOptions, iconv) { if (!codecOptions) throw new Error("SBCS codec is called without the data."); if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256) throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)"); if (codecOptions.chars.length === 128) { var asciiString = ""; for (var i = 0;i < 128; i++) asciiString += String.fromCharCode(i); codecOptions.chars = asciiString + codecOptions.chars; } this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2"); var encodeBuf = Buffer2.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); for (var i = 0;i < codecOptions.chars.length; i++) encodeBuf[codecOptions.chars.charCodeAt(i)] = i; this.encodeBuf = encodeBuf; } SBCSCodec.prototype.encoder = SBCSEncoder; SBCSCodec.prototype.decoder = SBCSDecoder; function SBCSEncoder(options, codec) { this.encodeBuf = codec.encodeBuf; } SBCSEncoder.prototype.write = function(str) { var buf = Buffer2.alloc(str.length); for (var i = 0;i < str.length; i++) buf[i] = this.encodeBuf[str.charCodeAt(i)]; return buf; }; SBCSEncoder.prototype.end = function() {}; function SBCSDecoder(options, codec) { this.decodeBuf = codec.decodeBuf; } SBCSDecoder.prototype.write = function(buf) { var decodeBuf = this.decodeBuf; var newBuf = Buffer2.alloc(buf.length * 2); var idx1 = 0, idx2 = 0; for (var i = 0;i < buf.length; i++) { idx1 = buf[i] * 2; idx2 = i * 2; newBuf[idx2] = decodeBuf[idx1]; newBuf[idx2 + 1] = decodeBuf[idx1 + 1]; } return newBuf.toString("ucs2"); }; SBCSDecoder.prototype.end = function() {}; }); // node_modules/iconv-lite/encodings/sbcs-data.js var require_sbcs_data = __commonJS((exports, module) => { module.exports = { "10029": "maccenteuro", maccenteuro: { type: "_sbcs", chars: "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ" }, "808": "cp808", ibm808: "cp808", cp808: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ " }, mik: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ascii8bit: "ascii", usascii: "ascii", ansix34: "ascii", ansix341968: "ascii", ansix341986: "ascii", csascii: "ascii", cp367: "ascii", ibm367: "ascii", isoir6: "ascii", iso646us: "ascii", iso646irv: "ascii", us: "ascii", latin1: "iso88591", latin2: "iso88592", latin3: "iso88593", latin4: "iso88594", latin5: "iso88599", latin6: "iso885910", latin7: "iso885913", latin8: "iso885914", latin9: "iso885915", latin10: "iso885916", csisolatin1: "iso88591", csisolatin2: "iso88592", csisolatin3: "iso88593", csisolatin4: "iso88594", csisolatincyrillic: "iso88595", csisolatinarabic: "iso88596", csisolatingreek: "iso88597", csisolatinhebrew: "iso88598", csisolatin5: "iso88599", csisolatin6: "iso885910", l1: "iso88591", l2: "iso88592", l3: "iso88593", l4: "iso88594", l5: "iso88599", l6: "iso885910", l7: "iso885913", l8: "iso885914", l9: "iso885915", l10: "iso885916", isoir14: "iso646jp", isoir57: "iso646cn", isoir100: "iso88591", isoir101: "iso88592", isoir109: "iso88593", isoir110: "iso88594", isoir144: "iso88595", isoir127: "iso88596", isoir126: "iso88597", isoir138: "iso88598", isoir148: "iso88599", isoir157: "iso885910", isoir166: "tis620", isoir179: "iso885913", isoir199: "iso885914", isoir203: "iso885915", isoir226: "iso885916", cp819: "iso88591", ibm819: "iso88591", cyrillic: "iso88595", arabic: "iso88596", arabic8: "iso88596", ecma114: "iso88596", asmo708: "iso88596", greek: "iso88597", greek8: "iso88597", ecma118: "iso88597", elot928: "iso88597", hebrew: "iso88598", hebrew8: "iso88598", turkish: "iso88599", turkish8: "iso88599", thai: "iso885911", thai8: "iso885911", celtic: "iso885914", celtic8: "iso885914", isoceltic: "iso885914", tis6200: "tis620", tis62025291: "tis620", tis62025330: "tis620", "10000": "macroman", "10006": "macgreek", "10007": "maccyrillic", "10079": "maciceland", "10081": "macturkish", cspc8codepage437: "cp437", cspc775baltic: "cp775", cspc850multilingual: "cp850", cspcp852: "cp852", cspc862latinhebrew: "cp862", cpgr: "cp869", msee: "cp1250", mscyrl: "cp1251", msansi: "cp1252", msgreek: "cp1253", msturk: "cp1254", mshebr: "cp1255", msarab: "cp1256", winbaltrim: "cp1257", cp20866: "koi8r", "20866": "koi8r", ibm878: "koi8r", cskoi8r: "koi8r", cp21866: "koi8u", "21866": "koi8u", ibm1168: "koi8u", strk10482002: "rk1048", tcvn5712: "tcvn", tcvn57121: "tcvn", gb198880: "iso646cn", cn: "iso646cn", csiso14jisc6220ro: "iso646jp", jisc62201969ro: "iso646jp", jp: "iso646jp", cshproman8: "hproman8", r8: "hproman8", roman8: "hproman8", xroman8: "hproman8", ibm1051: "hproman8", mac: "macintosh", csmacintosh: "macintosh" }; }); // node_modules/iconv-lite/encodings/sbcs-data-generated.js var require_sbcs_data_generated = __commonJS((exports, module) => { module.exports = { "437": "cp437", "737": "cp737", "775": "cp775", "850": "cp850", "852": "cp852", "855": "cp855", "856": "cp856", "857": "cp857", "858": "cp858", "860": "cp860", "861": "cp861", "862": "cp862", "863": "cp863", "864": "cp864", "865": "cp865", "866": "cp866", "869": "cp869", "874": "windows874", "922": "cp922", "1046": "cp1046", "1124": "cp1124", "1125": "cp1125", "1129": "cp1129", "1133": "cp1133", "1161": "cp1161", "1162": "cp1162", "1163": "cp1163", "1250": "windows1250", "1251": "windows1251", "1252": "windows1252", "1253": "windows1253", "1254": "windows1254", "1255": "windows1255", "1256": "windows1256", "1257": "windows1257", "1258": "windows1258", "28591": "iso88591", "28592": "iso88592", "28593": "iso88593", "28594": "iso88594", "28595": "iso88595", "28596": "iso88596", "28597": "iso88597", "28598": "iso88598", "28599": "iso88599", "28600": "iso885910", "28601": "iso885911", "28603": "iso885913", "28604": "iso885914", "28605": "iso885915", "28606": "iso885916", windows874: { type: "_sbcs", chars: "€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" }, win874: "windows874", cp874: "windows874", windows1250: { type: "_sbcs", chars: "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" }, win1250: "windows1250", cp1250: "windows1250", windows1251: { type: "_sbcs", chars: "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" }, win1251: "windows1251", cp1251: "windows1251", windows1252: { type: "_sbcs", chars: "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" }, win1252: "windows1252", cp1252: "windows1252", windows1253: { type: "_sbcs", chars: "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" }, win1253: "windows1253", cp1253: "windows1253", windows1254: { type: "_sbcs", chars: "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" }, win1254: "windows1254", cp1254: "windows1254", windows1255: { type: "_sbcs", chars: "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" }, win1255: "windows1255", cp1255: "windows1255", windows1256: { type: "_sbcs", chars: "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے" }, win1256: "windows1256", cp1256: "windows1256", windows1257: { type: "_sbcs", chars: "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙" }, win1257: "windows1257", cp1257: "windows1257", windows1258: { type: "_sbcs", chars: "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" }, win1258: "windows1258", cp1258: "windows1258", iso88591: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" }, cp28591: "iso88591", iso88592: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙" }, cp28592: "iso88592", iso88593: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙" }, cp28593: "iso88593", iso88594: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙" }, cp28594: "iso88594", iso88595: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ" }, cp28595: "iso88595", iso88596: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������" }, cp28596: "iso88596", iso88597: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�" }, cp28597: "iso88597", iso88598: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�" }, cp28598: "iso88598", iso88599: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ" }, cp28599: "iso88599", iso885910: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ" }, cp28600: "iso885910", iso885911: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" }, cp28601: "iso885911", iso885913: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’" }, cp28603: "iso885913", iso885914: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ" }, cp28604: "iso885914", iso885915: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" }, cp28605: "iso885915", iso885916: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ" }, cp28606: "iso885916", cp437: { type: "_sbcs", chars: "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm437: "cp437", csibm437: "cp437", cp737: { type: "_sbcs", chars: "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ " }, ibm737: "cp737", csibm737: "cp737", cp775: { type: "_sbcs", chars: "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ " }, ibm775: "cp775", csibm775: "cp775", cp850: { type: "_sbcs", chars: "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " }, ibm850: "cp850", csibm850: "cp850", cp852: { type: "_sbcs", chars: "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ " }, ibm852: "cp852", csibm852: "cp852", cp855: { type: "_sbcs", chars: "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ " }, ibm855: "cp855", csibm855: "cp855", cp856: { type: "_sbcs", chars: "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ " }, ibm856: "cp856", csibm856: "cp856", cp857: { type: "_sbcs", chars: "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ " }, ibm857: "cp857", csibm857: "cp857", cp858: { type: "_sbcs", chars: "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ " }, ibm858: "cp858", csibm858: "cp858", cp860: { type: "_sbcs", chars: "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm860: "cp860", csibm860: "cp860", cp861: { type: "_sbcs", chars: "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm861: "cp861", csibm861: "cp861", cp862: { type: "_sbcs", chars: "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm862: "cp862", csibm862: "cp862", cp863: { type: "_sbcs", chars: "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm863: "cp863", csibm863: "cp863", cp864: { type: "_sbcs", chars: `\x00\x01\x02\x03\x04\x05\x06\x07\b \v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�` }, ibm864: "cp864", csibm864: "cp864", cp865: { type: "_sbcs", chars: "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ " }, ibm865: "cp865", csibm865: "cp865", cp866: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ " }, ibm866: "cp866", csibm866: "cp866", cp869: { type: "_sbcs", chars: "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ " }, ibm869: "cp869", csibm869: "cp869", cp922: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ" }, ibm922: "cp922", csibm922: "cp922", cp1046: { type: "_sbcs", chars: "ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�" }, ibm1046: "cp1046", csibm1046: "cp1046", cp1124: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ" }, ibm1124: "cp1124", csibm1124: "cp1124", cp1125: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ " }, ibm1125: "cp1125", csibm1125: "cp1125", cp1129: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" }, ibm1129: "cp1129", csibm1129: "cp1129", cp1133: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�" }, ibm1133: "cp1133", csibm1133: "cp1133", cp1161: { type: "_sbcs", chars: "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ " }, ibm1161: "cp1161", csibm1161: "cp1161", cp1162: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" }, ibm1162: "cp1162", csibm1162: "cp1162", cp1163: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ" }, ibm1163: "cp1163", csibm1163: "cp1163", maccroatian: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ" }, maccyrillic: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" }, macgreek: { type: "_sbcs", chars: "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�" }, maciceland: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" }, macroman: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" }, macromania: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" }, macthai: { type: "_sbcs", chars: "«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\uFEFF​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����" }, macturkish: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ" }, macukraine: { type: "_sbcs", chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤" }, koi8r: { type: "_sbcs", chars: "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" }, koi8u: { type: "_sbcs", chars: "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" }, koi8ru: { type: "_sbcs", chars: "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" }, koi8t: { type: "_sbcs", chars: "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ" }, armscii8: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�" }, rk1048: { type: "_sbcs", chars: "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" }, tcvn: { type: "_sbcs", chars: `\x00ÚỤ\x03ỪỬỮ\x07\b \v\f\r\x0E\x0F\x10ỨỰỲỶỸÝỴ\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ` }, georgianacademy: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ" }, georgianps: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" }, pt154: { type: "_sbcs", chars: "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя" }, viscii: { type: "_sbcs", chars: `\x00\x01Ẳ\x03\x04ẴẪ\x07\b \v\f\r\x0E\x0F\x10\x11\x12\x13Ỷ\x15\x16\x17\x18Ỹ\x1A\x1B\x1C\x1DỴ\x1F !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ` }, iso646cn: { type: "_sbcs", chars: `\x00\x01\x02\x03\x04\x05\x06\x07\b \v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������` }, iso646jp: { type: "_sbcs", chars: `\x00\x01\x02\x03\x04\x05\x06\x07\b \v\f\r\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_\`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������` }, hproman8: { type: "_sbcs", chars: "€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�" }, macintosh: { type: "_sbcs", chars: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ" }, ascii: { type: "_sbcs", chars: "��������������������������������������������������������������������������������������������������������������������������������" }, tis620: { type: "_sbcs", chars: "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����" } }; }); // node_modules/iconv-lite/encodings/dbcs-codec.js var require_dbcs_codec = __commonJS((exports) => { var Buffer2 = require_safer().Buffer; exports._dbcs = DBCSCodec; var UNASSIGNED = -1; var GB18030_CODE = -2; var SEQ_START = -10; var NODE_START = -1000; var UNASSIGNED_NODE = new Array(256); var DEF_CHAR = -1; for (i = 0;i < 256; i++) UNASSIGNED_NODE[i] = UNASSIGNED; var i; function DBCSCodec(codecOptions, iconv) { this.encodingName = codecOptions.encodingName; if (!codecOptions) throw new Error("DBCS codec is called without the data."); if (!codecOptions.table) throw new Error("Encoding '" + this.encodingName + "' has no data."); var mappingTable = codecOptions.table(); this.decodeTables = []; this.decodeTables[0] = UNASSIGNED_NODE.slice(0); this.decodeTableSeq = []; for (var i2 = 0;i2 < mappingTable.length; i2++) this._addDecodeChunk(mappingTable[i2]); this.defaultCharUnicode = iconv.defaultCharUnicode; this.encodeTable = []; this.encodeTableSeq = []; var skipEncodeChars = {}; if (codecOptions.encodeSkipVals) for (var i2 = 0;i2 < codecOptions.encodeSkipVals.length; i2++) { var val = codecOptions.encodeSkipVals[i2]; if (typeof val === "number") skipEncodeChars[val] = true; else for (var j = val.from;j <= val.to; j++) skipEncodeChars[j] = true; } this._fillEncodeTable(0, 0, skipEncodeChars); if (codecOptions.encodeAdd) { for (var uChar in codecOptions.encodeAdd) if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); } this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"]; if (this.defCharSB === UNASSIGNED) this.defCharSB = 63; if (typeof codecOptions.gb18030 === "function") { this.gb18030 = codecOptions.gb18030(); var thirdByteNodeIdx = this.decodeTables.length; var thirdByteNode = this.decodeTables[thirdByteNodeIdx] = UNASSIGNED_NODE.slice(0); var fourthByteNodeIdx = this.decodeTables.length; var fourthByteNode = this.decodeTables[fourthByteNodeIdx] = UNASSIGNED_NODE.slice(0); for (var i2 = 129;i2 <= 254; i2++) { var secondByteNodeIdx = NODE_START - this.decodeTables[0][i2]; var secondByteNode = this.decodeTables[secondByteNodeIdx]; for (var j = 48;j <= 57; j++) secondByteNode[j] = NODE_START - thirdByteNodeIdx; } for (var i2 = 129;i2 <= 254; i2++) thirdByteNode[i2] = NODE_START - fourthByteNodeIdx; for (var i2 = 48;i2 <= 57; i2++) fourthByteNode[i2] = GB18030_CODE; } } DBCSCodec.prototype.encoder = DBCSEncoder; DBCSCodec.prototype.decoder = DBCSDecoder; DBCSCodec.prototype._getDecodeTrieNode = function(addr) { var bytes = []; for (;addr > 0; addr >>= 8) bytes.push(addr & 255); if (bytes.length == 0) bytes.push(0); var node = this.decodeTables[0]; for (var i2 = bytes.length - 1;i2 > 0; i2--) { var val = node[bytes[i2]]; if (val == UNASSIGNED) { node[bytes[i2]] = NODE_START - this.decodeTables.length; this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); } else if (val <= NODE_START) { node = this.decodeTables[NODE_START - val]; } else throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); } return node; }; DBCSCodec.prototype._addDecodeChunk = function(chunk) { var curAddr = parseInt(chunk[0], 16); var writeTable = this._getDecodeTrieNode(curAddr); curAddr = curAddr & 255; for (var k = 1;k < chunk.length; k++) { var part = chunk[k]; if (typeof part === "string") { for (var l = 0;l < part.length; ) { var code = part.charCodeAt(l++); if (55296 <= code && code < 56320) { var codeTrail = part.charCodeAt(l++); if (56320 <= codeTrail && codeTrail < 57344) writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320); else throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); } else if (4080 < code && code <= 4095) { var len = 4095 - code + 2; var seq = []; for (var m = 0;m < len; m++) seq.push(part.charCodeAt(l++)); writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; this.decodeTableSeq.push(seq); } else writeTable[curAddr++] = code; } } else if (typeof part === "number") { var charCode = writeTable[curAddr - 1] + 1; for (var l = 0;l < part; l++) writeTable[curAddr++] = charCode++; } else throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); } if (curAddr > 255) throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); }; DBCSCodec.prototype._getEncodeBucket = function(uCode) { var high = uCode >> 8; if (this.encodeTable[high] === undefined) this.encodeTable[high] = UNASSIGNED_NODE.slice(0); return this.encodeTable[high]; }; DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { var bucket = this._getEncodeBucket(uCode); var low = uCode & 255; if (bucket[low] <= SEQ_START) this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode; else if (bucket[low] == UNASSIGNED) bucket[low] = dbcsCode; }; DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { var uCode = seq[0]; var bucket = this._getEncodeBucket(uCode); var low = uCode & 255; var node; if (bucket[low] <= SEQ_START) { node = this.encodeTableSeq[SEQ_START - bucket[low]]; } else { node = {}; if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; bucket[low] = SEQ_START - this.encodeTableSeq.length; this.encodeTableSeq.push(node); } for (var j = 1;j < seq.length - 1; j++) { var oldVal = node[uCode]; if (typeof oldVal === "object") node = oldVal; else { node = node[uCode] = {}; if (oldVal !== undefined) node[DEF_CHAR] = oldVal; } } uCode = seq[seq.length - 1]; node[uCode] = dbcsCode; }; DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { var node = this.decodeTables[nodeIdx]; for (var i2 = 0;i2 < 256; i2++) { var uCode = node[i2]; var mbCode = prefix + i2; if (skipEncodeChars[mbCode]) continue; if (uCode >= 0) this._setEncodeChar(uCode, mbCode); else if (uCode <= NODE_START) this._fillEncodeTable(NODE_START - uCode, mbCode << 8, skipEncodeChars); else if (uCode <= SEQ_START) this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); } }; function DBCSEncoder(options, codec) { this.leadSurrogate = -1; this.seqObj = undefined; this.encodeTable = codec.encodeTable; this.encodeTableSeq = codec.encodeTableSeq; this.defaultCharSingleByte = codec.defCharSB; this.gb18030 = codec.gb18030; } DBCSEncoder.prototype.write = function(str) { var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0; while (true) { if (nextChar === -1) { if (i2 == str.length) break; var uCode = str.charCodeAt(i2++); } else { var uCode = nextChar; nextChar = -1; } if (55296 <= uCode && uCode < 57344) { if (uCode < 56320) { if (leadSurrogate === -1) { leadSurrogate = uCode; continue; } else { leadSurrogate = uCode; uCode = UNASSIGNED; } } else { if (leadSurrogate !== -1) { uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320); leadSurrogate = -1; } else { uCode = UNASSIGNED; } } } else if (leadSurrogate !== -1) { nextChar = uCode; uCode = UNASSIGNED; leadSurrogate = -1; } var dbcsCode = UNASSIGNED; if (seqObj !== undefined && uCode != UNASSIGNED) { var resCode = seqObj[uCode]; if (typeof resCode === "object") { seqObj = resCode; continue; } else if (typeof resCode == "number") { dbcsCode = resCode; } else if (resCode == undefined) { resCode = seqObj[DEF_CHAR]; if (resCode !== undefined) { dbcsCode = resCode; nextChar = uCode; } else {} } seqObj = undefined; } else if (uCode >= 0) { var subtable = this.encodeTable[uCode >> 8]; if (subtable !== undefined) dbcsCode = subtable[uCode & 255]; if (dbcsCode <= SEQ_START) { seqObj = this.encodeTableSeq[SEQ_START - dbcsCode]; continue; } if (dbcsCode == UNASSIGNED && this.gb18030) { var idx = findIdx(this.gb18030.uChars, uCode); if (idx != -1) { var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); newBuf[j++] = 129 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; newBuf[j++] = 48 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; newBuf[j++] = 129 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; newBuf[j++] = 48 + dbcsCode; continue; } } } if (dbcsCode === UNASSIGNED) dbcsCode = this.defaultCharSingleByte; if (dbcsCode < 256) { newBuf[j++] = dbcsCode; } else if (dbcsCode < 65536) { newBuf[j++] = dbcsCode >> 8; newBuf[j++] = dbcsCode & 255; } else { newBuf[j++] = dbcsCode >> 16; newBuf[j++] = dbcsCode >> 8 & 255; newBuf[j++] = dbcsCode & 255; } } this.seqObj = seqObj; this.leadSurrogate = leadSurrogate; return newBuf.slice(0, j); }; DBCSEncoder.prototype.end = function() { if (this.leadSurrogate === -1 && this.seqObj === undefined) return; var newBuf = Buffer2.alloc(10), j = 0; if (this.seqObj) { var dbcsCode = this.seqObj[DEF_CHAR]; if (dbcsCode !== undefined) { if (dbcsCode < 256) { newBuf[j++] = dbcsCode; } else { newBuf[j++] = dbcsCode >> 8; newBuf[j++] = dbcsCode & 255; } } else {} this.seqObj = undefined; } if (this.leadSurrogate !== -1) { newBuf[j++] = this.defaultCharSingleByte; this.leadSurrogate = -1; } return newBuf.slice(0, j); }; DBCSEncoder.prototype.findIdx = findIdx; function DBCSDecoder(options, codec) { this.nodeIdx = 0; this.prevBuf = Buffer2.alloc(0); this.decodeTables = codec.decodeTables; this.decodeTableSeq = codec.decodeTableSeq; this.defaultCharUnicode = codec.defaultCharUnicode; this.gb18030 = codec.gb18030; } DBCSDecoder.prototype.write = function(buf) { var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBuf = this.prevBuf, prevBufOffset = this.prevBuf.length, seqStart = -this.prevBuf.length, uCode; if (prevBufOffset > 0) prevBuf = Buffer2.concat([prevBuf, buf.slice(0, 10)]); for (var i2 = 0, j = 0;i2 < buf.length; i2++) { var curByte = i2 >= 0 ? buf[i2] : prevBuf[i2 + prevBufOffset]; var uCode = this.decodeTables[nodeIdx][curByte]; if (uCode >= 0) {} else if (uCode === UNASSIGNED) { i2 = seqStart; uCode = this.defaultCharUnicode.charCodeAt(0); } else if (uCode === GB18030_CODE) { var curSeq = seqStart >= 0 ? buf.slice(seqStart, i2 + 1) : prevBuf.slice(seqStart + prevBufOffset, i2 + 1 + prevBufOffset); var ptr = (curSeq[0] - 129) * 12600 + (curSeq[1] - 48) * 1260 + (curSeq[2] - 129) * 10 + (curSeq[3] - 48); var idx = findIdx(this.gb18030.gbChars, ptr); uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; } else if (uCode <= NODE_START) { nodeIdx = NODE_START - uCode; continue; } else if (uCode <= SEQ_START) { var seq = this.decodeTableSeq[SEQ_START - uCode]; for (var k = 0;k < seq.length - 1; k++) { uCode = seq[k]; newBuf[j++] = uCode & 255; newBuf[j++] = uCode >> 8; } uCode = seq[seq.length - 1]; } else throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); if (uCode > 65535) { uCode -= 65536; var uCodeLead = 55296 + Math.floor(uCode / 1024); newBuf[j++] = uCodeLead & 255; newBuf[j++] = uCodeLead >> 8; uCode = 56320 + uCode % 1024; } newBuf[j++] = uCode & 255; newBuf[j++] = uCode >> 8; nodeIdx = 0; seqStart = i2 + 1; } this.nodeIdx = nodeIdx; this.prevBuf = seqStart >= 0 ? buf.slice(seqStart) : prevBuf.slice(seqStart + prevBufOffset); return newBuf.slice(0, j).toString("ucs2"); }; DBCSDecoder.prototype.end = function() { var ret = ""; while (this.prevBuf.length > 0) { ret += this.defaultCharUnicode; var buf = this.prevBuf.slice(1); this.prevBuf = Buffer2.alloc(0); this.nodeIdx = 0; if (buf.length > 0) ret += this.write(buf); } this.nodeIdx = 0; return ret; }; function findIdx(table, val) { if (table[0] > val) return -1; var l = 0, r = table.length; while (l < r - 1) { var mid = l + Math.floor((r - l + 1) / 2); if (table[mid] <= val) l = mid; else r = mid; } return l; } }); // node_modules/iconv-lite/encodings/tables/shiftjis.json var require_shiftjis = __commonJS((exports, module) => { module.exports = [ ["0", "\x00", 128], ["a1", "。", 62], ["8140", " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", 9, "+-±×"], ["8180", "÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"], ["81b8", "∈∋⊆⊇⊂⊃∪∩"], ["81c8", "∧∨¬⇒⇔∀∃"], ["81da", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"], ["81f0", "ʼn♯♭♪†‡¶"], ["81fc", "◯"], ["824f", "0", 9], ["8260", "A", 25], ["8281", "a", 25], ["829f", "ぁ", 82], ["8340", "ァ", 62], ["8380", "ム", 22], ["839f", "Α", 16, "Σ", 6], ["83bf", "α", 16, "σ", 6], ["8440", "А", 5, "ЁЖ", 25], ["8470", "а", 5, "ёж", 7], ["8480", "о", 17], ["849f", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"], ["8740", "①", 19, "Ⅰ", 9], ["875f", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"], ["877e", "㍻"], ["8780", "〝〟№㏍℡㊤", 4, "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"], ["889f", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"], ["8940", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"], ["8980", "園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"], ["8a40", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"], ["8a80", "橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"], ["8b40", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"], ["8b80", "朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"], ["8c40", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"], ["8c80", "劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"], ["8d40", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"], ["8d80", "項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"], ["8e40", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"], ["8e80", "死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"], ["8f40", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"], ["8f80", "準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"], ["9040", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"], ["9080", "逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"], ["9140", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"], ["9180", "操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"], ["9240", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"], ["9280", "逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"], ["9340", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"], ["9380", "凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"], ["9440", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"], ["9480", "楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"], ["9540", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"], ["9580", "斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"], ["9640", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"], ["9680", "摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"], ["9740", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"], ["9780", "沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"], ["9840", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"], ["989f", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"], ["9940", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"], ["9980", "凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"], ["9a40", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"], ["9a80", "噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"], ["9b40", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"], ["9b80", "它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"], ["9c40", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"], ["9c80", "怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"], ["9d40", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"], ["9d80", "捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"], ["9e40", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"], ["9e80", "梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"], ["9f40", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"], ["9f80", "麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"], ["e040", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"], ["e080", "烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"], ["e140", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"], ["e180", "痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], ["e240", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"], ["e280", "窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"], ["e340", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"], ["e380", "縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"], ["e440", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"], ["e480", "艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], ["e540", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"], ["e580", "蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"], ["e640", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"], ["e680", "諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"], ["e740", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"], ["e780", "轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"], ["e840", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"], ["e880", "閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"], ["e940", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"], ["e980", "騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"], ["ea40", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"], ["ea80", "黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"], ["ed40", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"], ["ed80", "塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"], ["ee40", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"], ["ee80", "蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"], ["eeef", "ⅰ", 9, "¬¦'""], ["f040", "", 62], ["f080", "", 124], ["f140", "", 62], ["f180", "", 124], ["f240", "", 62], ["f280", "", 124], ["f340", "", 62], ["f380", "", 124], ["f440", "", 62], ["f480", "", 124], ["f540", "", 62], ["f580", "", 124], ["f640", "", 62], ["f680", "", 124], ["f740", "", 62], ["f780", "", 124], ["f840", "", 62], ["f880", "", 124], ["f940", ""], ["fa40", "ⅰ", 9, "Ⅰ", 9, "¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"], ["fa80", "兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"], ["fb40", "涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"], ["fb80", "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"], ["fc40", "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"] ]; }); // node_modules/iconv-lite/encodings/tables/eucjp.json var require_eucjp = __commonJS((exports, module) => { module.exports = [ ["0", "\x00", 127], ["8ea1", "。", 62], ["a1a1", " 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈", 9, "+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"], ["a2a1", "◆□■△▲▽▼※〒→←↑↓〓"], ["a2ba", "∈∋⊆⊇⊂⊃∪∩"], ["a2ca", "∧∨¬⇒⇔∀∃"], ["a2dc", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"], ["a2f2", "ʼn♯♭♪†‡¶"], ["a2fe", "◯"], ["a3b0", "0", 9], ["a3c1", "A", 25], ["a3e1", "a", 25], ["a4a1", "ぁ", 82], ["a5a1", "ァ", 85], ["a6a1", "Α", 16, "Σ", 6], ["a6c1", "α", 16, "σ", 6], ["a7a1", "А", 5, "ЁЖ", 25], ["a7d1", "а", 5, "ёж", 25], ["a8a1", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"], ["ada1", "①", 19, "Ⅰ", 9], ["adc0", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"], ["addf", "㍻〝〟№㏍℡㊤", 4, "㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"], ["b0a1", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"], ["b1a1", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"], ["b2a1", "押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"], ["b3a1", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"], ["b4a1", "粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"], ["b5a1", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"], ["b6a1", "供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"], ["b7a1", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"], ["b8a1", "検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"], ["b9a1", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"], ["baa1", "此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"], ["bba1", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"], ["bca1", "次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"], ["bda1", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"], ["bea1", "勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"], ["bfa1", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"], ["c0a1", "澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"], ["c1a1", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"], ["c2a1", "臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"], ["c3a1", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"], ["c4a1", "帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"], ["c5a1", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"], ["c6a1", "董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"], ["c7a1", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"], ["c8a1", "函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"], ["c9a1", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"], ["caa1", "福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"], ["cba1", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"], ["cca1", "漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"], ["cda1", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"], ["cea1", "痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"], ["cfa1", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"], ["d0a1", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"], ["d1a1", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"], ["d2a1", "辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"], ["d3a1", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"], ["d4a1", "圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"], ["d5a1", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"], ["d6a1", "屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"], ["d7a1", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"], ["d8a1", "悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"], ["d9a1", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"], ["daa1", "據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"], ["dba1", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"], ["dca1", "棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"], ["dda1", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"], ["dea1", "沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"], ["dfa1", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"], ["e0a1", "燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"], ["e1a1", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"], ["e2a1", "癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"], ["e3a1", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"], ["e4a1", "筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"], ["e5a1", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"], ["e6a1", "罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"], ["e7a1", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"], ["e8a1", "茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"], ["e9a1", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"], ["eaa1", "蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"], ["eba1", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"], ["eca1", "譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"], ["eda1", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"], ["eea1", "遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"], ["efa1", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"], ["f0a1", "陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"], ["f1a1", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"], ["f2a1", "髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"], ["f3a1", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"], ["f4a1", "堯槇遙瑤凜熙"], ["f9a1", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"], ["faa1", "忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"], ["fba1", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"], ["fca1", "釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"], ["fcf1", "ⅰ", 9, "¬¦'""], ["8fa2af", "˘ˇ¸˙˝¯˛˚~΄΅"], ["8fa2c2", "¡¦¿"], ["8fa2eb", "ºª©®™¤№"], ["8fa6e1", "ΆΈΉΊΪ"], ["8fa6e7", "Ό"], ["8fa6e9", "ΎΫ"], ["8fa6ec", "Ώ"], ["8fa6f1", "άέήίϊΐόςύϋΰώ"], ["8fa7c2", "Ђ", 10, "ЎЏ"], ["8fa7f2", "ђ", 10, "ўџ"], ["8fa9a1", "ÆĐ"], ["8fa9a4", "Ħ"], ["8fa9a6", "IJ"], ["8fa9a8", "ŁĿ"], ["8fa9ab", "ŊØŒ"], ["8fa9af", "ŦÞ"], ["8fa9c1", "æđðħıijĸłŀʼnŋøœßŧþ"], ["8faaa1", "ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"], ["8faaba", "ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"], ["8faba1", "áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"], ["8fabbd", "ġĥíìïîǐ"], ["8fabc5", "īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"], ["8fb0a1", "丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"], ["8fb1a1", "侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"], ["8fb2a1", "傒傓傔傖傛傜傞", 4, "傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"], ["8fb3a1", "凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"], ["8fb4a1", "匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"], ["8fb5a1", "咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"], ["8fb6a1", "嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍", 5, "嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤", 4, "囱囫园"], ["8fb7a1", "囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭", 4, "坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"], ["8fb8a1", "堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"], ["8fb9a1", "奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"], ["8fbaa1", "嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖", 4, "寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"], ["8fbba1", "屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"], ["8fbca1", "巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪", 4, "幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"], ["8fbda1", "彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐", 4, "忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"], ["8fbea1", "悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐", 4, "愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"], ["8fbfa1", "懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"], ["8fc0a1", "捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"], ["8fc1a1", "擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"], ["8fc2a1", "昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"], ["8fc3a1", "杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮", 4, "桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"], ["8fc4a1", "棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"], ["8fc5a1", "樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"], ["8fc6a1", "歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"], ["8fc7a1", "泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"], ["8fc8a1", "湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"], ["8fc9a1", "濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔", 4, "炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃", 4, "焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"], ["8fcaa1", "煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"], ["8fcba1", "狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"], ["8fcca1", "珿琀琁琄琇琊琑琚琛琤琦琨", 9, "琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"], ["8fcda1", "甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹", 5, "疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"], ["8fcea1", "瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢", 6, "皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"], ["8fcfa1", "睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"], ["8fd0a1", "碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"], ["8fd1a1", "秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"], ["8fd2a1", "笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙", 5], ["8fd3a1", "籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"], ["8fd4a1", "綞綦綧綪綳綶綷綹緂", 4, "緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"], ["8fd5a1", "罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"], ["8fd6a1", "胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"], ["8fd7a1", "艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"], ["8fd8a1", "荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"], ["8fd9a1", "蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏", 4, "蕖蕙蕜", 6, "蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"], ["8fdaa1", "藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠", 4, "虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"], ["8fdba1", "蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃", 6, "螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"], ["8fdca1", "蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊", 4, "裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"], ["8fdda1", "襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔", 4, "觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"], ["8fdea1", "誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂", 4, "譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"], ["8fdfa1", "貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"], ["8fe0a1", "踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"], ["8fe1a1", "轃轇轏轑", 4, "轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"], ["8fe2a1", "郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"], ["8fe3a1", "釂釃釅釓釔釗釙釚釞釤釥釩釪釬", 5, "釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵", 4, "鉻鉼鉽鉿銈銉銊銍銎銒銗"], ["8fe4a1", "銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿", 4, "鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"], ["8fe5a1", "鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉", 4, "鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"], ["8fe6a1", "镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"], ["8fe7a1", "霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"], ["8fe8a1", "頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱", 4, "餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"], ["8fe9a1", "馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿", 4], ["8feaa1", "鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪", 4, "魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"], ["8feba1", "鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦", 4, "鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"], ["8feca1", "鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"], ["8feda1", "黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃", 4, "齓齕齖齗齘齚齝齞齨齩齭", 4, "齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"] ]; }); // node_modules/iconv-lite/encodings/tables/cp936.json var require_cp936 = __commonJS((exports, module) => { module.exports = [ ["0", "\x00", 127, "€"], ["8140", "丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪", 5, "乲乴", 9, "乿", 6, "亇亊"], ["8180", "亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂", 6, "伋伌伒", 4, "伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾", 4, "佄佅佇", 5, "佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"], ["8240", "侤侫侭侰", 4, "侶", 8, "俀俁係俆俇俈俉俋俌俍俒", 4, "俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿", 11], ["8280", "個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯", 10, "倻倽倿偀偁偂偄偅偆偉偊偋偍偐", 4, "偖偗偘偙偛偝", 7, "偦", 5, "偭", 8, "偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎", 20, "傤傦傪傫傭", 4, "傳", 6, "傼"], ["8340", "傽", 17, "僐", 5, "僗僘僙僛", 10, "僨僩僪僫僯僰僱僲僴僶", 4, "僼", 9, "儈"], ["8380", "儉儊儌", 5, "儓", 13, "儢", 28, "兂兇兊兌兎兏児兒兓兗兘兙兛兝", 4, "兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦", 4, "冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒", 5], ["8440", "凘凙凚凜凞凟凢凣凥", 5, "凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄", 5, "剋剎剏剒剓剕剗剘"], ["8480", "剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳", 9, "剾劀劃", 4, "劉", 6, "劑劒劔", 6, "劜劤劥劦劧劮劯劰労", 9, "勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務", 5, "勠勡勢勣勥", 10, "勱", 7, "勻勼勽匁匂匃匄匇匉匊匋匌匎"], ["8540", "匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯", 9, "匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"], ["8580", "厐", 4, "厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯", 6, "厷厸厹厺厼厽厾叀參", 4, "収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝", 4, "呣呥呧呩", 7, "呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"], ["8640", "咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠", 4, "哫哬哯哰哱哴", 5, "哻哾唀唂唃唄唅唈唊", 4, "唒唓唕", 5, "唜唝唞唟唡唥唦"], ["8680", "唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋", 4, "啑啒啓啔啗", 4, "啝啞啟啠啢啣啨啩啫啯", 5, "啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠", 6, "喨", 8, "喲喴営喸喺喼喿", 4, "嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗", 4, "嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸", 4, "嗿嘂嘃嘄嘅"], ["8740", "嘆嘇嘊嘋嘍嘐", 7, "嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀", 11, "噏", 4, "噕噖噚噛噝", 4], ["8780", "噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽", 7, "嚇", 6, "嚐嚑嚒嚔", 14, "嚤", 10, "嚰", 6, "嚸嚹嚺嚻嚽", 12, "囋", 8, "囕囖囘囙囜団囥", 5, "囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國", 6], ["8840", "園", 9, "圝圞圠圡圢圤圥圦圧圫圱圲圴", 4, "圼圽圿坁坃坄坅坆坈坉坋坒", 4, "坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"], ["8880", "垁垇垈垉垊垍", 4, "垔", 6, "垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹", 8, "埄", 6, "埌埍埐埑埓埖埗埛埜埞埡埢埣埥", 7, "埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥", 4, "堫", 4, "報堲堳場堶", 7], ["8940", "堾", 5, "塅", 6, "塎塏塐塒塓塕塖塗塙", 4, "塟", 5, "塦", 4, "塭", 16, "塿墂墄墆墇墈墊墋墌"], ["8980", "墍", 4, "墔", 4, "墛墜墝墠", 7, "墪", 17, "墽墾墿壀壂壃壄壆", 10, "壒壓壔壖", 13, "壥", 5, "壭壯壱売壴壵壷壸壺", 7, "夃夅夆夈", 4, "夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"], ["8a40", "夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛", 4, "奡奣奤奦", 12, "奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"], ["8a80", "妧妬妭妰妱妳", 5, "妺妼妽妿", 6, "姇姈姉姌姍姎姏姕姖姙姛姞", 4, "姤姦姧姩姪姫姭", 11, "姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪", 6, "娳娵娷", 4, "娽娾娿婁", 4, "婇婈婋", 9, "婖婗婘婙婛", 5], ["8b40", "婡婣婤婥婦婨婩婫", 8, "婸婹婻婼婽婾媀", 17, "媓", 6, "媜", 13, "媫媬"], ["8b80", "媭", 4, "媴媶媷媹", 4, "媿嫀嫃", 5, "嫊嫋嫍", 4, "嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬", 4, "嫲", 22, "嬊", 11, "嬘", 25, "嬳嬵嬶嬸", 7, "孁", 6], ["8c40", "孈", 7, "孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"], ["8c80", "寑寔", 8, "寠寢寣實寧審", 4, "寯寱", 6, "寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧", 6, "屰屲", 6, "屻屼屽屾岀岃", 4, "岉岊岋岎岏岒岓岕岝", 4, "岤", 4], ["8d40", "岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅", 5, "峌", 5, "峓", 5, "峚", 6, "峢峣峧峩峫峬峮峯峱", 9, "峼", 4], ["8d80", "崁崄崅崈", 5, "崏", 4, "崕崗崘崙崚崜崝崟", 4, "崥崨崪崫崬崯", 4, "崵", 7, "崿", 7, "嵈嵉嵍", 10, "嵙嵚嵜嵞", 10, "嵪嵭嵮嵰嵱嵲嵳嵵", 12, "嶃", 21, "嶚嶛嶜嶞嶟嶠"], ["8e40", "嶡", 21, "嶸", 12, "巆", 6, "巎", 12, "巜巟巠巣巤巪巬巭"], ["8e80", "巰巵巶巸", 4, "巿帀帄帇帉帊帋帍帎帒帓帗帞", 7, "帨", 4, "帯帰帲", 4, "帹帺帾帿幀幁幃幆", 5, "幍", 6, "幖", 4, "幜幝幟幠幣", 14, "幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨", 4, "庮", 4, "庴庺庻庼庽庿", 6], ["8f40", "廆廇廈廋", 5, "廔廕廗廘廙廚廜", 11, "廩廫", 8, "廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"], ["8f80", "弨弫弬弮弰弲", 6, "弻弽弾弿彁", 14, "彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢", 5, "復徫徬徯", 5, "徶徸徹徺徻徾", 4, "忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"], ["9040", "怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰", 4, "怶", 4, "怽怾恀恄", 6, "恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"], ["9080", "悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽", 7, "惇惈惉惌", 4, "惒惓惔惖惗惙惛惞惡", 4, "惪惱惲惵惷惸惻", 4, "愂愃愄愅愇愊愋愌愐", 4, "愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬", 18, "慀", 6], ["9140", "慇慉態慍慏慐慒慓慔慖", 6, "慞慟慠慡慣慤慥慦慩", 6, "慱慲慳慴慶慸", 18, "憌憍憏", 4, "憕"], ["9180", "憖", 6, "憞", 8, "憪憫憭", 9, "憸", 5, "憿懀懁懃", 4, "應懌", 4, "懓懕", 16, "懧", 13, "懶", 8, "戀", 5, "戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸", 4, "扂扄扅扆扊"], ["9240", "扏扐払扖扗扙扚扜", 6, "扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋", 5, "抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"], ["9280", "拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳", 5, "挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖", 7, "捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙", 6, "採掤掦掫掯掱掲掵掶掹掻掽掿揀"], ["9340", "揁揂揃揅揇揈揊揋揌揑揓揔揕揗", 6, "揟揢揤", 4, "揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆", 4, "損搎搑搒搕", 5, "搝搟搢搣搤"], ["9380", "搥搧搨搩搫搮", 5, "搵", 4, "搻搼搾摀摂摃摉摋", 6, "摓摕摖摗摙", 4, "摟", 7, "摨摪摫摬摮", 9, "摻", 6, "撃撆撈", 8, "撓撔撗撘撚撛撜撝撟", 4, "撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆", 6, "擏擑擓擔擕擖擙據"], ["9440", "擛擜擝擟擠擡擣擥擧", 24, "攁", 7, "攊", 7, "攓", 4, "攙", 8], ["9480", "攢攣攤攦", 4, "攬攭攰攱攲攳攷攺攼攽敀", 4, "敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數", 14, "斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱", 7, "斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘", 7, "旡旣旤旪旫"], ["9540", "旲旳旴旵旸旹旻", 4, "昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷", 4, "昽昿晀時晄", 6, "晍晎晐晑晘"], ["9580", "晙晛晜晝晞晠晢晣晥晧晩", 4, "晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘", 4, "暞", 8, "暩", 4, "暯", 4, "暵暶暷暸暺暻暼暽暿", 25, "曚曞", 7, "曧曨曪", 5, "曱曵曶書曺曻曽朁朂會"], ["9640", "朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠", 5, "朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗", 4, "杝杢杣杤杦杧杫杬杮東杴杶"], ["9680", "杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹", 7, "柂柅", 9, "柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵", 7, "柾栁栂栃栄栆栍栐栒栔栕栘", 4, "栞栟栠栢", 6, "栫", 6, "栴栵栶栺栻栿桇桋桍桏桒桖", 5], ["9740", "桜桝桞桟桪桬", 7, "桵桸", 8, "梂梄梇", 7, "梐梑梒梔梕梖梘", 9, "梣梤梥梩梪梫梬梮梱梲梴梶梷梸"], ["9780", "梹", 6, "棁棃", 5, "棊棌棎棏棐棑棓棔棖棗棙棛", 4, "棡棢棤", 9, "棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆", 4, "椌椏椑椓", 11, "椡椢椣椥", 7, "椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃", 16, "楕楖楘楙楛楜楟"], ["9840", "楡楢楤楥楧楨楩楪楬業楯楰楲", 4, "楺楻楽楾楿榁榃榅榊榋榌榎", 5, "榖榗榙榚榝", 9, "榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"], ["9880", "榾榿槀槂", 7, "構槍槏槑槒槓槕", 5, "槜槝槞槡", 11, "槮槯槰槱槳", 9, "槾樀", 9, "樋", 11, "標", 5, "樠樢", 5, "権樫樬樭樮樰樲樳樴樶", 6, "樿", 4, "橅橆橈", 7, "橑", 6, "橚"], ["9940", "橜", 4, "橢橣橤橦", 10, "橲", 6, "橺橻橽橾橿檁檂檃檅", 8, "檏檒", 4, "檘", 7, "檡", 5], ["9980", "檧檨檪檭", 114, "欥欦欨", 6], ["9a40", "欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍", 11, "歚", 7, "歨歩歫", 13, "歺歽歾歿殀殅殈"], ["9a80", "殌殎殏殐殑殔殕殗殘殙殜", 4, "殢", 7, "殫", 7, "殶殸", 6, "毀毃毄毆", 4, "毌毎毐毑毘毚毜", 4, "毢", 7, "毬毭毮毰毱毲毴毶毷毸毺毻毼毾", 6, "氈", 4, "氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋", 4, "汑汒汓汖汘"], ["9b40", "汙汚汢汣汥汦汧汫", 4, "汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"], ["9b80", "泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟", 5, "洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽", 4, "涃涄涆涇涊涋涍涏涐涒涖", 4, "涜涢涥涬涭涰涱涳涴涶涷涹", 5, "淁淂淃淈淉淊"], ["9c40", "淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽", 7, "渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"], ["9c80", "渶渷渹渻", 7, "湅", 7, "湏湐湑湒湕湗湙湚湜湝湞湠", 10, "湬湭湯", 14, "満溁溂溄溇溈溊", 4, "溑", 6, "溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪", 5], ["9d40", "滰滱滲滳滵滶滷滸滺", 7, "漃漄漅漇漈漊", 4, "漐漑漒漖", 9, "漡漢漣漥漦漧漨漬漮漰漲漴漵漷", 6, "漿潀潁潂"], ["9d80", "潃潄潅潈潉潊潌潎", 9, "潙潚潛潝潟潠潡潣潤潥潧", 5, "潯潰潱潳潵潶潷潹潻潽", 6, "澅澆澇澊澋澏", 12, "澝澞澟澠澢", 4, "澨", 10, "澴澵澷澸澺", 5, "濁濃", 5, "濊", 6, "濓", 10, "濟濢濣濤濥"], ["9e40", "濦", 7, "濰", 32, "瀒", 7, "瀜", 6, "瀤", 6], ["9e80", "瀫", 9, "瀶瀷瀸瀺", 17, "灍灎灐", 13, "灟", 11, "灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞", 12, "炰炲炴炵炶為炾炿烄烅烆烇烉烋", 12, "烚"], ["9f40", "烜烝烞烠烡烢烣烥烪烮烰", 6, "烸烺烻烼烾", 10, "焋", 4, "焑焒焔焗焛", 10, "焧", 7, "焲焳焴"], ["9f80", "焵焷", 13, "煆煇煈煉煋煍煏", 12, "煝煟", 4, "煥煩", 4, "煯煰煱煴煵煶煷煹煻煼煾", 5, "熅", 4, "熋熌熍熎熐熑熒熓熕熖熗熚", 4, "熡", 6, "熩熪熫熭", 5, "熴熶熷熸熺", 8, "燄", 9, "燏", 4], ["a040", "燖", 9, "燡燢燣燤燦燨", 5, "燯", 9, "燺", 11, "爇", 19], ["a080", "爛爜爞", 9, "爩爫爭爮爯爲爳爴爺爼爾牀", 6, "牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅", 4, "犌犎犐犑犓", 11, "犠", 11, "犮犱犲犳犵犺", 6, "狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"], ["a1a1", " 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈", 7, "〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"], ["a2a1", "ⅰ", 9], ["a2b1", "⒈", 19, "⑴", 19, "①", 9], ["a2e5", "㈠", 9], ["a2f1", "Ⅰ", 11], ["a3a1", "!"#¥%", 88, " ̄"], ["a4a1", "ぁ", 82], ["a5a1", "ァ", 85], ["a6a1", "Α", 16, "Σ", 6], ["a6c1", "α", 16, "σ", 6], ["a6e0", "︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"], ["a6ee", "︻︼︷︸︱"], ["a6f4", "︳︴"], ["a7a1", "А", 5, "ЁЖ", 25], ["a7d1", "а", 5, "ёж", 25], ["a840", "ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═", 35, "▁", 6], ["a880", "█", 7, "▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"], ["a8a1", "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"], ["a8bd", "ńň"], ["a8c0", "ɡ"], ["a8c5", "ㄅ", 36], ["a940", "〡", 8, "㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"], ["a959", "℡㈱"], ["a95c", "‐"], ["a960", "ー゛゜ヽヾ〆ゝゞ﹉", 9, "﹔﹕﹖﹗﹙", 8], ["a980", "﹢", 4, "﹨﹩﹪﹫"], ["a996", "〇"], ["a9a4", "─", 75], ["aa40", "狜狝狟狢", 5, "狪狫狵狶狹狽狾狿猀猂猄", 5, "猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀", 8], ["aa80", "獉獊獋獌獎獏獑獓獔獕獖獘", 7, "獡", 10, "獮獰獱"], ["ab40", "獲", 11, "獿", 4, "玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣", 5, "玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃", 4], ["ab80", "珋珌珎珒", 6, "珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳", 4], ["ac40", "珸", 10, "琄琇琈琋琌琍琎琑", 8, "琜", 5, "琣琤琧琩琫琭琯琱琲琷", 4, "琽琾琿瑀瑂", 11], ["ac80", "瑎", 6, "瑖瑘瑝瑠", 12, "瑮瑯瑱", 4, "瑸瑹瑺"], ["ad40", "瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑", 10, "璝璟", 7, "璪", 15, "璻", 12], ["ad80", "瓈", 9, "瓓", 8, "瓝瓟瓡瓥瓧", 6, "瓰瓱瓲"], ["ae40", "瓳瓵瓸", 6, "甀甁甂甃甅", 7, "甎甐甒甔甕甖甗甛甝甞甠", 4, "甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"], ["ae80", "畝", 7, "畧畨畩畫", 6, "畳畵當畷畺", 4, "疀疁疂疄疅疇"], ["af40", "疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦", 4, "疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"], ["af80", "瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"], ["b040", "癅", 6, "癎", 5, "癕癗", 4, "癝癟癠癡癢癤", 6, "癬癭癮癰", 7, "癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"], ["b080", "皜", 7, "皥", 8, "皯皰皳皵", 9, "盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"], ["b140", "盄盇盉盋盌盓盕盙盚盜盝盞盠", 4, "盦", 7, "盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎", 10, "眛眜眝眞眡眣眤眥眧眪眫"], ["b180", "眬眮眰", 4, "眹眻眽眾眿睂睄睅睆睈", 7, "睒", 7, "睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"], ["b240", "睝睞睟睠睤睧睩睪睭", 11, "睺睻睼瞁瞂瞃瞆", 5, "瞏瞐瞓", 11, "瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶", 4], ["b280", "瞼瞾矀", 12, "矎", 8, "矘矙矚矝", 4, "矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"], ["b340", "矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃", 5, "砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"], ["b380", "硛硜硞", 11, "硯", 7, "硸硹硺硻硽", 6, "场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"], ["b440", "碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨", 7, "碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚", 9], ["b480", "磤磥磦磧磩磪磫磭", 4, "磳磵磶磸磹磻", 5, "礂礃礄礆", 6, "础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"], ["b540", "礍", 5, "礔", 9, "礟", 4, "礥", 14, "礵", 4, "礽礿祂祃祄祅祇祊", 8, "祔祕祘祙祡祣"], ["b580", "祤祦祩祪祫祬祮祰", 6, "祹祻", 4, "禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"], ["b640", "禓", 6, "禛", 11, "禨", 10, "禴", 4, "禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙", 5, "秠秡秢秥秨秪"], ["b680", "秬秮秱", 6, "秹秺秼秾秿稁稄稅稇稈稉稊稌稏", 4, "稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"], ["b740", "稝稟稡稢稤", 14, "稴稵稶稸稺稾穀", 5, "穇", 9, "穒", 4, "穘", 16], ["b780", "穩", 6, "穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"], ["b840", "窣窤窧窩窪窫窮", 4, "窴", 10, "竀", 10, "竌", 9, "竗竘竚竛竜竝竡竢竤竧", 5, "竮竰竱竲竳"], ["b880", "竴", 4, "竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"], ["b940", "笯笰笲笴笵笶笷笹笻笽笿", 5, "筆筈筊筍筎筓筕筗筙筜筞筟筡筣", 10, "筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆", 6, "箎箏"], ["b980", "箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹", 7, "篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"], ["ba40", "篅篈築篊篋篍篎篏篐篒篔", 4, "篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲", 4, "篸篹篺篻篽篿", 7, "簈簉簊簍簎簐", 5, "簗簘簙"], ["ba80", "簚", 4, "簠", 5, "簨簩簫", 12, "簹", 5, "籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"], ["bb40", "籃", 9, "籎", 36, "籵", 5, "籾", 9], ["bb80", "粈粊", 6, "粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴", 4, "粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"], ["bc40", "粿糀糂糃糄糆糉糋糎", 6, "糘糚糛糝糞糡", 6, "糩", 5, "糰", 7, "糹糺糼", 13, "紋", 5], ["bc80", "紑", 14, "紡紣紤紥紦紨紩紪紬紭紮細", 6, "肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"], ["bd40", "紷", 54, "絯", 7], ["bd80", "絸", 32, "健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"], ["be40", "継", 12, "綧", 6, "綯", 42], ["be80", "線", 32, "尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"], ["bf40", "緻", 62], ["bf80", "縺縼", 4, "繂", 4, "繈", 21, "俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"], ["c040", "繞", 35, "纃", 23, "纜纝纞"], ["c080", "纮纴纻纼绖绤绬绹缊缐缞缷缹缻", 6, "罃罆", 9, "罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"], ["c140", "罖罙罛罜罝罞罠罣", 4, "罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂", 7, "羋羍羏", 4, "羕", 4, "羛羜羠羢羣羥羦羨", 6, "羱"], ["c180", "羳", 4, "羺羻羾翀翂翃翄翆翇翈翉翋翍翏", 4, "翖翗翙", 5, "翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"], ["c240", "翤翧翨翪翫翬翭翯翲翴", 6, "翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫", 5, "耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"], ["c280", "聙聛", 13, "聫", 5, "聲", 11, "隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"], ["c340", "聾肁肂肅肈肊肍", 5, "肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇", 4, "胏", 6, "胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"], ["c380", "脌脕脗脙脛脜脝脟", 12, "脭脮脰脳脴脵脷脹", 4, "脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"], ["c440", "腀", 5, "腇腉腍腎腏腒腖腗腘腛", 4, "腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃", 4, "膉膋膌膍膎膐膒", 5, "膙膚膞", 4, "膤膥"], ["c480", "膧膩膫", 7, "膴", 5, "膼膽膾膿臄臅臇臈臉臋臍", 6, "摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"], ["c540", "臔", 14, "臤臥臦臨臩臫臮", 4, "臵", 5, "臽臿舃與", 4, "舎舏舑舓舕", 5, "舝舠舤舥舦舧舩舮舲舺舼舽舿"], ["c580", "艀艁艂艃艅艆艈艊艌艍艎艐", 7, "艙艛艜艝艞艠", 7, "艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"], ["c640", "艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"], ["c680", "苺苼", 4, "茊茋茍茐茒茓茖茘茙茝", 9, "茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"], ["c740", "茾茿荁荂荄荅荈荊", 4, "荓荕", 4, "荝荢荰", 6, "荹荺荾", 6, "莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡", 6, "莬莭莮"], ["c780", "莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"], ["c840", "菮華菳", 4, "菺菻菼菾菿萀萂萅萇萈萉萊萐萒", 5, "萙萚萛萞", 5, "萩", 7, "萲", 5, "萹萺萻萾", 7, "葇葈葉"], ["c880", "葊", 6, "葒", 4, "葘葝葞葟葠葢葤", 4, "葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"], ["c940", "葽", 4, "蒃蒄蒅蒆蒊蒍蒏", 7, "蒘蒚蒛蒝蒞蒟蒠蒢", 12, "蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"], ["c980", "蓘", 4, "蓞蓡蓢蓤蓧", 4, "蓭蓮蓯蓱", 10, "蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"], ["ca40", "蔃", 8, "蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢", 8, "蔭", 9, "蔾", 4, "蕄蕅蕆蕇蕋", 10], ["ca80", "蕗蕘蕚蕛蕜蕝蕟", 4, "蕥蕦蕧蕩", 8, "蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"], ["cb40", "薂薃薆薈", 6, "薐", 10, "薝", 6, "薥薦薧薩薫薬薭薱", 5, "薸薺", 6, "藂", 6, "藊", 4, "藑藒"], ["cb80", "藔藖", 5, "藝", 6, "藥藦藧藨藪", 14, "恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"], ["cc40", "藹藺藼藽藾蘀", 4, "蘆", 10, "蘒蘓蘔蘕蘗", 15, "蘨蘪", 13, "蘹蘺蘻蘽蘾蘿虀"], ["cc80", "虁", 11, "虒虓處", 4, "虛虜虝號虠虡虣", 7, "獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"], ["cd40", "虭虯虰虲", 6, "蚃", 6, "蚎", 4, "蚔蚖", 5, "蚞", 4, "蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻", 4, "蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"], ["cd80", "蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"], ["ce40", "蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀", 6, "蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚", 5, "蝡蝢蝦", 7, "蝯蝱蝲蝳蝵"], ["ce80", "蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎", 4, "螔螕螖螘", 6, "螠", 4, "巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"], ["cf40", "螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁", 4, "蟇蟈蟉蟌", 4, "蟔", 6, "蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯", 9], ["cf80", "蟺蟻蟼蟽蟿蠀蠁蠂蠄", 5, "蠋", 7, "蠔蠗蠘蠙蠚蠜", 4, "蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"], ["d040", "蠤", 13, "蠳", 5, "蠺蠻蠽蠾蠿衁衂衃衆", 5, "衎", 5, "衕衖衘衚", 6, "衦衧衪衭衯衱衳衴衵衶衸衹衺"], ["d080", "衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗", 4, "袝", 4, "袣袥", 5, "小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"], ["d140", "袬袮袯袰袲", 4, "袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚", 4, "裠裡裦裧裩", 6, "裲裵裶裷裺裻製裿褀褁褃", 5], ["d180", "褉褋", 4, "褑褔", 4, "褜", 4, "褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"], ["d240", "褸", 8, "襂襃襅", 24, "襠", 5, "襧", 19, "襼"], ["d280", "襽襾覀覂覄覅覇", 26, "摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"], ["d340", "覢", 30, "觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴", 6], ["d380", "觻", 4, "訁", 5, "計", 21, "印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"], ["d440", "訞", 31, "訿", 8, "詉", 21], ["d480", "詟", 25, "詺", 6, "浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"], ["d540", "誁", 7, "誋", 7, "誔", 46], ["d580", "諃", 32, "铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"], ["d640", "諤", 34, "謈", 27], ["d680", "謤謥謧", 30, "帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"], ["d740", "譆", 31, "譧", 4, "譭", 25], ["d780", "讇", 24, "讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"], ["d840", "谸", 8, "豂豃豄豅豈豊豋豍", 7, "豖豗豘豙豛", 5, "豣", 6, "豬", 6, "豴豵豶豷豻", 6, "貃貄貆貇"], ["d880", "貈貋貍", 6, "貕貖貗貙", 20, "亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"], ["d940", "貮", 62], ["d980", "賭", 32, "佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"], ["da40", "贎", 14, "贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸", 8, "趂趃趆趇趈趉趌", 4, "趒趓趕", 9, "趠趡"], ["da80", "趢趤", 12, "趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"], ["db40", "跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾", 6, "踆踇踈踋踍踎踐踑踒踓踕", 7, "踠踡踤", 4, "踫踭踰踲踳踴踶踷踸踻踼踾"], ["db80", "踿蹃蹅蹆蹌", 4, "蹓", 5, "蹚", 11, "蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"], ["dc40", "蹳蹵蹷", 4, "蹽蹾躀躂躃躄躆躈", 6, "躑躒躓躕", 6, "躝躟", 11, "躭躮躰躱躳", 6, "躻", 7], ["dc80", "軃", 10, "軏", 21, "堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"], ["dd40", "軥", 62], ["dd80", "輤", 32, "荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"], ["de40", "轅", 32, "轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"], ["de80", "迉", 4, "迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"], ["df40", "這逜連逤逥逧", 5, "逰", 4, "逷逹逺逽逿遀遃遅遆遈", 4, "過達違遖遙遚遜", 5, "遤遦遧適遪遫遬遯", 4, "遶", 6, "遾邁"], ["df80", "還邅邆邇邉邊邌", 4, "邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"], ["e040", "郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅", 19, "鄚鄛鄜"], ["e080", "鄝鄟鄠鄡鄤", 10, "鄰鄲", 6, "鄺", 8, "酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"], ["e140", "酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀", 4, "醆醈醊醎醏醓", 6, "醜", 5, "醤", 5, "醫醬醰醱醲醳醶醷醸醹醻"], ["e180", "醼", 10, "釈釋釐釒", 9, "針", 8, "帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"], ["e240", "釦", 62], ["e280", "鈥", 32, "狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧", 5, "饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"], ["e340", "鉆", 45, "鉵", 16], ["e380", "銆", 7, "銏", 24, "恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"], ["e440", "銨", 5, "銯", 24, "鋉", 31], ["e480", "鋩", 32, "洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"], ["e540", "錊", 51, "錿", 10], ["e580", "鍊", 31, "鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"], ["e640", "鍬", 34, "鎐", 27], ["e680", "鎬", 29, "鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"], ["e740", "鏎", 7, "鏗", 54], ["e780", "鐎", 32, "纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡", 6, "缪缫缬缭缯", 4, "缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"], ["e840", "鐯", 14, "鐿", 43, "鑬鑭鑮鑯"], ["e880", "鑰", 20, "钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"], ["e940", "锧锳锽镃镈镋镕镚镠镮镴镵長", 7, "門", 42], ["e980", "閫", 32, "椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"], ["ea40", "闌", 27, "闬闿阇阓阘阛阞阠阣", 6, "阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"], ["ea80", "陘陙陚陜陝陞陠陣陥陦陫陭", 4, "陳陸", 12, "隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"], ["eb40", "隌階隑隒隓隕隖隚際隝", 9, "隨", 7, "隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖", 9, "雡", 6, "雫"], ["eb80", "雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗", 4, "霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"], ["ec40", "霡", 8, "霫霬霮霯霱霳", 4, "霺霻霼霽霿", 18, "靔靕靗靘靚靜靝靟靣靤靦靧靨靪", 7], ["ec80", "靲靵靷", 4, "靽", 7, "鞆", 4, "鞌鞎鞏鞐鞓鞕鞖鞗鞙", 4, "臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"], ["ed40", "鞞鞟鞡鞢鞤", 6, "鞬鞮鞰鞱鞳鞵", 46], ["ed80", "韤韥韨韮", 4, "韴韷", 23, "怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"], ["ee40", "頏", 62], ["ee80", "顎", 32, "睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶", 4, "钼钽钿铄铈", 6, "铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"], ["ef40", "顯", 5, "颋颎颒颕颙颣風", 37, "飏飐飔飖飗飛飜飝飠", 4], ["ef80", "飥飦飩", 30, "铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒", 4, "锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤", 8, "镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"], ["f040", "餈", 4, "餎餏餑", 28, "餯", 26], ["f080", "饊", 9, "饖", 12, "饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨", 4, "鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦", 6, "鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"], ["f140", "馌馎馚", 10, "馦馧馩", 47], ["f180", "駙", 32, "瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"], ["f240", "駺", 62], ["f280", "騹", 32, "颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"], ["f340", "驚", 17, "驲骃骉骍骎骔骕骙骦骩", 6, "骲骳骴骵骹骻骽骾骿髃髄髆", 4, "髍髎髏髐髒體髕髖髗髙髚髛髜"], ["f380", "髝髞髠髢髣髤髥髧髨髩髪髬髮髰", 8, "髺髼", 6, "鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"], ["f440", "鬇鬉", 5, "鬐鬑鬒鬔", 10, "鬠鬡鬢鬤", 10, "鬰鬱鬳", 7, "鬽鬾鬿魀魆魊魋魌魎魐魒魓魕", 5], ["f480", "魛", 32, "簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"], ["f540", "魼", 62], ["f580", "鮻", 32, "酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"], ["f640", "鯜", 62], ["f680", "鰛", 32, "觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅", 5, "龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞", 5, "鲥", 4, "鲫鲭鲮鲰", 7, "鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"], ["f740", "鰼", 62], ["f780", "鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾", 4, "鳈鳉鳑鳒鳚鳛鳠鳡鳌", 4, "鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"], ["f840", "鳣", 62], ["f880", "鴢", 32], ["f940", "鵃", 62], ["f980", "鶂", 32], ["fa40", "鶣", 62], ["fa80", "鷢", 32], ["fb40", "鸃", 27, "鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴", 9, "麀"], ["fb80", "麁麃麄麅麆麉麊麌", 5, "麔", 8, "麞麠", 5, "麧麨麩麪"], ["fc40", "麫", 8, "麵麶麷麹麺麼麿", 4, "黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰", 8, "黺黽黿", 6], ["fc80", "鼆", 4, "鼌鼏鼑鼒鼔鼕鼖鼘鼚", 5, "鼡鼣", 8, "鼭鼮鼰鼱"], ["fd40", "鼲", 4, "鼸鼺鼼鼿", 4, "齅", 10, "齒", 38], ["fd80", "齹", 5, "龁龂龍", 11, "龜龝龞龡", 4, "郎凉秊裏隣"], ["fe40", "兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"] ]; }); // node_modules/iconv-lite/encodings/tables/gbk-added.json var require_gbk_added = __commonJS((exports, module) => { module.exports = [ ["a140", "", 62], ["a180", "", 32], ["a240", "", 62], ["a280", "", 32], ["a2ab", "", 5], ["a2e3", "€"], ["a2ef", ""], ["a2fd", ""], ["a340", "", 62], ["a380", "", 31, " "], ["a440", "", 62], ["a480", "", 32], ["a4f4", "", 10], ["a540", "", 62], ["a580", "", 32], ["a5f7", "", 7], ["a640", "", 62], ["a680", "", 32], ["a6b9", "", 7], ["a6d9", "", 6], ["a6ec", ""], ["a6f3", ""], ["a6f6", "", 8], ["a740", "", 62], ["a780", "", 32], ["a7c2", "", 14], ["a7f2", "", 12], ["a896", "", 10], ["a8bc", ""], ["a8bf", "ǹ"], ["a8c1", ""], ["a8ea", "", 20], ["a958", ""], ["a95b", ""], ["a95d", ""], ["a989", "〾⿰", 11], ["a997", "", 12], ["a9f0", "", 14], ["aaa1", "", 93], ["aba1", "", 93], ["aca1", "", 93], ["ada1", "", 93], ["aea1", "", 93], ["afa1", "", 93], ["d7fa", "", 4], ["f8a1", "", 93], ["f9a1", "", 93], ["faa1", "", 93], ["fba1", "", 93], ["fca1", "", 93], ["fda1", "", 93], ["fe50", "⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"], ["fe80", "䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓", 6, "䶮", 93] ]; }); // node_modules/iconv-lite/encodings/tables/gb18030-ranges.json var require_gb18030_ranges = __commonJS((exports, module) => { module.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189000] }; }); // node_modules/iconv-lite/encodings/tables/cp949.json var require_cp949 = __commonJS((exports, module) => { module.exports = [ ["0", "\x00", 127], ["8141", "갂갃갅갆갋", 4, "갘갞갟갡갢갣갥", 6, "갮갲갳갴"], ["8161", "갵갶갷갺갻갽갾갿걁", 9, "걌걎", 5, "걕"], ["8181", "걖걗걙걚걛걝", 18, "걲걳걵걶걹걻", 4, "겂겇겈겍겎겏겑겒겓겕", 6, "겞겢", 5, "겫겭겮겱", 6, "겺겾겿곀곂곃곅곆곇곉곊곋곍", 7, "곖곘", 7, "곢곣곥곦곩곫곭곮곲곴곷", 4, "곾곿괁괂괃괅괇", 4, "괎괐괒괓"], ["8241", "괔괕괖괗괙괚괛괝괞괟괡", 7, "괪괫괮", 5], ["8261", "괶괷괹괺괻괽", 6, "굆굈굊", 5, "굑굒굓굕굖굗"], ["8281", "굙", 7, "굢굤", 7, "굮굯굱굲굷굸굹굺굾궀궃", 4, "궊궋궍궎궏궑", 10, "궞", 5, "궥", 17, "궸", 7, "귂귃귅귆귇귉", 6, "귒귔", 7, "귝귞귟귡귢귣귥", 18], ["8341", "귺귻귽귾긂", 5, "긊긌긎", 5, "긕", 7], ["8361", "긝", 18, "긲긳긵긶긹긻긼"], ["8381", "긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗", 4, "깞깢깣깤깦깧깪깫깭깮깯깱", 6, "깺깾", 5, "꺆", 5, "꺍", 46, "꺿껁껂껃껅", 6, "껎껒", 5, "껚껛껝", 8], ["8441", "껦껧껩껪껬껮", 5, "껵껶껷껹껺껻껽", 8], ["8461", "꼆꼉꼊꼋꼌꼎꼏꼑", 18], ["8481", "꼤", 7, "꼮꼯꼱꼳꼵", 6, "꼾꽀꽄꽅꽆꽇꽊", 5, "꽑", 10, "꽞", 5, "꽦", 18, "꽺", 5, "꾁꾂꾃꾅꾆꾇꾉", 6, "꾒꾓꾔꾖", 5, "꾝", 26, "꾺꾻꾽꾾"], ["8541", "꾿꿁", 5, "꿊꿌꿏", 4, "꿕", 6, "꿝", 4], ["8561", "꿢", 5, "꿪", 5, "꿲꿳꿵꿶꿷꿹", 6, "뀂뀃"], ["8581", "뀅", 6, "뀍뀎뀏뀑뀒뀓뀕", 6, "뀞", 9, "뀩", 26, "끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞", 29, "끾끿낁낂낃낅", 6, "낎낐낒", 5, "낛낝낞낣낤"], ["8641", "낥낦낧낪낰낲낶낷낹낺낻낽", 6, "냆냊", 5, "냒"], ["8661", "냓냕냖냗냙", 6, "냡냢냣냤냦", 10], ["8681", "냱", 22, "넊넍넎넏넑넔넕넖넗넚넞", 4, "넦넧넩넪넫넭", 6, "넶넺", 5, "녂녃녅녆녇녉", 6, "녒녓녖녗녙녚녛녝녞녟녡", 22, "녺녻녽녾녿놁놃", 4, "놊놌놎놏놐놑놕놖놗놙놚놛놝"], ["8741", "놞", 9, "놩", 15], ["8761", "놹", 18, "뇍뇎뇏뇑뇒뇓뇕"], ["8781", "뇖", 5, "뇞뇠", 7, "뇪뇫뇭뇮뇯뇱", 7, "뇺뇼뇾", 5, "눆눇눉눊눍", 6, "눖눘눚", 5, "눡", 18, "눵", 6, "눽", 26, "뉙뉚뉛뉝뉞뉟뉡", 6, "뉪", 4], ["8841", "뉯", 4, "뉶", 5, "뉽", 6, "늆늇늈늊", 4], ["8861", "늏늒늓늕늖늗늛", 4, "늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"], ["8881", "늸", 15, "닊닋닍닎닏닑닓", 4, "닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉", 6, "댒댖", 5, "댝", 54, "덗덙덚덝덠덡덢덣"], ["8941", "덦덨덪덬덭덯덲덳덵덶덷덹", 6, "뎂뎆", 5, "뎍"], ["8961", "뎎뎏뎑뎒뎓뎕", 10, "뎢", 5, "뎩뎪뎫뎭"], ["8981", "뎮", 21, "돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩", 18, "돽", 18, "됑", 6, "됙됚됛됝됞됟됡", 6, "됪됬", 7, "됵", 15], ["8a41", "둅", 10, "둒둓둕둖둗둙", 6, "둢둤둦"], ["8a61", "둧", 4, "둭", 18, "뒁뒂"], ["8a81", "뒃", 4, "뒉", 19, "뒞", 5, "뒥뒦뒧뒩뒪뒫뒭", 7, "뒶뒸뒺", 5, "듁듂듃듅듆듇듉", 6, "듑듒듓듔듖", 5, "듞듟듡듢듥듧", 4, "듮듰듲", 5, "듹", 26, "딖딗딙딚딝"], ["8b41", "딞", 5, "딦딫", 4, "딲딳딵딶딷딹", 6, "땂땆"], ["8b61", "땇땈땉땊땎땏땑땒땓땕", 6, "땞땢", 8], ["8b81", "땫", 52, "떢떣떥떦떧떩떬떭떮떯떲떶", 4, "떾떿뗁뗂뗃뗅", 6, "뗎뗒", 5, "뗙", 18, "뗭", 18], ["8c41", "똀", 15, "똒똓똕똖똗똙", 4], ["8c61", "똞", 6, "똦", 5, "똭", 6, "똵", 5], ["8c81", "똻", 12, "뙉", 26, "뙥뙦뙧뙩", 50, "뚞뚟뚡뚢뚣뚥", 5, "뚭뚮뚯뚰뚲", 16], ["8d41", "뛃", 16, "뛕", 8], ["8d61", "뛞", 17, "뛱뛲뛳뛵뛶뛷뛹뛺"], ["8d81", "뛻", 4, "뜂뜃뜄뜆", 33, "뜪뜫뜭뜮뜱", 6, "뜺뜼", 7, "띅띆띇띉띊띋띍", 6, "띖", 9, "띡띢띣띥띦띧띩", 6, "띲띴띶", 5, "띾띿랁랂랃랅", 6, "랎랓랔랕랚랛랝랞"], ["8e41", "랟랡", 6, "랪랮", 5, "랶랷랹", 8], ["8e61", "럂", 4, "럈럊", 19], ["8e81", "럞", 13, "럮럯럱럲럳럵", 6, "럾렂", 4, "렊렋렍렎렏렑", 6, "렚렜렞", 5, "렦렧렩렪렫렭", 6, "렶렺", 5, "롁롂롃롅", 11, "롒롔", 7, "롞롟롡롢롣롥", 6, "롮롰롲", 5, "롹롺롻롽", 7], ["8f41", "뢅", 7, "뢎", 17], ["8f61", "뢠", 7, "뢩", 6, "뢱뢲뢳뢵뢶뢷뢹", 4], ["8f81", "뢾뢿룂룄룆", 5, "룍룎룏룑룒룓룕", 7, "룞룠룢", 5, "룪룫룭룮룯룱", 6, "룺룼룾", 5, "뤅", 18, "뤙", 6, "뤡", 26, "뤾뤿륁륂륃륅", 6, "륍륎륐륒", 5], ["9041", "륚륛륝륞륟륡", 6, "륪륬륮", 5, "륶륷륹륺륻륽"], ["9061", "륾", 5, "릆릈릋릌릏", 15], ["9081", "릟", 12, "릮릯릱릲릳릵", 6, "릾맀맂", 5, "맊맋맍맓", 4, "맚맜맟맠맢맦맧맩맪맫맭", 6, "맶맻", 4, "먂", 5, "먉", 11, "먖", 33, "먺먻먽먾먿멁멃멄멅멆"], ["9141", "멇멊멌멏멐멑멒멖멗멙멚멛멝", 6, "멦멪", 5], ["9161", "멲멳멵멶멷멹", 9, "몆몈몉몊몋몍", 5], ["9181", "몓", 20, "몪몭몮몯몱몳", 4, "몺몼몾", 5, "뫅뫆뫇뫉", 14, "뫚", 33, "뫽뫾뫿묁묂묃묅", 7, "묎묐묒", 5, "묙묚묛묝묞묟묡", 6], ["9241", "묨묪묬", 7, "묷묹묺묿", 4, "뭆뭈뭊뭋뭌뭎뭑뭒"], ["9261", "뭓뭕뭖뭗뭙", 7, "뭢뭤", 7, "뭭", 4], ["9281", "뭲", 21, "뮉뮊뮋뮍뮎뮏뮑", 18, "뮥뮦뮧뮩뮪뮫뮭", 6, "뮵뮶뮸", 7, "믁믂믃믅믆믇믉", 6, "믑믒믔", 35, "믺믻믽믾밁"], ["9341", "밃", 4, "밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"], ["9361", "밶밷밹", 6, "뱂뱆뱇뱈뱊뱋뱎뱏뱑", 8], ["9381", "뱚뱛뱜뱞", 37, "벆벇벉벊벍벏", 4, "벖벘벛", 4, "벢벣벥벦벩", 6, "벲벶", 5, "벾벿볁볂볃볅", 7, "볎볒볓볔볖볗볙볚볛볝", 22, "볷볹볺볻볽"], ["9441", "볾", 5, "봆봈봊", 5, "봑봒봓봕", 8], ["9461", "봞", 5, "봥", 6, "봭", 12], ["9481", "봺", 5, "뵁", 6, "뵊뵋뵍뵎뵏뵑", 6, "뵚", 9, "뵥뵦뵧뵩", 22, "붂붃붅붆붋", 4, "붒붔붖붗붘붛붝", 6, "붥", 10, "붱", 6, "붹", 24], ["9541", "뷒뷓뷖뷗뷙뷚뷛뷝", 11, "뷪", 5, "뷱"], ["9561", "뷲뷳뷵뷶뷷뷹", 6, "븁븂븄븆", 5, "븎븏븑븒븓"], ["9581", "븕", 6, "븞븠", 35, "빆빇빉빊빋빍빏", 4, "빖빘빜빝빞빟빢빣빥빦빧빩빫", 4, "빲빶", 4, "빾빿뺁뺂뺃뺅", 6, "뺎뺒", 5, "뺚", 13, "뺩", 14], ["9641", "뺸", 23, "뻒뻓"], ["9661", "뻕뻖뻙", 6, "뻡뻢뻦", 5, "뻭", 8], ["9681", "뻶", 10, "뼂", 5, "뼊", 13, "뼚뼞", 33, "뽂뽃뽅뽆뽇뽉", 6, "뽒뽓뽔뽖", 44], ["9741", "뾃", 16, "뾕", 8], ["9761", "뾞", 17, "뾱", 7], ["9781", "뾹", 11, "뿆", 5, "뿎뿏뿑뿒뿓뿕", 6, "뿝뿞뿠뿢", 89, "쀽쀾쀿"], ["9841", "쁀", 16, "쁒", 5, "쁙쁚쁛"], ["9861", "쁝쁞쁟쁡", 6, "쁪", 15], ["9881", "쁺", 21, "삒삓삕삖삗삙", 6, "삢삤삦", 5, "삮삱삲삷", 4, "삾샂샃샄샆샇샊샋샍샎샏샑", 6, "샚샞", 5, "샦샧샩샪샫샭", 6, "샶샸샺", 5, "섁섂섃섅섆섇섉", 6, "섑섒섓섔섖", 5, "섡섢섥섨섩섪섫섮"], ["9941", "섲섳섴섵섷섺섻섽섾섿셁", 6, "셊셎", 5, "셖셗"], ["9961", "셙셚셛셝", 6, "셦셪", 5, "셱셲셳셵셶셷셹셺셻"], ["9981", "셼", 8, "솆", 5, "솏솑솒솓솕솗", 4, "솞솠솢솣솤솦솧솪솫솭솮솯솱", 11, "솾", 5, "쇅쇆쇇쇉쇊쇋쇍", 6, "쇕쇖쇙", 6, "쇡쇢쇣쇥쇦쇧쇩", 6, "쇲쇴", 7, "쇾쇿숁숂숃숅", 6, "숎숐숒", 5, "숚숛숝숞숡숢숣"], ["9a41", "숤숥숦숧숪숬숮숰숳숵", 16], ["9a61", "쉆쉇쉉", 6, "쉒쉓쉕쉖쉗쉙", 6, "쉡쉢쉣쉤쉦"], ["9a81", "쉧", 4, "쉮쉯쉱쉲쉳쉵", 6, "쉾슀슂", 5, "슊", 5, "슑", 6, "슙슚슜슞", 5, "슦슧슩슪슫슮", 5, "슶슸슺", 33, "싞싟싡싢싥", 5, "싮싰싲싳싴싵싷싺싽싾싿쌁", 6, "쌊쌋쌎쌏"], ["9b41", "쌐쌑쌒쌖쌗쌙쌚쌛쌝", 6, "쌦쌧쌪", 8], ["9b61", "쌳", 17, "썆", 7], ["9b81", "썎", 25, "썪썫썭썮썯썱썳", 4, "썺썻썾", 5, "쎅쎆쎇쎉쎊쎋쎍", 50, "쏁", 22, "쏚"], ["9c41", "쏛쏝쏞쏡쏣", 4, "쏪쏫쏬쏮", 5, "쏶쏷쏹", 5], ["9c61", "쏿", 8, "쐉", 6, "쐑", 9], ["9c81", "쐛", 8, "쐥", 6, "쐭쐮쐯쐱쐲쐳쐵", 6, "쐾", 9, "쑉", 26, "쑦쑧쑩쑪쑫쑭", 6, "쑶쑷쑸쑺", 5, "쒁", 18, "쒕", 6, "쒝", 12], ["9d41", "쒪", 13, "쒹쒺쒻쒽", 8], ["9d61", "쓆", 25], ["9d81", "쓠", 8, "쓪", 5, "쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂", 9, "씍씎씏씑씒씓씕", 6, "씝", 10, "씪씫씭씮씯씱", 6, "씺씼씾", 5, "앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩", 6, "앲앶", 5, "앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"], ["9e41", "얖얙얚얛얝얞얟얡", 7, "얪", 9, "얶"], ["9e61", "얷얺얿", 4, "엋엍엏엒엓엕엖엗엙", 6, "엢엤엦엧"], ["9e81", "엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑", 6, "옚옝", 6, "옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉", 6, "왒왖", 5, "왞왟왡", 10, "왭왮왰왲", 5, "왺왻왽왾왿욁", 6, "욊욌욎", 5, "욖욗욙욚욛욝", 6, "욦"], ["9f41", "욨욪", 5, "욲욳욵욶욷욻", 4, "웂웄웆", 5, "웎"], ["9f61", "웏웑웒웓웕", 6, "웞웟웢", 5, "웪웫웭웮웯웱웲"], ["9f81", "웳", 4, "웺웻웼웾", 5, "윆윇윉윊윋윍", 6, "윖윘윚", 5, "윢윣윥윦윧윩", 6, "윲윴윶윸윹윺윻윾윿읁읂읃읅", 4, "읋읎읐읙읚읛읝읞읟읡", 6, "읩읪읬", 7, "읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛", 4, "잢잧", 4, "잮잯잱잲잳잵잶잷"], ["a041", "잸잹잺잻잾쟂", 5, "쟊쟋쟍쟏쟑", 6, "쟙쟚쟛쟜"], ["a061", "쟞", 5, "쟥쟦쟧쟩쟪쟫쟭", 13], ["a081", "쟻", 4, "젂젃젅젆젇젉젋", 4, "젒젔젗", 4, "젞젟젡젢젣젥", 6, "젮젰젲", 5, "젹젺젻젽젾젿졁", 6, "졊졋졎", 5, "졕", 26, "졲졳졵졶졷졹졻", 4, "좂좄좈좉좊좎", 5, "좕", 7, "좞좠좢좣좤"], ["a141", "좥좦좧좩", 18, "좾좿죀죁"], ["a161", "죂죃죅죆죇죉죊죋죍", 6, "죖죘죚", 5, "죢죣죥"], ["a181", "죦", 14, "죶", 5, "죾죿줁줂줃줇", 4, "줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈", 9, "±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"], ["a241", "줐줒", 5, "줙", 18], ["a261", "줭", 6, "줵", 18], ["a281", "쥈", 7, "쥒쥓쥕쥖쥗쥙", 6, "쥢쥤", 7, "쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"], ["a341", "쥱쥲쥳쥵", 6, "쥽", 10, "즊즋즍즎즏"], ["a361", "즑", 6, "즚즜즞", 16], ["a381", "즯", 16, "짂짃짅짆짉짋", 4, "짒짔짗짘짛!", 58, "₩]", 32, " ̄"], ["a441", "짞짟짡짣짥짦짨짩짪짫짮짲", 5, "짺짻짽짾짿쨁쨂쨃쨄"], ["a461", "쨅쨆쨇쨊쨎", 5, "쨕쨖쨗쨙", 12], ["a481", "쨦쨧쨨쨪", 28, "ㄱ", 93], ["a541", "쩇", 4, "쩎쩏쩑쩒쩓쩕", 6, "쩞쩢", 5, "쩩쩪"], ["a561", "쩫", 17, "쩾", 5, "쪅쪆"], ["a581", "쪇", 16, "쪙", 14, "ⅰ", 9], ["a5b0", "Ⅰ", 9], ["a5c1", "Α", 16, "Σ", 6], ["a5e1", "α", 16, "σ", 6], ["a641", "쪨", 19, "쪾쪿쫁쫂쫃쫅"], ["a661", "쫆", 5, "쫎쫐쫒쫔쫕쫖쫗쫚", 5, "쫡", 6], ["a681", "쫨쫩쫪쫫쫭", 6, "쫵", 18, "쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃", 7], ["a741", "쬋", 4, "쬑쬒쬓쬕쬖쬗쬙", 6, "쬢", 7], ["a761", "쬪", 22, "쭂쭃쭄"], ["a781", "쭅쭆쭇쭊쭋쭍쭎쭏쭑", 6, "쭚쭛쭜쭞", 5, "쭥", 7, "㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙", 9, "㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰", 9, "㎀", 4, "㎺", 5, "㎐", 4, "Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"], ["a841", "쭭", 10, "쭺", 14], ["a861", "쮉", 18, "쮝", 6], ["a881", "쮤", 19, "쮹", 11, "ÆÐªĦ"], ["a8a6", "IJ"], ["a8a8", "ĿŁØŒºÞŦŊ"], ["a8b1", "㉠", 27, "ⓐ", 25, "①", 14, "½⅓⅔¼¾⅛⅜⅝⅞"], ["a941", "쯅", 14, "쯕", 10], ["a961", "쯠쯡쯢쯣쯥쯦쯨쯪", 18], ["a981", "쯽", 14, "찎찏찑찒찓찕", 6, "찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀", 27, "⒜", 25, "⑴", 14, "¹²³⁴ⁿ₁₂₃₄"], ["aa41", "찥찦찪찫찭찯찱", 6, "찺찿", 4, "챆챇챉챊챋챍챎"], ["aa61", "챏", 4, "챖챚", 5, "챡챢챣챥챧챩", 6, "챱챲"], ["aa81", "챳챴챶", 29, "ぁ", 82], ["ab41", "첔첕첖첗첚첛첝첞첟첡", 6, "첪첮", 5, "첶첷첹"], ["ab61", "첺첻첽", 6, "쳆쳈쳊", 5, "쳑쳒쳓쳕", 5], ["ab81", "쳛", 8, "쳥", 6, "쳭쳮쳯쳱", 12, "ァ", 85], ["ac41", "쳾쳿촀촂", 5, "촊촋촍촎촏촑", 6, "촚촜촞촟촠"], ["ac61", "촡촢촣촥촦촧촩촪촫촭", 11, "촺", 4], ["ac81", "촿", 28, "쵝쵞쵟А", 5, "ЁЖ", 25], ["acd1", "а", 5, "ёж", 25], ["ad41", "쵡쵢쵣쵥", 6, "쵮쵰쵲", 5, "쵹", 7], ["ad61", "춁", 6, "춉", 10, "춖춗춙춚춛춝춞춟"], ["ad81", "춠춡춢춣춦춨춪", 5, "춱", 18, "췅"], ["ae41", "췆", 5, "췍췎췏췑", 16], ["ae61", "췢", 5, "췩췪췫췭췮췯췱", 6, "췺췼췾", 4], ["ae81", "츃츅츆츇츉츊츋츍", 6, "츕츖츗츘츚", 5, "츢츣츥츦츧츩츪츫"], ["af41", "츬츭츮츯츲츴츶", 19], ["af61", "칊", 13, "칚칛칝칞칢", 5, "칪칬"], ["af81", "칮", 5, "칶칷칹칺칻칽", 6, "캆캈캊", 5, "캒캓캕캖캗캙"], ["b041", "캚", 5, "캢캦", 5, "캮", 12], ["b061", "캻", 5, "컂", 19], ["b081", "컖", 13, "컦컧컩컪컭", 6, "컶컺", 5, "가각간갇갈갉갊감", 7, "같", 4, "갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"], ["b141", "켂켃켅켆켇켉", 6, "켒켔켖", 5, "켝켞켟켡켢켣"], ["b161", "켥", 6, "켮켲", 5, "켹", 11], ["b181", "콅", 14, "콖콗콙콚콛콝", 6, "콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"], ["b241", "콭콮콯콲콳콵콶콷콹", 6, "쾁쾂쾃쾄쾆", 5, "쾍"], ["b261", "쾎", 18, "쾢", 5, "쾩"], ["b281", "쾪", 5, "쾱", 18, "쿅", 6, "깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"], ["b341", "쿌", 19, "쿢쿣쿥쿦쿧쿩"], ["b361", "쿪", 5, "쿲쿴쿶", 5, "쿽쿾쿿퀁퀂퀃퀅", 5], ["b381", "퀋", 5, "퀒", 5, "퀙", 19, "끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫", 4, "낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"], ["b441", "퀮", 5, "퀶퀷퀹퀺퀻퀽", 6, "큆큈큊", 5], ["b461", "큑큒큓큕큖큗큙", 6, "큡", 10, "큮큯"], ["b481", "큱큲큳큵", 6, "큾큿킀킂", 18, "뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫", 4, "닳담답닷", 4, "닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"], ["b541", "킕", 14, "킦킧킩킪킫킭", 5], ["b561", "킳킶킸킺", 5, "탂탃탅탆탇탊", 5, "탒탖", 4], ["b581", "탛탞탟탡탢탣탥", 6, "탮탲", 5, "탹", 11, "덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"], ["b641", "턅", 7, "턎", 17], ["b661", "턠", 15, "턲턳턵턶턷턹턻턼턽턾"], ["b681", "턿텂텆", 5, "텎텏텑텒텓텕", 6, "텞텠텢", 5, "텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"], ["b741", "텮", 13, "텽", 6, "톅톆톇톉톊"], ["b761", "톋", 20, "톢톣톥톦톧"], ["b781", "톩", 6, "톲톴톶톷톸톹톻톽톾톿퇁", 14, "래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"], ["b841", "퇐", 7, "퇙", 17], ["b861", "퇫", 8, "퇵퇶퇷퇹", 13], ["b881", "툈툊", 5, "툑", 24, "륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많", 4, "맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"], ["b941", "툪툫툮툯툱툲툳툵", 6, "툾퉀퉂", 5, "퉉퉊퉋퉌"], ["b961", "퉍", 14, "퉝", 6, "퉥퉦퉧퉨"], ["b981", "퉩", 22, "튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바", 4, "받", 4, "밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"], ["ba41", "튍튎튏튒튓튔튖", 5, "튝튞튟튡튢튣튥", 6, "튭"], ["ba61", "튮튯튰튲", 5, "튺튻튽튾틁틃", 4, "틊틌", 5], ["ba81", "틒틓틕틖틗틙틚틛틝", 6, "틦", 9, "틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"], ["bb41", "틻", 4, "팂팄팆", 5, "팏팑팒팓팕팗", 4, "팞팢팣"], ["bb61", "팤팦팧팪팫팭팮팯팱", 6, "팺팾", 5, "퍆퍇퍈퍉"], ["bb81", "퍊", 31, "빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"], ["bc41", "퍪", 17, "퍾퍿펁펂펃펅펆펇"], ["bc61", "펈펉펊펋펎펒", 5, "펚펛펝펞펟펡", 6, "펪펬펮"], ["bc81", "펯", 4, "펵펶펷펹펺펻펽", 6, "폆폇폊", 5, "폑", 5, "샥샨샬샴샵샷샹섀섄섈섐섕서", 4, "섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"], ["bd41", "폗폙", 7, "폢폤", 7, "폮폯폱폲폳폵폶폷"], ["bd61", "폸폹폺폻폾퐀퐂", 5, "퐉", 13], ["bd81", "퐗", 5, "퐞", 25, "숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"], ["be41", "퐸", 7, "푁푂푃푅", 14], ["be61", "푔", 7, "푝푞푟푡푢푣푥", 7, "푮푰푱푲"], ["be81", "푳", 4, "푺푻푽푾풁풃", 4, "풊풌풎", 5, "풕", 8, "쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄", 6, "엌엎"], ["bf41", "풞", 10, "풪", 14], ["bf61", "풹", 18, "퓍퓎퓏퓑퓒퓓퓕"], ["bf81", "퓖", 5, "퓝퓞퓠", 7, "퓩퓪퓫퓭퓮퓯퓱", 6, "퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염", 5, "옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"], ["c041", "퓾", 5, "픅픆픇픉픊픋픍", 6, "픖픘", 5], ["c061", "픞", 25], ["c081", "픸픹픺픻픾픿핁핂핃핅", 6, "핎핐핒", 5, "핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응", 7, "읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"], ["c141", "핤핦핧핪핬핮", 5, "핶핷핹핺핻핽", 6, "햆햊햋"], ["c161", "햌햍햎햏햑", 19, "햦햧"], ["c181", "햨", 31, "점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"], ["c241", "헊헋헍헎헏헑헓", 4, "헚헜헞", 5, "헦헧헩헪헫헭헮"], ["c261", "헯", 4, "헶헸헺", 5, "혂혃혅혆혇혉", 6, "혒"], ["c281", "혖", 5, "혝혞혟혡혢혣혥", 7, "혮", 9, "혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"], ["c341", "혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝", 4], ["c361", "홢", 4, "홨홪", 5, "홲홳홵", 11], ["c381", "횁횂횄횆", 5, "횎횏횑횒횓횕", 7, "횞횠횢", 5, "횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"], ["c441", "횫횭횮횯횱", 7, "횺횼", 7, "훆훇훉훊훋"], ["c461", "훍훎훏훐훒훓훕훖훘훚", 5, "훡훢훣훥훦훧훩", 4], ["c481", "훮훯훱훲훳훴훶", 5, "훾훿휁휂휃휅", 11, "휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"], ["c541", "휕휖휗휚휛휝휞휟휡", 6, "휪휬휮", 5, "휶휷휹"], ["c561", "휺휻휽", 6, "흅흆흈흊", 5, "흒흓흕흚", 4], ["c581", "흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵", 6, "흾흿힀힂", 5, "힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"], ["c641", "힍힎힏힑", 6, "힚힜힞", 5], ["c6a1", "퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"], ["c7a1", "퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"], ["c8a1", "혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"], ["caa1", "伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"], ["cba1", "匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"], ["cca1", "瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"], ["cda1", "棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"], ["cea1", "科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"], ["cfa1", "區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"], ["d0a1", "鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"], ["d1a1", "朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩", 5, "那樂", 4, "諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"], ["d2a1", "納臘蠟衲囊娘廊", 4, "乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧", 5, "駑魯", 10, "濃籠聾膿農惱牢磊腦賂雷尿壘", 7, "嫩訥杻紐勒", 5, "能菱陵尼泥匿溺多茶"], ["d3a1", "丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"], ["d4a1", "棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"], ["d5a1", "蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"], ["d6a1", "煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"], ["d7a1", "遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"], ["d8a1", "立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"], ["d9a1", "蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"], ["daa1", "汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"], ["dba1", "發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"], ["dca1", "碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"], ["dda1", "孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"], ["dea1", "脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"], ["dfa1", "傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"], ["e0a1", "胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"], ["e1a1", "聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"], ["e2a1", "戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"], ["e3a1", "嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"], ["e4a1", "沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"], ["e5a1", "櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"], ["e6a1", "旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"], ["e7a1", "簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"], ["e8a1", "烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"], ["e9a1", "窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"], ["eaa1", "運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"], ["eba1", "濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"], ["eca1", "議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"], ["eda1", "立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"], ["eea1", "障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"], ["efa1", "煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"], ["f0a1", "靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"], ["f1a1", "踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"], ["f2a1", "咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"], ["f3a1", "鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"], ["f4a1", "責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"], ["f5a1", "椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"], ["f6a1", "贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"], ["f7a1", "鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"], ["f8a1", "阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"], ["f9a1", "品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"], ["faa1", "行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"], ["fba1", "形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"], ["fca1", "禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"], ["fda1", "爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"] ]; }); // node_modules/iconv-lite/encodings/tables/cp950.json var require_cp950 = __commonJS((exports, module) => { module.exports = [ ["0", "\x00", 127], ["a140", " ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"], ["a1a1", "﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢", 4, "~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"], ["a240", "\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁", 7, "▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"], ["a2a1", "╮╰╯═╞╪╡◢◣◥◤╱╲╳0", 9, "Ⅰ", 9, "〡", 8, "十卄卅A", 25, "a", 21], ["a340", "wxyzΑ", 16, "Σ", 6, "α", 16, "σ", 6, "ㄅ", 10], ["a3a1", "ㄐ", 25, "˙ˉˊˇˋ"], ["a3e1", "€"], ["a440", "一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"], ["a4a1", "丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"], ["a540", "世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"], ["a5a1", "央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"], ["a640", "共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"], ["a6a1", "式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"], ["a740", "作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"], ["a7a1", "均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"], ["a840", "杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"], ["a8a1", "芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"], ["a940", "咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"], ["a9a1", "屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"], ["aa40", "昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"], ["aaa1", "炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"], ["ab40", "陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"], ["aba1", "哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"], ["ac40", "拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"], ["aca1", "活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"], ["ad40", "耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"], ["ada1", "迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"], ["ae40", "哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"], ["aea1", "恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"], ["af40", "浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"], ["afa1", "砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"], ["b040", "虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"], ["b0a1", "陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"], ["b140", "娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"], ["b1a1", "情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"], ["b240", "毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"], ["b2a1", "瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"], ["b340", "莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"], ["b3a1", "部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"], ["b440", "婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"], ["b4a1", "插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"], ["b540", "溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"], ["b5a1", "窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"], ["b640", "詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"], ["b6a1", "間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"], ["b740", "媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"], ["b7a1", "楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"], ["b840", "睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"], ["b8a1", "腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"], ["b940", "辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"], ["b9a1", "飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"], ["ba40", "愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"], ["baa1", "滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"], ["bb40", "罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"], ["bba1", "說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"], ["bc40", "劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"], ["bca1", "慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"], ["bd40", "瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"], ["bda1", "翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"], ["be40", "輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"], ["bea1", "鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"], ["bf40", "濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"], ["bfa1", "縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"], ["c040", "錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"], ["c0a1", "嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"], ["c140", "瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"], ["c1a1", "薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"], ["c240", "駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"], ["c2a1", "癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"], ["c340", "鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"], ["c3a1", "獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"], ["c440", "願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"], ["c4a1", "纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"], ["c540", "護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"], ["c5a1", "禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"], ["c640", "讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"], ["c940", "乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"], ["c9a1", "氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"], ["ca40", "汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"], ["caa1", "吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"], ["cb40", "杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"], ["cba1", "芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"], ["cc40", "坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"], ["cca1", "怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"], ["cd40", "泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"], ["cda1", "矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"], ["ce40", "哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"], ["cea1", "峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"], ["cf40", "柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"], ["cfa1", "洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"], ["d040", "穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"], ["d0a1", "苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"], ["d140", "唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"], ["d1a1", "恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"], ["d240", "毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"], ["d2a1", "牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"], ["d340", "笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"], ["d3a1", "荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"], ["d440", "酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"], ["d4a1", "唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"], ["d540", "崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"], ["d5a1", "捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"], ["d640", "淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"], ["d6a1", "痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"], ["d740", "耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"], ["d7a1", "蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"], ["d840", "釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"], ["d8a1", "堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"], ["d940", "惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"], ["d9a1", "晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"], ["da40", "湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"], ["daa1", "琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"], ["db40", "罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"], ["dba1", "菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"], ["dc40", "軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"], ["dca1", "隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"], ["dd40", "媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"], ["dda1", "搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"], ["de40", "毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"], ["dea1", "煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"], ["df40", "稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"], ["dfa1", "腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"], ["e040", "觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"], ["e0a1", "遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"], ["e140", "凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"], ["e1a1", "寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"], ["e240", "榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"], ["e2a1", "漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"], ["e340", "禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"], ["e3a1", "耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"], ["e440", "裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"], ["e4a1", "銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"], ["e540", "噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"], ["e5a1", "憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"], ["e640", "澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"], ["e6a1", "獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"], ["e740", "膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"], ["e7a1", "蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"], ["e840", "踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"], ["e8a1", "銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"], ["e940", "噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"], ["e9a1", "憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"], ["ea40", "澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"], ["eaa1", "瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"], ["eb40", "蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"], ["eba1", "諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"], ["ec40", "錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"], ["eca1", "魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"], ["ed40", "檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"], ["eda1", "瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"], ["ee40", "蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"], ["eea1", "謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"], ["ef40", "鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"], ["efa1", "鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"], ["f040", "璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"], ["f0a1", "臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"], ["f140", "蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"], ["f1a1", "鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"], ["f240", "徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"], ["f2a1", "礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"], ["f340", "譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"], ["f3a1", "鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"], ["f440", "嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"], ["f4a1", "禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"], ["f540", "鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"], ["f5a1", "鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"], ["f640", "蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"], ["f6a1", "騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"], ["f740", "糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"], ["f7a1", "驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"], ["f840", "讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"], ["f8a1", "齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"], ["f940", "纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"], ["f9a1", "龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"] ]; }); // node_modules/iconv-lite/encodings/tables/big5-added.json var require_big5_added = __commonJS((exports, module) => { module.exports = [ ["8740", "䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"], ["8767", "綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"], ["87a1", "𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"], ["8840", "㇀", 4, "𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"], ["88a1", "ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"], ["8940", "𪎩𡅅"], ["8943", "攊"], ["8946", "丽滝鵎釟"], ["894c", "𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"], ["89a1", "琑糼緍楆竉刧"], ["89ab", "醌碸酞肼"], ["89b0", "贋胶𠧧"], ["89b5", "肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"], ["89c1", "溚舾甙"], ["89c5", "䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"], ["8a40", "𧶄唥"], ["8a43", "𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"], ["8a64", "𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"], ["8a76", "䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"], ["8aa1", "𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"], ["8aac", "䠋𠆩㿺塳𢶍"], ["8ab2", "𤗈𠓼𦂗𠽌𠶖啹䂻䎺"], ["8abb", "䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"], ["8ac9", "𪘁𠸉𢫏𢳉"], ["8ace", "𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"], ["8adf", "𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"], ["8af6", "𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"], ["8b40", "𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"], ["8b55", "𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"], ["8ba1", "𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"], ["8bde", "𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"], ["8c40", "倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"], ["8ca1", "𣏹椙橃𣱣泿"], ["8ca7", "爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"], ["8cc9", "顨杫䉶圽"], ["8cce", "藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"], ["8ce6", "峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"], ["8d40", "𠮟"], ["8d42", "𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"], ["8da1", "㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"], ["8e40", "𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"], ["8ea1", "繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"], ["8f40", "蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"], ["8fa1", "𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"], ["9040", "趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"], ["90a1", "𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"], ["9140", "𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"], ["91a1", "鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"], ["9240", "𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"], ["92a1", "働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"], ["9340", "媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"], ["93a1", "摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"], ["9440", "銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"], ["94a1", "㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"], ["9540", "𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"], ["95a1", "衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"], ["9640", "桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"], ["96a1", "𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"], ["9740", "愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"], ["97a1", "𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"], ["9840", "𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"], ["98a1", "咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"], ["9940", "䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"], ["99a1", "䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"], ["9a40", "鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"], ["9aa1", "黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"], ["9b40", "𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"], ["9b62", "𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"], ["9ba1", "椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"], ["9c40", "嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"], ["9ca1", "㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"], ["9d40", "𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"], ["9da1", "辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"], ["9e40", "𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"], ["9ea1", "鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"], ["9ead", "𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"], ["9ec5", "㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"], ["9ef5", "噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"], ["9f40", "籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"], ["9f4f", "凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"], ["9fa1", "椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"], ["9fae", "酙隁酜"], ["9fb2", "酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"], ["9fc1", "𤤙盖鮝个𠳔莾衂"], ["9fc9", "届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"], ["9fdb", "歒酼龥鮗頮颴骺麨麄煺笔"], ["9fe7", "毺蠘罸"], ["9feb", "嘠𪙊蹷齓"], ["9ff0", "跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"], ["a040", "𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"], ["a055", "𡠻𦸅"], ["a058", "詾𢔛"], ["a05b", "惽癧髗鵄鍮鮏蟵"], ["a063", "蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"], ["a073", "坟慯抦戹拎㩜懢厪𣏵捤栂㗒"], ["a0a1", "嵗𨯂迚𨸹"], ["a0a6", "僙𡵆礆匲阸𠼻䁥"], ["a0ae", "矾"], ["a0b0", "糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"], ["a0d4", "覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"], ["a0e2", "罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"], ["a3c0", "␀", 31, "␡"], ["c6a1", "①", 9, "⑴", 9, "ⅰ", 9, "丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ", 23], ["c740", "す", 58, "ァアィイ"], ["c7a1", "ゥ", 81, "А", 5, "ЁЖ", 4], ["c840", "Л", 26, "ёж", 25, "⇧↸↹㇏𠃌乚𠂊刂䒑"], ["c8a1", "龰冈龱𧘇"], ["c8cd", "¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"], ["c8f5", "ʃɐɛɔɵœøŋʊɪ"], ["f9fe", "■"], ["fa40", "𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"], ["faa1", "鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"], ["fb40", "𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"], ["fba1", "𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"], ["fc40", "廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"], ["fca1", "𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"], ["fd40", "𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"], ["fda1", "𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"], ["fe40", "鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"], ["fea1", "𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"] ]; }); // node_modules/iconv-lite/encodings/dbcs-data.js var require_dbcs_data = __commonJS((exports, module) => { module.exports = { shiftjis: { type: "_dbcs", table: function() { return require_shiftjis(); }, encodeAdd: { "¥": 92, "‾": 126 }, encodeSkipVals: [{ from: 60736, to: 63808 }] }, csshiftjis: "shiftjis", mskanji: "shiftjis", sjis: "shiftjis", windows31j: "shiftjis", ms31j: "shiftjis", xsjis: "shiftjis", windows932: "shiftjis", ms932: "shiftjis", "932": "shiftjis", cp932: "shiftjis", eucjp: { type: "_dbcs", table: function() { return require_eucjp(); }, encodeAdd: { "¥": 92, "‾": 126 } }, gb2312: "cp936", gb231280: "cp936", gb23121980: "cp936", csgb2312: "cp936", csiso58gb231280: "cp936", euccn: "cp936", windows936: "cp936", ms936: "cp936", "936": "cp936", cp936: { type: "_dbcs", table: function() { return require_cp936(); } }, gbk: { type: "_dbcs", table: function() { return require_cp936().concat(require_gbk_added()); } }, xgbk: "gbk", isoir58: "gbk", gb18030: { type: "_dbcs", table: function() { return require_cp936().concat(require_gbk_added()); }, gb18030: function() { return require_gb18030_ranges(); }, encodeSkipVals: [128], encodeAdd: { "€": 41699 } }, chinese: "gb18030", windows949: "cp949", ms949: "cp949", "949": "cp949", cp949: { type: "_dbcs", table: function() { return require_cp949(); } }, cseuckr: "cp949", csksc56011987: "cp949", euckr: "cp949", isoir149: "cp949", korean: "cp949", ksc56011987: "cp949", ksc56011989: "cp949", ksc5601: "cp949", windows950: "cp950", ms950: "cp950", "950": "cp950", cp950: { type: "_dbcs", table: function() { return require_cp950(); } }, big5: "big5hkscs", big5hkscs: { type: "_dbcs", table: function() { return require_cp950().concat(require_big5_added()); }, encodeSkipVals: [41676] }, cnbig5: "big5hkscs", csbig5: "big5hkscs", xxbig5: "big5hkscs" }; }); // node_modules/iconv-lite/encodings/index.js var require_encodings = __commonJS((exports, module) => { var modules = [ require_internal(), require_utf16(), require_utf7(), require_sbcs_codec(), require_sbcs_data(), require_sbcs_data_generated(), require_dbcs_codec(), require_dbcs_data() ]; for (i = 0;i < modules.length; i++) { module = modules[i]; for (enc in module) if (Object.prototype.hasOwnProperty.call(module, enc)) exports[enc] = module[enc]; } var module; var enc; var i; }); // node_modules/iconv-lite/lib/streams.js var require_streams = __commonJS((exports, module) => { var Buffer2 = __require("buffer").Buffer; var Transform = __require("stream").Transform; module.exports = function(iconv) { iconv.encodeStream = function encodeStream(encoding, options) { return new IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); }; iconv.decodeStream = function decodeStream(encoding, options) { return new IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); }; iconv.supportsStreams = true; iconv.IconvLiteEncoderStream = IconvLiteEncoderStream; iconv.IconvLiteDecoderStream = IconvLiteDecoderStream; iconv._collect = IconvLiteDecoderStream.prototype.collect; }; function IconvLiteEncoderStream(conv, options) { this.conv = conv; options = options || {}; options.decodeStrings = false; Transform.call(this, options); } IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { constructor: { value: IconvLiteEncoderStream } }); IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { if (typeof chunk != "string") return done(new Error("Iconv encoding stream needs strings as its input.")); try { var res = this.conv.write(chunk); if (res && res.length) this.push(res); done(); } catch (e) { done(e); } }; IconvLiteEncoderStream.prototype._flush = function(done) { try { var res = this.conv.end(); if (res && res.length) this.push(res); done(); } catch (e) { done(e); } }; IconvLiteEncoderStream.prototype.collect = function(cb) { var chunks = []; this.on("error", cb); this.on("data", function(chunk) { chunks.push(chunk); }); this.on("end", function() { cb(null, Buffer2.concat(chunks)); }); return this; }; function IconvLiteDecoderStream(conv, options) { this.conv = conv; options = options || {}; options.encoding = this.encoding = "utf8"; Transform.call(this, options); } IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { constructor: { value: IconvLiteDecoderStream } }); IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { if (!Buffer2.isBuffer(chunk)) return done(new Error("Iconv decoding stream needs buffers as its input.")); try { var res = this.conv.write(chunk); if (res && res.length) this.push(res, this.encoding); done(); } catch (e) { done(e); } }; IconvLiteDecoderStream.prototype._flush = function(done) { try { var res = this.conv.end(); if (res && res.length) this.push(res, this.encoding); done(); } catch (e) { done(e); } }; IconvLiteDecoderStream.prototype.collect = function(cb) { var res = ""; this.on("error", cb); this.on("data", function(chunk) { res += chunk; }); this.on("end", function() { cb(null, res); }); return this; }; }); // node_modules/iconv-lite/lib/extend-node.js var require_extend_node = __commonJS((exports, module) => { var Buffer2 = __require("buffer").Buffer; module.exports = function(iconv) { var original = undefined; iconv.supportsNodeEncodingsExtension = !(Buffer2.from || new Buffer2(0) instanceof Uint8Array); iconv.extendNodeEncodings = function extendNodeEncodings() { if (original) return; original = {}; if (!iconv.supportsNodeEncodingsExtension) { console.error("ACTION NEEDED: require('iconv-lite').extendNodeEncodings() is not supported in your version of Node"); console.error("See more info at https://github.com/ashtuchkin/iconv-lite/wiki/Node-v4-compatibility"); return; } var nodeNativeEncodings = { hex: true, utf8: true, "utf-8": true, ascii: true, binary: true, base64: true, ucs2: true, "ucs-2": true, utf16le: true, "utf-16le": true }; Buffer2.isNativeEncoding = function(enc) { return enc && nodeNativeEncodings[enc.toLowerCase()]; }; var SlowBuffer = __require("buffer").SlowBuffer; original.SlowBufferToString = SlowBuffer.prototype.toString; SlowBuffer.prototype.toString = function(encoding, start, end) { encoding = String(encoding || "utf8").toLowerCase(); if (Buffer2.isNativeEncoding(encoding)) return original.SlowBufferToString.call(this, encoding, start, end); if (typeof start == "undefined") start = 0; if (typeof end == "undefined") end = this.length; return iconv.decode(this.slice(start, end), encoding); }; original.SlowBufferWrite = SlowBuffer.prototype.write; SlowBuffer.prototype.write = function(string4, offset, length, encoding) { if (isFinite(offset)) { if (!isFinite(length)) { encoding = length; length = undefined; } } else { var swap = encoding; encoding = offset; offset = length; length = swap; } offset = +offset || 0; var remaining = this.length - offset; if (!length) { length = remaining; } else { length = +length; if (length > remaining) { length = remaining; } } encoding = String(encoding || "utf8").toLowerCase(); if (Buffer2.isNativeEncoding(encoding)) return original.SlowBufferWrite.call(this, string4, offset, length, encoding); if (string4.length > 0 && (length < 0 || offset < 0)) throw new RangeError("attempt to write beyond buffer bounds"); var buf = iconv.encode(string4, encoding); if (buf.length < length) length = buf.length; buf.copy(this, offset, 0, length); return length; }; original.BufferIsEncoding = Buffer2.isEncoding; Buffer2.isEncoding = function(encoding) { return Buffer2.isNativeEncoding(encoding) || iconv.encodingExists(encoding); }; original.BufferByteLength = Buffer2.byteLength; Buffer2.byteLength = SlowBuffer.byteLength = function(str, encoding) { encoding = String(encoding || "utf8").toLowerCase(); if (Buffer2.isNativeEncoding(encoding)) return original.BufferByteLength.call(this, str, encoding); return iconv.encode(str, encoding).length; }; original.BufferToString = Buffer2.prototype.toString; Buffer2.prototype.toString = function(encoding, start, end) { encoding = String(encoding || "utf8").toLowerCase(); if (Buffer2.isNativeEncoding(encoding)) return original.BufferToString.call(this, encoding, start, end); if (typeof start == "undefined") start = 0; if (typeof end == "undefined") end = this.length; return iconv.decode(this.slice(start, end), encoding); }; original.BufferWrite = Buffer2.prototype.write; Buffer2.prototype.write = function(string4, offset, length, encoding) { var _offset = offset, _length2 = length, _encoding = encoding; if (isFinite(offset)) { if (!isFinite(length)) { encoding = length; length = undefined; } } else { var swap = encoding; encoding = offset; offset = length; length = swap; } encoding = String(encoding || "utf8").toLowerCase(); if (Buffer2.isNativeEncoding(encoding)) return original.BufferWrite.call(this, string4, _offset, _length2, _encoding); offset = +offset || 0; var remaining = this.length - offset; if (!length) { length = remaining; } else { length = +length; if (length > remaining) { length = remaining; } } if (string4.length > 0 && (length < 0 || offset < 0)) throw new RangeError("attempt to write beyond buffer bounds"); var buf = iconv.encode(string4, encoding); if (buf.length < length) length = buf.length; buf.copy(this, offset, 0, length); return length; }; if (iconv.supportsStreams) { var Readable = __require("stream").Readable; original.ReadableSetEncoding = Readable.prototype.setEncoding; Readable.prototype.setEncoding = function setEncoding(enc, options) { this._readableState.decoder = iconv.getDecoder(enc, options); this._readableState.encoding = enc; }; Readable.prototype.collect = iconv._collect; } }; iconv.undoExtendNodeEncodings = function undoExtendNodeEncodings() { if (!iconv.supportsNodeEncodingsExtension) return; if (!original) throw new Error("require('iconv-lite').undoExtendNodeEncodings(): Nothing to undo; extendNodeEncodings() is not called."); delete Buffer2.isNativeEncoding; var SlowBuffer = __require("buffer").SlowBuffer; SlowBuffer.prototype.toString = original.SlowBufferToString; SlowBuffer.prototype.write = original.SlowBufferWrite; Buffer2.isEncoding = original.BufferIsEncoding; Buffer2.byteLength = original.BufferByteLength; Buffer2.prototype.toString = original.BufferToString; Buffer2.prototype.write = original.BufferWrite; if (iconv.supportsStreams) { var Readable = __require("stream").Readable; Readable.prototype.setEncoding = original.ReadableSetEncoding; delete Readable.prototype.collect; } original = undefined; }; }; }); // node_modules/iconv-lite/lib/index.js var require_lib = __commonJS((exports, module) => { var Buffer2 = require_safer().Buffer; var bomHandling = require_bom_handling(); var iconv = exports; iconv.encodings = null; iconv.defaultCharUnicode = "�"; iconv.defaultCharSingleByte = "?"; iconv.encode = function encode3(str, encoding, options) { str = "" + (str || ""); var encoder = iconv.getEncoder(encoding, options); var res = encoder.write(str); var trail = encoder.end(); return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res; }; iconv.decode = function decode3(buf, encoding, options) { if (typeof buf === "string") { if (!iconv.skipDecodeWarning) { console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"); iconv.skipDecodeWarning = true; } buf = Buffer2.from("" + (buf || ""), "binary"); } var decoder = iconv.getDecoder(encoding, options); var res = decoder.write(buf); var trail = decoder.end(); return trail ? res + trail : res; }; iconv.encodingExists = function encodingExists(enc) { try { iconv.getCodec(enc); return true; } catch (e) { return false; } }; iconv.toEncoding = iconv.encode; iconv.fromEncoding = iconv.decode; iconv._codecDataCache = {}; iconv.getCodec = function getCodec(encoding) { if (!iconv.encodings) iconv.encodings = require_encodings(); var enc = iconv._canonicalizeEncoding(encoding); var codecOptions = {}; while (true) { var codec = iconv._codecDataCache[enc]; if (codec) return codec; var codecDef = iconv.encodings[enc]; switch (typeof codecDef) { case "string": enc = codecDef; break; case "object": for (var key in codecDef) codecOptions[key] = codecDef[key]; if (!codecOptions.encodingName) codecOptions.encodingName = enc; enc = codecDef.type; break; case "function": if (!codecOptions.encodingName) codecOptions.encodingName = enc; codec = new codecDef(codecOptions, iconv); iconv._codecDataCache[codecOptions.encodingName] = codec; return codec; default: throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')"); } } }; iconv._canonicalizeEncoding = function(encoding) { return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); }; iconv.getEncoder = function getEncoder(encoding, options) { var codec = iconv.getCodec(encoding), encoder = new codec.encoder(options, codec); if (codec.bomAware && options && options.addBOM) encoder = new bomHandling.PrependBOM(encoder, options); return encoder; }; iconv.getDecoder = function getDecoder(encoding, options) { var codec = iconv.getCodec(encoding), decoder = new codec.decoder(options, codec); if (codec.bomAware && !(options && options.stripBOM === false)) decoder = new bomHandling.StripBOM(decoder, options); return decoder; }; var nodeVer = typeof process !== "undefined" && process.versions && process.versions.node; if (nodeVer) { nodeVerArr = nodeVer.split(".").map(Number); if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) { require_streams()(iconv); } require_extend_node()(iconv); } var nodeVerArr; if (false) {} }); // node_modules/unpipe/index.js var require_unpipe = __commonJS((exports, module) => { /*! * unpipe * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ module.exports = unpipe; function hasPipeDataListeners(stream) { var listeners = stream.listeners("data"); for (var i = 0;i < listeners.length; i++) { if (listeners[i].name === "ondata") { return true; } } return false; } function unpipe(stream) { if (!stream) { throw new TypeError("argument stream is required"); } if (typeof stream.unpipe === "function") { stream.unpipe(); return; } if (!hasPipeDataListeners(stream)) { return; } var listener; var listeners = stream.listeners("close"); for (var i = 0;i < listeners.length; i++) { listener = listeners[i]; if (listener.name !== "cleanup" && listener.name !== "onclose") { continue; } listener.call(stream); } } }); // node_modules/body-parser/node_modules/raw-body/index.js var require_raw_body = __commonJS((exports, module) => { /*! * raw-body * Copyright(c) 2013-2014 Jonathan Ong * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ var asyncHooks = tryRequireAsyncHooks(); var bytes = require_bytes(); var createError = require_http_errors(); var iconv = require_lib(); var unpipe = require_unpipe(); module.exports = getRawBody; var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /; function getDecoder(encoding) { if (!encoding) return null; try { return iconv.getDecoder(encoding); } catch (e) { if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e; throw createError(415, "specified encoding unsupported", { encoding, type: "encoding.unsupported" }); } } function getRawBody(stream, options, callback) { var done = callback; var opts = options || {}; if (stream === undefined) { throw new TypeError("argument stream is required"); } else if (typeof stream !== "object" || stream === null || typeof stream.on !== "function") { throw new TypeError("argument stream must be a stream"); } if (options === true || typeof options === "string") { opts = { encoding: options }; } if (typeof options === "function") { done = options; opts = {}; } if (done !== undefined && typeof done !== "function") { throw new TypeError("argument callback must be a function"); } if (!done && !global.Promise) { throw new TypeError("argument callback is required"); } var encoding = opts.encoding !== true ? opts.encoding : "utf-8"; var limit = bytes.parse(opts.limit); var length = opts.length != null && !isNaN(opts.length) ? parseInt(opts.length, 10) : null; if (done) { return readStream(stream, encoding, length, limit, wrap(done)); } return new Promise(function executor(resolve, reject) { readStream(stream, encoding, length, limit, function onRead(err, buf) { if (err) return reject(err); resolve(buf); }); }); } function halt(stream) { unpipe(stream); if (typeof stream.pause === "function") { stream.pause(); } } function readStream(stream, encoding, length, limit, callback) { var complete = false; var sync = true; if (limit !== null && length !== null && length > limit) { return done(createError(413, "request entity too large", { expected: length, length, limit, type: "entity.too.large" })); } var state = stream._readableState; if (stream._decoder || state && (state.encoding || state.decoder)) { return done(createError(500, "stream encoding should not be set", { type: "stream.encoding.set" })); } if (typeof stream.readable !== "undefined" && !stream.readable) { return done(createError(500, "stream is not readable", { type: "stream.not.readable" })); } var received = 0; var decoder; try { decoder = getDecoder(encoding); } catch (err) { return done(err); } var buffer = decoder ? "" : []; stream.on("aborted", onAborted); stream.on("close", cleanup); stream.on("data", onData); stream.on("end", onEnd); stream.on("error", onEnd); sync = false; function done() { var args = new Array(arguments.length); for (var i = 0;i < args.length; i++) { args[i] = arguments[i]; } complete = true; if (sync) { process.nextTick(invokeCallback); } else { invokeCallback(); } function invokeCallback() { cleanup(); if (args[0]) { halt(stream); } callback.apply(null, args); } } function onAborted() { if (complete) return; done(createError(400, "request aborted", { code: "ECONNABORTED", expected: length, length, received, type: "request.aborted" })); } function onData(chunk) { if (complete) return; received += chunk.length; if (limit !== null && received > limit) { done(createError(413, "request entity too large", { limit, received, type: "entity.too.large" })); } else if (decoder) { buffer += decoder.write(chunk); } else { buffer.push(chunk); } } function onEnd(err) { if (complete) return; if (err) return done(err); if (length !== null && received !== length) { done(createError(400, "request size did not match content length", { expected: length, length, received, type: "request.size.invalid" })); } else { var string4 = decoder ? buffer + (decoder.end() || "") : Buffer.concat(buffer); done(null, string4); } } function cleanup() { buffer = null; stream.removeListener("aborted", onAborted); stream.removeListener("data", onData); stream.removeListener("end", onEnd); stream.removeListener("error", onEnd); stream.removeListener("close", cleanup); } } function tryRequireAsyncHooks() { try { return __require("async_hooks"); } catch (e) { return {}; } } function wrap(fn) { var res; if (asyncHooks.AsyncResource) { res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn"); } if (!res || !res.runInAsyncScope) { return fn; } return res.runInAsyncScope.bind(res, fn, null); } }); // node_modules/ee-first/index.js var require_ee_first = __commonJS((exports, module) => { /*! * ee-first * Copyright(c) 2014 Jonathan Ong * MIT Licensed */ module.exports = first; function first(stuff, done) { if (!Array.isArray(stuff)) throw new TypeError("arg must be an array of [ee, events...] arrays"); var cleanups = []; for (var i = 0;i < stuff.length; i++) { var arr = stuff[i]; if (!Array.isArray(arr) || arr.length < 2) throw new TypeError("each array member must be [ee, events...]"); var ee = arr[0]; for (var j = 1;j < arr.length; j++) { var event = arr[j]; var fn = listener(event, callback); ee.on(event, fn); cleanups.push({ ee, event, fn }); } } function callback() { cleanup(); done.apply(null, arguments); } function cleanup() { var x; for (var i2 = 0;i2 < cleanups.length; i2++) { x = cleanups[i2]; x.ee.removeListener(x.event, x.fn); } } function thunk(fn2) { done = fn2; } thunk.cancel = cleanup; return thunk; } function listener(event, done) { return function onevent(arg1) { var args = new Array(arguments.length); var ee = this; var err = event === "error" ? arg1 : null; for (var i = 0;i < args.length; i++) { args[i] = arguments[i]; } done(err, ee, event, args); }; } }); // node_modules/on-finished/index.js var require_on_finished = __commonJS((exports, module) => { /*! * on-finished * Copyright(c) 2013 Jonathan Ong * Copyright(c) 2014 Douglas Christopher Wilson * MIT Licensed */ module.exports = onFinished; module.exports.isFinished = isFinished; var asyncHooks = tryRequireAsyncHooks(); var first = require_ee_first(); var defer = typeof setImmediate === "function" ? setImmediate : function(fn) { process.nextTick(fn.bind.apply(fn, arguments)); }; function onFinished(msg, listener) { if (isFinished(msg) !== false) { defer(listener, null, msg); return msg; } attachListener(msg, wrap(listener)); return msg; } function isFinished(msg) { var socket = msg.socket; if (typeof msg.finished === "boolean") { return Boolean(msg.finished || socket && !socket.writable); } if (typeof msg.complete === "boolean") { return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable); } return; } function attachFinishedListener(msg, callback) { var eeMsg; var eeSocket; var finished = false; function onFinish(error2) { eeMsg.cancel(); eeSocket.cancel(); finished = true; callback(error2); } eeMsg = eeSocket = first([[msg, "end", "finish"]], onFinish); function onSocket(socket) { msg.removeListener("socket", onSocket); if (finished) return; if (eeMsg !== eeSocket) return; eeSocket = first([[socket, "error", "close"]], onFinish); } if (msg.socket) { onSocket(msg.socket); return; } msg.on("socket", onSocket); if (msg.socket === undefined) { patchAssignSocket(msg, onSocket); } } function attachListener(msg, listener) { var attached = msg.__onFinished; if (!attached || !attached.queue) { attached = msg.__onFinished = createListener(msg); attachFinishedListener(msg, attached); } attached.queue.push(listener); } function createListener(msg) { function listener(err) { if (msg.__onFinished === listener) msg.__onFinished = null; if (!listener.queue) return; var queue = listener.queue; listener.queue = null; for (var i = 0;i < queue.length; i++) { queue[i](err, msg); } } listener.queue = []; return listener; } function patchAssignSocket(res, callback) { var assignSocket = res.assignSocket; if (typeof assignSocket !== "function") return; res.assignSocket = function _assignSocket(socket) { assignSocket.call(this, socket); callback(socket); }; } function tryRequireAsyncHooks() { try { return __require("async_hooks"); } catch (e) { return {}; } } function wrap(fn) { var res; if (asyncHooks.AsyncResource) { res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn"); } if (!res || !res.runInAsyncScope) { return fn; } return res.runInAsyncScope.bind(res, fn, null); } }); // node_modules/body-parser/lib/read.js var require_read = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var createError = require_http_errors(); var destroy = require_destroy(); var getBody = require_raw_body(); var iconv = require_lib(); var onFinished = require_on_finished(); var unpipe = require_unpipe(); var zlib = __require("zlib"); module.exports = read; function read(req, res, next, parse5, debug, options) { var length; var opts = options; var stream; req._body = true; var encoding = opts.encoding !== null ? opts.encoding : null; var verify = opts.verify; try { stream = contentstream(req, debug, opts.inflate); length = stream.length; stream.length = undefined; } catch (err) { return next(err); } opts.length = length; opts.encoding = verify ? null : encoding; if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { charset: encoding.toLowerCase(), type: "charset.unsupported" })); } debug("read body"); getBody(stream, opts, function(error2, body) { if (error2) { var _error; if (error2.type === "encoding.unsupported") { _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { charset: encoding.toLowerCase(), type: "charset.unsupported" }); } else { _error = createError(400, error2); } if (stream !== req) { unpipe(req); destroy(stream, true); } dump(req, function onfinished() { next(createError(400, _error)); }); return; } if (verify) { try { debug("verify body"); verify(req, res, body, encoding); } catch (err) { next(createError(403, err, { body, type: err.type || "entity.verify.failed" })); return; } } var str = body; try { debug("parse body"); str = typeof body !== "string" && encoding !== null ? iconv.decode(body, encoding) : body; req.body = parse5(str); } catch (err) { next(createError(400, err, { body: str, type: err.type || "entity.parse.failed" })); return; } next(); }); } function contentstream(req, debug, inflate) { var encoding = (req.headers["content-encoding"] || "identity").toLowerCase(); var length = req.headers["content-length"]; var stream; debug('content-encoding "%s"', encoding); if (inflate === false && encoding !== "identity") { throw createError(415, "content encoding unsupported", { encoding, type: "encoding.unsupported" }); } switch (encoding) { case "deflate": stream = zlib.createInflate(); debug("inflate body"); req.pipe(stream); break; case "gzip": stream = zlib.createGunzip(); debug("gunzip body"); req.pipe(stream); break; case "identity": stream = req; stream.length = length; break; default: throw createError(415, 'unsupported content encoding "' + encoding + '"', { encoding, type: "encoding.unsupported" }); } return stream; } function dump(req, callback) { if (onFinished.isFinished(req)) { callback(null); } else { onFinished(req, callback); req.resume(); } } }); // node_modules/media-typer/index.js var require_media_typer = __commonJS((exports) => { /*! * media-typer * Copyright(c) 2014 Douglas Christopher Wilson * MIT Licensed */ var paramRegExp = /; *([!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) *= *("(?:[ !\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u0020-\u007e])*"|[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+) */g; var textRegExp = /^[\u0020-\u007e\u0080-\u00ff]+$/; var tokenRegExp = /^[!#$%&'\*\+\-\.0-9A-Z\^_`a-z\|~]+$/; var qescRegExp = /\\([\u0000-\u007f])/g; var quoteRegExp = /([\\"])/g; var subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/; var typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/; var typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/; exports.format = format; exports.parse = parse5; function format(obj) { if (!obj || typeof obj !== "object") { throw new TypeError("argument obj is required"); } var parameters = obj.parameters; var subtype = obj.subtype; var suffix = obj.suffix; var type = obj.type; if (!type || !typeNameRegExp.test(type)) { throw new TypeError("invalid type"); } if (!subtype || !subtypeNameRegExp.test(subtype)) { throw new TypeError("invalid subtype"); } var string4 = type + "/" + subtype; if (suffix) { if (!typeNameRegExp.test(suffix)) { throw new TypeError("invalid suffix"); } string4 += "+" + suffix; } if (parameters && typeof parameters === "object") { var param; var params = Object.keys(parameters).sort(); for (var i = 0;i < params.length; i++) { param = params[i]; if (!tokenRegExp.test(param)) { throw new TypeError("invalid parameter name"); } string4 += "; " + param + "=" + qstring(parameters[param]); } } return string4; } function parse5(string4) { if (!string4) { throw new TypeError("argument string is required"); } if (typeof string4 === "object") { string4 = getcontenttype(string4); } if (typeof string4 !== "string") { throw new TypeError("argument string is required to be a string"); } var index = string4.indexOf(";"); var type = index !== -1 ? string4.substr(0, index) : string4; var key; var match; var obj = splitType(type); var params = {}; var value; paramRegExp.lastIndex = index; while (match = paramRegExp.exec(string4)) { if (match.index !== index) { throw new TypeError("invalid parameter format"); } index += match[0].length; key = match[1].toLowerCase(); value = match[2]; if (value[0] === '"') { value = value.substr(1, value.length - 2).replace(qescRegExp, "$1"); } params[key] = value; } if (index !== -1 && index !== string4.length) { throw new TypeError("invalid parameter format"); } obj.parameters = params; return obj; } function getcontenttype(obj) { if (typeof obj.getHeader === "function") { return obj.getHeader("content-type"); } if (typeof obj.headers === "object") { return obj.headers && obj.headers["content-type"]; } } function qstring(val) { var str = String(val); if (tokenRegExp.test(str)) { return str; } if (str.length > 0 && !textRegExp.test(str)) { throw new TypeError("invalid parameter value"); } return '"' + str.replace(quoteRegExp, "\\$1") + '"'; } function splitType(string4) { var match = typeRegExp.exec(string4.toLowerCase()); if (!match) { throw new TypeError("invalid media type"); } var type = match[1]; var subtype = match[2]; var suffix; var index = subtype.lastIndexOf("+"); if (index !== -1) { suffix = subtype.substr(index + 1); subtype = subtype.substr(0, index); } var obj = { type, subtype, suffix }; return obj; } }); // node_modules/mime-db/db.json var require_db = __commonJS((exports, module) => { module.exports = { "application/1d-interleaved-parityfec": { source: "iana" }, "application/3gpdash-qoe-report+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/3gpp-ims+xml": { source: "iana", compressible: true }, "application/3gpphal+json": { source: "iana", compressible: true }, "application/3gpphalforms+json": { source: "iana", compressible: true }, "application/a2l": { source: "iana" }, "application/ace+cbor": { source: "iana" }, "application/activemessage": { source: "iana" }, "application/activity+json": { source: "iana", compressible: true }, "application/alto-costmap+json": { source: "iana", compressible: true }, "application/alto-costmapfilter+json": { source: "iana", compressible: true }, "application/alto-directory+json": { source: "iana", compressible: true }, "application/alto-endpointcost+json": { source: "iana", compressible: true }, "application/alto-endpointcostparams+json": { source: "iana", compressible: true }, "application/alto-endpointprop+json": { source: "iana", compressible: true }, "application/alto-endpointpropparams+json": { source: "iana", compressible: true }, "application/alto-error+json": { source: "iana", compressible: true }, "application/alto-networkmap+json": { source: "iana", compressible: true }, "application/alto-networkmapfilter+json": { source: "iana", compressible: true }, "application/alto-updatestreamcontrol+json": { source: "iana", compressible: true }, "application/alto-updatestreamparams+json": { source: "iana", compressible: true }, "application/aml": { source: "iana" }, "application/andrew-inset": { source: "iana", extensions: ["ez"] }, "application/applefile": { source: "iana" }, "application/applixware": { source: "apache", extensions: ["aw"] }, "application/at+jwt": { source: "iana" }, "application/atf": { source: "iana" }, "application/atfx": { source: "iana" }, "application/atom+xml": { source: "iana", compressible: true, extensions: ["atom"] }, "application/atomcat+xml": { source: "iana", compressible: true, extensions: ["atomcat"] }, "application/atomdeleted+xml": { source: "iana", compressible: true, extensions: ["atomdeleted"] }, "application/atomicmail": { source: "iana" }, "application/atomsvc+xml": { source: "iana", compressible: true, extensions: ["atomsvc"] }, "application/atsc-dwd+xml": { source: "iana", compressible: true, extensions: ["dwd"] }, "application/atsc-dynamic-event-message": { source: "iana" }, "application/atsc-held+xml": { source: "iana", compressible: true, extensions: ["held"] }, "application/atsc-rdt+json": { source: "iana", compressible: true }, "application/atsc-rsat+xml": { source: "iana", compressible: true, extensions: ["rsat"] }, "application/atxml": { source: "iana" }, "application/auth-policy+xml": { source: "iana", compressible: true }, "application/bacnet-xdd+zip": { source: "iana", compressible: false }, "application/batch-smtp": { source: "iana" }, "application/bdoc": { compressible: false, extensions: ["bdoc"] }, "application/beep+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/calendar+json": { source: "iana", compressible: true }, "application/calendar+xml": { source: "iana", compressible: true, extensions: ["xcs"] }, "application/call-completion": { source: "iana" }, "application/cals-1840": { source: "iana" }, "application/captive+json": { source: "iana", compressible: true }, "application/cbor": { source: "iana" }, "application/cbor-seq": { source: "iana" }, "application/cccex": { source: "iana" }, "application/ccmp+xml": { source: "iana", compressible: true }, "application/ccxml+xml": { source: "iana", compressible: true, extensions: ["ccxml"] }, "application/cdfx+xml": { source: "iana", compressible: true, extensions: ["cdfx"] }, "application/cdmi-capability": { source: "iana", extensions: ["cdmia"] }, "application/cdmi-container": { source: "iana", extensions: ["cdmic"] }, "application/cdmi-domain": { source: "iana", extensions: ["cdmid"] }, "application/cdmi-object": { source: "iana", extensions: ["cdmio"] }, "application/cdmi-queue": { source: "iana", extensions: ["cdmiq"] }, "application/cdni": { source: "iana" }, "application/cea": { source: "iana" }, "application/cea-2018+xml": { source: "iana", compressible: true }, "application/cellml+xml": { source: "iana", compressible: true }, "application/cfw": { source: "iana" }, "application/city+json": { source: "iana", compressible: true }, "application/clr": { source: "iana" }, "application/clue+xml": { source: "iana", compressible: true }, "application/clue_info+xml": { source: "iana", compressible: true }, "application/cms": { source: "iana" }, "application/cnrp+xml": { source: "iana", compressible: true }, "application/coap-group+json": { source: "iana", compressible: true }, "application/coap-payload": { source: "iana" }, "application/commonground": { source: "iana" }, "application/conference-info+xml": { source: "iana", compressible: true }, "application/cose": { source: "iana" }, "application/cose-key": { source: "iana" }, "application/cose-key-set": { source: "iana" }, "application/cpl+xml": { source: "iana", compressible: true, extensions: ["cpl"] }, "application/csrattrs": { source: "iana" }, "application/csta+xml": { source: "iana", compressible: true }, "application/cstadata+xml": { source: "iana", compressible: true }, "application/csvm+json": { source: "iana", compressible: true }, "application/cu-seeme": { source: "apache", extensions: ["cu"] }, "application/cwt": { source: "iana" }, "application/cybercash": { source: "iana" }, "application/dart": { compressible: true }, "application/dash+xml": { source: "iana", compressible: true, extensions: ["mpd"] }, "application/dash-patch+xml": { source: "iana", compressible: true, extensions: ["mpp"] }, "application/dashdelta": { source: "iana" }, "application/davmount+xml": { source: "iana", compressible: true, extensions: ["davmount"] }, "application/dca-rft": { source: "iana" }, "application/dcd": { source: "iana" }, "application/dec-dx": { source: "iana" }, "application/dialog-info+xml": { source: "iana", compressible: true }, "application/dicom": { source: "iana" }, "application/dicom+json": { source: "iana", compressible: true }, "application/dicom+xml": { source: "iana", compressible: true }, "application/dii": { source: "iana" }, "application/dit": { source: "iana" }, "application/dns": { source: "iana" }, "application/dns+json": { source: "iana", compressible: true }, "application/dns-message": { source: "iana" }, "application/docbook+xml": { source: "apache", compressible: true, extensions: ["dbk"] }, "application/dots+cbor": { source: "iana" }, "application/dskpp+xml": { source: "iana", compressible: true }, "application/dssc+der": { source: "iana", extensions: ["dssc"] }, "application/dssc+xml": { source: "iana", compressible: true, extensions: ["xdssc"] }, "application/dvcs": { source: "iana" }, "application/ecmascript": { source: "iana", compressible: true, extensions: ["es", "ecma"] }, "application/edi-consent": { source: "iana" }, "application/edi-x12": { source: "iana", compressible: false }, "application/edifact": { source: "iana", compressible: false }, "application/efi": { source: "iana" }, "application/elm+json": { source: "iana", charset: "UTF-8", compressible: true }, "application/elm+xml": { source: "iana", compressible: true }, "application/emergencycalldata.cap+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/emergencycalldata.comment+xml": { source: "iana", compressible: true }, "application/emergencycalldata.control+xml": { source: "iana", compressible: true }, "application/emergencycalldata.deviceinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.ecall.msd": { source: "iana" }, "application/emergencycalldata.providerinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.serviceinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.subscriberinfo+xml": { source: "iana", compressible: true }, "application/emergencycalldata.veds+xml": { source: "iana", compressible: true }, "application/emma+xml": { source: "iana", compressible: true, extensions: ["emma"] }, "application/emotionml+xml": { source: "iana", compressible: true, extensions: ["emotionml"] }, "application/encaprtp": { source: "iana" }, "application/epp+xml": { source: "iana", compressible: true }, "application/epub+zip": { source: "iana", compressible: false, extensions: ["epub"] }, "application/eshop": { source: "iana" }, "application/exi": { source: "iana", extensions: ["exi"] }, "application/expect-ct-report+json": { source: "iana", compressible: true }, "application/express": { source: "iana", extensions: ["exp"] }, "application/fastinfoset": { source: "iana" }, "application/fastsoap": { source: "iana" }, "application/fdt+xml": { source: "iana", compressible: true, extensions: ["fdt"] }, "application/fhir+json": { source: "iana", charset: "UTF-8", compressible: true }, "application/fhir+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/fido.trusted-apps+json": { compressible: true }, "application/fits": { source: "iana" }, "application/flexfec": { source: "iana" }, "application/font-sfnt": { source: "iana" }, "application/font-tdpfr": { source: "iana", extensions: ["pfr"] }, "application/font-woff": { source: "iana", compressible: false }, "application/framework-attributes+xml": { source: "iana", compressible: true }, "application/geo+json": { source: "iana", compressible: true, extensions: ["geojson"] }, "application/geo+json-seq": { source: "iana" }, "application/geopackage+sqlite3": { source: "iana" }, "application/geoxacml+xml": { source: "iana", compressible: true }, "application/gltf-buffer": { source: "iana" }, "application/gml+xml": { source: "iana", compressible: true, extensions: ["gml"] }, "application/gpx+xml": { source: "apache", compressible: true, extensions: ["gpx"] }, "application/gxf": { source: "apache", extensions: ["gxf"] }, "application/gzip": { source: "iana", compressible: false, extensions: ["gz"] }, "application/h224": { source: "iana" }, "application/held+xml": { source: "iana", compressible: true }, "application/hjson": { extensions: ["hjson"] }, "application/http": { source: "iana" }, "application/hyperstudio": { source: "iana", extensions: ["stk"] }, "application/ibe-key-request+xml": { source: "iana", compressible: true }, "application/ibe-pkg-reply+xml": { source: "iana", compressible: true }, "application/ibe-pp-data": { source: "iana" }, "application/iges": { source: "iana" }, "application/im-iscomposing+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/index": { source: "iana" }, "application/index.cmd": { source: "iana" }, "application/index.obj": { source: "iana" }, "application/index.response": { source: "iana" }, "application/index.vnd": { source: "iana" }, "application/inkml+xml": { source: "iana", compressible: true, extensions: ["ink", "inkml"] }, "application/iotp": { source: "iana" }, "application/ipfix": { source: "iana", extensions: ["ipfix"] }, "application/ipp": { source: "iana" }, "application/isup": { source: "iana" }, "application/its+xml": { source: "iana", compressible: true, extensions: ["its"] }, "application/java-archive": { source: "apache", compressible: false, extensions: ["jar", "war", "ear"] }, "application/java-serialized-object": { source: "apache", compressible: false, extensions: ["ser"] }, "application/java-vm": { source: "apache", compressible: false, extensions: ["class"] }, "application/javascript": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["js", "mjs"] }, "application/jf2feed+json": { source: "iana", compressible: true }, "application/jose": { source: "iana" }, "application/jose+json": { source: "iana", compressible: true }, "application/jrd+json": { source: "iana", compressible: true }, "application/jscalendar+json": { source: "iana", compressible: true }, "application/json": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["json", "map"] }, "application/json-patch+json": { source: "iana", compressible: true }, "application/json-seq": { source: "iana" }, "application/json5": { extensions: ["json5"] }, "application/jsonml+json": { source: "apache", compressible: true, extensions: ["jsonml"] }, "application/jwk+json": { source: "iana", compressible: true }, "application/jwk-set+json": { source: "iana", compressible: true }, "application/jwt": { source: "iana" }, "application/kpml-request+xml": { source: "iana", compressible: true }, "application/kpml-response+xml": { source: "iana", compressible: true }, "application/ld+json": { source: "iana", compressible: true, extensions: ["jsonld"] }, "application/lgr+xml": { source: "iana", compressible: true, extensions: ["lgr"] }, "application/link-format": { source: "iana" }, "application/load-control+xml": { source: "iana", compressible: true }, "application/lost+xml": { source: "iana", compressible: true, extensions: ["lostxml"] }, "application/lostsync+xml": { source: "iana", compressible: true }, "application/lpf+zip": { source: "iana", compressible: false }, "application/lxf": { source: "iana" }, "application/mac-binhex40": { source: "iana", extensions: ["hqx"] }, "application/mac-compactpro": { source: "apache", extensions: ["cpt"] }, "application/macwriteii": { source: "iana" }, "application/mads+xml": { source: "iana", compressible: true, extensions: ["mads"] }, "application/manifest+json": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["webmanifest"] }, "application/marc": { source: "iana", extensions: ["mrc"] }, "application/marcxml+xml": { source: "iana", compressible: true, extensions: ["mrcx"] }, "application/mathematica": { source: "iana", extensions: ["ma", "nb", "mb"] }, "application/mathml+xml": { source: "iana", compressible: true, extensions: ["mathml"] }, "application/mathml-content+xml": { source: "iana", compressible: true }, "application/mathml-presentation+xml": { source: "iana", compressible: true }, "application/mbms-associated-procedure-description+xml": { source: "iana", compressible: true }, "application/mbms-deregister+xml": { source: "iana", compressible: true }, "application/mbms-envelope+xml": { source: "iana", compressible: true }, "application/mbms-msk+xml": { source: "iana", compressible: true }, "application/mbms-msk-response+xml": { source: "iana", compressible: true }, "application/mbms-protection-description+xml": { source: "iana", compressible: true }, "application/mbms-reception-report+xml": { source: "iana", compressible: true }, "application/mbms-register+xml": { source: "iana", compressible: true }, "application/mbms-register-response+xml": { source: "iana", compressible: true }, "application/mbms-schedule+xml": { source: "iana", compressible: true }, "application/mbms-user-service-description+xml": { source: "iana", compressible: true }, "application/mbox": { source: "iana", extensions: ["mbox"] }, "application/media-policy-dataset+xml": { source: "iana", compressible: true, extensions: ["mpf"] }, "application/media_control+xml": { source: "iana", compressible: true }, "application/mediaservercontrol+xml": { source: "iana", compressible: true, extensions: ["mscml"] }, "application/merge-patch+json": { source: "iana", compressible: true }, "application/metalink+xml": { source: "apache", compressible: true, extensions: ["metalink"] }, "application/metalink4+xml": { source: "iana", compressible: true, extensions: ["meta4"] }, "application/mets+xml": { source: "iana", compressible: true, extensions: ["mets"] }, "application/mf4": { source: "iana" }, "application/mikey": { source: "iana" }, "application/mipc": { source: "iana" }, "application/missing-blocks+cbor-seq": { source: "iana" }, "application/mmt-aei+xml": { source: "iana", compressible: true, extensions: ["maei"] }, "application/mmt-usd+xml": { source: "iana", compressible: true, extensions: ["musd"] }, "application/mods+xml": { source: "iana", compressible: true, extensions: ["mods"] }, "application/moss-keys": { source: "iana" }, "application/moss-signature": { source: "iana" }, "application/mosskey-data": { source: "iana" }, "application/mosskey-request": { source: "iana" }, "application/mp21": { source: "iana", extensions: ["m21", "mp21"] }, "application/mp4": { source: "iana", extensions: ["mp4s", "m4p"] }, "application/mpeg4-generic": { source: "iana" }, "application/mpeg4-iod": { source: "iana" }, "application/mpeg4-iod-xmt": { source: "iana" }, "application/mrb-consumer+xml": { source: "iana", compressible: true }, "application/mrb-publish+xml": { source: "iana", compressible: true }, "application/msc-ivr+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/msc-mixer+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/msword": { source: "iana", compressible: false, extensions: ["doc", "dot"] }, "application/mud+json": { source: "iana", compressible: true }, "application/multipart-core": { source: "iana" }, "application/mxf": { source: "iana", extensions: ["mxf"] }, "application/n-quads": { source: "iana", extensions: ["nq"] }, "application/n-triples": { source: "iana", extensions: ["nt"] }, "application/nasdata": { source: "iana" }, "application/news-checkgroups": { source: "iana", charset: "US-ASCII" }, "application/news-groupinfo": { source: "iana", charset: "US-ASCII" }, "application/news-transmission": { source: "iana" }, "application/nlsml+xml": { source: "iana", compressible: true }, "application/node": { source: "iana", extensions: ["cjs"] }, "application/nss": { source: "iana" }, "application/oauth-authz-req+jwt": { source: "iana" }, "application/oblivious-dns-message": { source: "iana" }, "application/ocsp-request": { source: "iana" }, "application/ocsp-response": { source: "iana" }, "application/octet-stream": { source: "iana", compressible: false, extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] }, "application/oda": { source: "iana", extensions: ["oda"] }, "application/odm+xml": { source: "iana", compressible: true }, "application/odx": { source: "iana" }, "application/oebps-package+xml": { source: "iana", compressible: true, extensions: ["opf"] }, "application/ogg": { source: "iana", compressible: false, extensions: ["ogx"] }, "application/omdoc+xml": { source: "apache", compressible: true, extensions: ["omdoc"] }, "application/onenote": { source: "apache", extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] }, "application/opc-nodeset+xml": { source: "iana", compressible: true }, "application/oscore": { source: "iana" }, "application/oxps": { source: "iana", extensions: ["oxps"] }, "application/p21": { source: "iana" }, "application/p21+zip": { source: "iana", compressible: false }, "application/p2p-overlay+xml": { source: "iana", compressible: true, extensions: ["relo"] }, "application/parityfec": { source: "iana" }, "application/passport": { source: "iana" }, "application/patch-ops-error+xml": { source: "iana", compressible: true, extensions: ["xer"] }, "application/pdf": { source: "iana", compressible: false, extensions: ["pdf"] }, "application/pdx": { source: "iana" }, "application/pem-certificate-chain": { source: "iana" }, "application/pgp-encrypted": { source: "iana", compressible: false, extensions: ["pgp"] }, "application/pgp-keys": { source: "iana", extensions: ["asc"] }, "application/pgp-signature": { source: "iana", extensions: ["asc", "sig"] }, "application/pics-rules": { source: "apache", extensions: ["prf"] }, "application/pidf+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/pidf-diff+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/pkcs10": { source: "iana", extensions: ["p10"] }, "application/pkcs12": { source: "iana" }, "application/pkcs7-mime": { source: "iana", extensions: ["p7m", "p7c"] }, "application/pkcs7-signature": { source: "iana", extensions: ["p7s"] }, "application/pkcs8": { source: "iana", extensions: ["p8"] }, "application/pkcs8-encrypted": { source: "iana" }, "application/pkix-attr-cert": { source: "iana", extensions: ["ac"] }, "application/pkix-cert": { source: "iana", extensions: ["cer"] }, "application/pkix-crl": { source: "iana", extensions: ["crl"] }, "application/pkix-pkipath": { source: "iana", extensions: ["pkipath"] }, "application/pkixcmp": { source: "iana", extensions: ["pki"] }, "application/pls+xml": { source: "iana", compressible: true, extensions: ["pls"] }, "application/poc-settings+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/postscript": { source: "iana", compressible: true, extensions: ["ai", "eps", "ps"] }, "application/ppsp-tracker+json": { source: "iana", compressible: true }, "application/problem+json": { source: "iana", compressible: true }, "application/problem+xml": { source: "iana", compressible: true }, "application/provenance+xml": { source: "iana", compressible: true, extensions: ["provx"] }, "application/prs.alvestrand.titrax-sheet": { source: "iana" }, "application/prs.cww": { source: "iana", extensions: ["cww"] }, "application/prs.cyn": { source: "iana", charset: "7-BIT" }, "application/prs.hpub+zip": { source: "iana", compressible: false }, "application/prs.nprend": { source: "iana" }, "application/prs.plucker": { source: "iana" }, "application/prs.rdf-xml-crypt": { source: "iana" }, "application/prs.xsf+xml": { source: "iana", compressible: true }, "application/pskc+xml": { source: "iana", compressible: true, extensions: ["pskcxml"] }, "application/pvd+json": { source: "iana", compressible: true }, "application/qsig": { source: "iana" }, "application/raml+yaml": { compressible: true, extensions: ["raml"] }, "application/raptorfec": { source: "iana" }, "application/rdap+json": { source: "iana", compressible: true }, "application/rdf+xml": { source: "iana", compressible: true, extensions: ["rdf", "owl"] }, "application/reginfo+xml": { source: "iana", compressible: true, extensions: ["rif"] }, "application/relax-ng-compact-syntax": { source: "iana", extensions: ["rnc"] }, "application/remote-printing": { source: "iana" }, "application/reputon+json": { source: "iana", compressible: true }, "application/resource-lists+xml": { source: "iana", compressible: true, extensions: ["rl"] }, "application/resource-lists-diff+xml": { source: "iana", compressible: true, extensions: ["rld"] }, "application/rfc+xml": { source: "iana", compressible: true }, "application/riscos": { source: "iana" }, "application/rlmi+xml": { source: "iana", compressible: true }, "application/rls-services+xml": { source: "iana", compressible: true, extensions: ["rs"] }, "application/route-apd+xml": { source: "iana", compressible: true, extensions: ["rapd"] }, "application/route-s-tsid+xml": { source: "iana", compressible: true, extensions: ["sls"] }, "application/route-usd+xml": { source: "iana", compressible: true, extensions: ["rusd"] }, "application/rpki-ghostbusters": { source: "iana", extensions: ["gbr"] }, "application/rpki-manifest": { source: "iana", extensions: ["mft"] }, "application/rpki-publication": { source: "iana" }, "application/rpki-roa": { source: "iana", extensions: ["roa"] }, "application/rpki-updown": { source: "iana" }, "application/rsd+xml": { source: "apache", compressible: true, extensions: ["rsd"] }, "application/rss+xml": { source: "apache", compressible: true, extensions: ["rss"] }, "application/rtf": { source: "iana", compressible: true, extensions: ["rtf"] }, "application/rtploopback": { source: "iana" }, "application/rtx": { source: "iana" }, "application/samlassertion+xml": { source: "iana", compressible: true }, "application/samlmetadata+xml": { source: "iana", compressible: true }, "application/sarif+json": { source: "iana", compressible: true }, "application/sarif-external-properties+json": { source: "iana", compressible: true }, "application/sbe": { source: "iana" }, "application/sbml+xml": { source: "iana", compressible: true, extensions: ["sbml"] }, "application/scaip+xml": { source: "iana", compressible: true }, "application/scim+json": { source: "iana", compressible: true }, "application/scvp-cv-request": { source: "iana", extensions: ["scq"] }, "application/scvp-cv-response": { source: "iana", extensions: ["scs"] }, "application/scvp-vp-request": { source: "iana", extensions: ["spq"] }, "application/scvp-vp-response": { source: "iana", extensions: ["spp"] }, "application/sdp": { source: "iana", extensions: ["sdp"] }, "application/secevent+jwt": { source: "iana" }, "application/senml+cbor": { source: "iana" }, "application/senml+json": { source: "iana", compressible: true }, "application/senml+xml": { source: "iana", compressible: true, extensions: ["senmlx"] }, "application/senml-etch+cbor": { source: "iana" }, "application/senml-etch+json": { source: "iana", compressible: true }, "application/senml-exi": { source: "iana" }, "application/sensml+cbor": { source: "iana" }, "application/sensml+json": { source: "iana", compressible: true }, "application/sensml+xml": { source: "iana", compressible: true, extensions: ["sensmlx"] }, "application/sensml-exi": { source: "iana" }, "application/sep+xml": { source: "iana", compressible: true }, "application/sep-exi": { source: "iana" }, "application/session-info": { source: "iana" }, "application/set-payment": { source: "iana" }, "application/set-payment-initiation": { source: "iana", extensions: ["setpay"] }, "application/set-registration": { source: "iana" }, "application/set-registration-initiation": { source: "iana", extensions: ["setreg"] }, "application/sgml": { source: "iana" }, "application/sgml-open-catalog": { source: "iana" }, "application/shf+xml": { source: "iana", compressible: true, extensions: ["shf"] }, "application/sieve": { source: "iana", extensions: ["siv", "sieve"] }, "application/simple-filter+xml": { source: "iana", compressible: true }, "application/simple-message-summary": { source: "iana" }, "application/simplesymbolcontainer": { source: "iana" }, "application/sipc": { source: "iana" }, "application/slate": { source: "iana" }, "application/smil": { source: "iana" }, "application/smil+xml": { source: "iana", compressible: true, extensions: ["smi", "smil"] }, "application/smpte336m": { source: "iana" }, "application/soap+fastinfoset": { source: "iana" }, "application/soap+xml": { source: "iana", compressible: true }, "application/sparql-query": { source: "iana", extensions: ["rq"] }, "application/sparql-results+xml": { source: "iana", compressible: true, extensions: ["srx"] }, "application/spdx+json": { source: "iana", compressible: true }, "application/spirits-event+xml": { source: "iana", compressible: true }, "application/sql": { source: "iana" }, "application/srgs": { source: "iana", extensions: ["gram"] }, "application/srgs+xml": { source: "iana", compressible: true, extensions: ["grxml"] }, "application/sru+xml": { source: "iana", compressible: true, extensions: ["sru"] }, "application/ssdl+xml": { source: "apache", compressible: true, extensions: ["ssdl"] }, "application/ssml+xml": { source: "iana", compressible: true, extensions: ["ssml"] }, "application/stix+json": { source: "iana", compressible: true }, "application/swid+xml": { source: "iana", compressible: true, extensions: ["swidtag"] }, "application/tamp-apex-update": { source: "iana" }, "application/tamp-apex-update-confirm": { source: "iana" }, "application/tamp-community-update": { source: "iana" }, "application/tamp-community-update-confirm": { source: "iana" }, "application/tamp-error": { source: "iana" }, "application/tamp-sequence-adjust": { source: "iana" }, "application/tamp-sequence-adjust-confirm": { source: "iana" }, "application/tamp-status-query": { source: "iana" }, "application/tamp-status-response": { source: "iana" }, "application/tamp-update": { source: "iana" }, "application/tamp-update-confirm": { source: "iana" }, "application/tar": { compressible: true }, "application/taxii+json": { source: "iana", compressible: true }, "application/td+json": { source: "iana", compressible: true }, "application/tei+xml": { source: "iana", compressible: true, extensions: ["tei", "teicorpus"] }, "application/tetra_isi": { source: "iana" }, "application/thraud+xml": { source: "iana", compressible: true, extensions: ["tfi"] }, "application/timestamp-query": { source: "iana" }, "application/timestamp-reply": { source: "iana" }, "application/timestamped-data": { source: "iana", extensions: ["tsd"] }, "application/tlsrpt+gzip": { source: "iana" }, "application/tlsrpt+json": { source: "iana", compressible: true }, "application/tnauthlist": { source: "iana" }, "application/token-introspection+jwt": { source: "iana" }, "application/toml": { compressible: true, extensions: ["toml"] }, "application/trickle-ice-sdpfrag": { source: "iana" }, "application/trig": { source: "iana", extensions: ["trig"] }, "application/ttml+xml": { source: "iana", compressible: true, extensions: ["ttml"] }, "application/tve-trigger": { source: "iana" }, "application/tzif": { source: "iana" }, "application/tzif-leap": { source: "iana" }, "application/ubjson": { compressible: false, extensions: ["ubj"] }, "application/ulpfec": { source: "iana" }, "application/urc-grpsheet+xml": { source: "iana", compressible: true }, "application/urc-ressheet+xml": { source: "iana", compressible: true, extensions: ["rsheet"] }, "application/urc-targetdesc+xml": { source: "iana", compressible: true, extensions: ["td"] }, "application/urc-uisocketdesc+xml": { source: "iana", compressible: true }, "application/vcard+json": { source: "iana", compressible: true }, "application/vcard+xml": { source: "iana", compressible: true }, "application/vemmi": { source: "iana" }, "application/vividence.scriptfile": { source: "apache" }, "application/vnd.1000minds.decision-model+xml": { source: "iana", compressible: true, extensions: ["1km"] }, "application/vnd.3gpp-prose+xml": { source: "iana", compressible: true }, "application/vnd.3gpp-prose-pc3ch+xml": { source: "iana", compressible: true }, "application/vnd.3gpp-v2x-local-service-information": { source: "iana" }, "application/vnd.3gpp.5gnas": { source: "iana" }, "application/vnd.3gpp.access-transfer-events+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.bsf+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.gmop+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.gtpc": { source: "iana" }, "application/vnd.3gpp.interworking-data": { source: "iana" }, "application/vnd.3gpp.lpp": { source: "iana" }, "application/vnd.3gpp.mc-signalling-ear": { source: "iana" }, "application/vnd.3gpp.mcdata-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-payload": { source: "iana" }, "application/vnd.3gpp.mcdata-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-signalling": { source: "iana" }, "application/vnd.3gpp.mcdata-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcdata-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-floor-request+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-location-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-signed+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-ue-init-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcptt-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-affiliation-command+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-affiliation-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-location-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-service-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-transmission-request+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-ue-config+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mcvideo-user-profile+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.mid-call+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.ngap": { source: "iana" }, "application/vnd.3gpp.pfcp": { source: "iana" }, "application/vnd.3gpp.pic-bw-large": { source: "iana", extensions: ["plb"] }, "application/vnd.3gpp.pic-bw-small": { source: "iana", extensions: ["psb"] }, "application/vnd.3gpp.pic-bw-var": { source: "iana", extensions: ["pvb"] }, "application/vnd.3gpp.s1ap": { source: "iana" }, "application/vnd.3gpp.sms": { source: "iana" }, "application/vnd.3gpp.sms+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.srvcc-ext+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.srvcc-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.state-and-event-info+xml": { source: "iana", compressible: true }, "application/vnd.3gpp.ussd+xml": { source: "iana", compressible: true }, "application/vnd.3gpp2.bcmcsinfo+xml": { source: "iana", compressible: true }, "application/vnd.3gpp2.sms": { source: "iana" }, "application/vnd.3gpp2.tcap": { source: "iana", extensions: ["tcap"] }, "application/vnd.3lightssoftware.imagescal": { source: "iana" }, "application/vnd.3m.post-it-notes": { source: "iana", extensions: ["pwn"] }, "application/vnd.accpac.simply.aso": { source: "iana", extensions: ["aso"] }, "application/vnd.accpac.simply.imp": { source: "iana", extensions: ["imp"] }, "application/vnd.acucobol": { source: "iana", extensions: ["acu"] }, "application/vnd.acucorp": { source: "iana", extensions: ["atc", "acutc"] }, "application/vnd.adobe.air-application-installer-package+zip": { source: "apache", compressible: false, extensions: ["air"] }, "application/vnd.adobe.flash.movie": { source: "iana" }, "application/vnd.adobe.formscentral.fcdt": { source: "iana", extensions: ["fcdt"] }, "application/vnd.adobe.fxp": { source: "iana", extensions: ["fxp", "fxpl"] }, "application/vnd.adobe.partial-upload": { source: "iana" }, "application/vnd.adobe.xdp+xml": { source: "iana", compressible: true, extensions: ["xdp"] }, "application/vnd.adobe.xfdf": { source: "iana", extensions: ["xfdf"] }, "application/vnd.aether.imp": { source: "iana" }, "application/vnd.afpc.afplinedata": { source: "iana" }, "application/vnd.afpc.afplinedata-pagedef": { source: "iana" }, "application/vnd.afpc.cmoca-cmresource": { source: "iana" }, "application/vnd.afpc.foca-charset": { source: "iana" }, "application/vnd.afpc.foca-codedfont": { source: "iana" }, "application/vnd.afpc.foca-codepage": { source: "iana" }, "application/vnd.afpc.modca": { source: "iana" }, "application/vnd.afpc.modca-cmtable": { source: "iana" }, "application/vnd.afpc.modca-formdef": { source: "iana" }, "application/vnd.afpc.modca-mediummap": { source: "iana" }, "application/vnd.afpc.modca-objectcontainer": { source: "iana" }, "application/vnd.afpc.modca-overlay": { source: "iana" }, "application/vnd.afpc.modca-pagesegment": { source: "iana" }, "application/vnd.age": { source: "iana", extensions: ["age"] }, "application/vnd.ah-barcode": { source: "iana" }, "application/vnd.ahead.space": { source: "iana", extensions: ["ahead"] }, "application/vnd.airzip.filesecure.azf": { source: "iana", extensions: ["azf"] }, "application/vnd.airzip.filesecure.azs": { source: "iana", extensions: ["azs"] }, "application/vnd.amadeus+json": { source: "iana", compressible: true }, "application/vnd.amazon.ebook": { source: "apache", extensions: ["azw"] }, "application/vnd.amazon.mobi8-ebook": { source: "iana" }, "application/vnd.americandynamics.acc": { source: "iana", extensions: ["acc"] }, "application/vnd.amiga.ami": { source: "iana", extensions: ["ami"] }, "application/vnd.amundsen.maze+xml": { source: "iana", compressible: true }, "application/vnd.android.ota": { source: "iana" }, "application/vnd.android.package-archive": { source: "apache", compressible: false, extensions: ["apk"] }, "application/vnd.anki": { source: "iana" }, "application/vnd.anser-web-certificate-issue-initiation": { source: "iana", extensions: ["cii"] }, "application/vnd.anser-web-funds-transfer-initiation": { source: "apache", extensions: ["fti"] }, "application/vnd.antix.game-component": { source: "iana", extensions: ["atx"] }, "application/vnd.apache.arrow.file": { source: "iana" }, "application/vnd.apache.arrow.stream": { source: "iana" }, "application/vnd.apache.thrift.binary": { source: "iana" }, "application/vnd.apache.thrift.compact": { source: "iana" }, "application/vnd.apache.thrift.json": { source: "iana" }, "application/vnd.api+json": { source: "iana", compressible: true }, "application/vnd.aplextor.warrp+json": { source: "iana", compressible: true }, "application/vnd.apothekende.reservation+json": { source: "iana", compressible: true }, "application/vnd.apple.installer+xml": { source: "iana", compressible: true, extensions: ["mpkg"] }, "application/vnd.apple.keynote": { source: "iana", extensions: ["key"] }, "application/vnd.apple.mpegurl": { source: "iana", extensions: ["m3u8"] }, "application/vnd.apple.numbers": { source: "iana", extensions: ["numbers"] }, "application/vnd.apple.pages": { source: "iana", extensions: ["pages"] }, "application/vnd.apple.pkpass": { compressible: false, extensions: ["pkpass"] }, "application/vnd.arastra.swi": { source: "iana" }, "application/vnd.aristanetworks.swi": { source: "iana", extensions: ["swi"] }, "application/vnd.artisan+json": { source: "iana", compressible: true }, "application/vnd.artsquare": { source: "iana" }, "application/vnd.astraea-software.iota": { source: "iana", extensions: ["iota"] }, "application/vnd.audiograph": { source: "iana", extensions: ["aep"] }, "application/vnd.autopackage": { source: "iana" }, "application/vnd.avalon+json": { source: "iana", compressible: true }, "application/vnd.avistar+xml": { source: "iana", compressible: true }, "application/vnd.balsamiq.bmml+xml": { source: "iana", compressible: true, extensions: ["bmml"] }, "application/vnd.balsamiq.bmpr": { source: "iana" }, "application/vnd.banana-accounting": { source: "iana" }, "application/vnd.bbf.usp.error": { source: "iana" }, "application/vnd.bbf.usp.msg": { source: "iana" }, "application/vnd.bbf.usp.msg+json": { source: "iana", compressible: true }, "application/vnd.bekitzur-stech+json": { source: "iana", compressible: true }, "application/vnd.bint.med-content": { source: "iana" }, "application/vnd.biopax.rdf+xml": { source: "iana", compressible: true }, "application/vnd.blink-idb-value-wrapper": { source: "iana" }, "application/vnd.blueice.multipass": { source: "iana", extensions: ["mpm"] }, "application/vnd.bluetooth.ep.oob": { source: "iana" }, "application/vnd.bluetooth.le.oob": { source: "iana" }, "application/vnd.bmi": { source: "iana", extensions: ["bmi"] }, "application/vnd.bpf": { source: "iana" }, "application/vnd.bpf3": { source: "iana" }, "application/vnd.businessobjects": { source: "iana", extensions: ["rep"] }, "application/vnd.byu.uapi+json": { source: "iana", compressible: true }, "application/vnd.cab-jscript": { source: "iana" }, "application/vnd.canon-cpdl": { source: "iana" }, "application/vnd.canon-lips": { source: "iana" }, "application/vnd.capasystems-pg+json": { source: "iana", compressible: true }, "application/vnd.cendio.thinlinc.clientconf": { source: "iana" }, "application/vnd.century-systems.tcp_stream": { source: "iana" }, "application/vnd.chemdraw+xml": { source: "iana", compressible: true, extensions: ["cdxml"] }, "application/vnd.chess-pgn": { source: "iana" }, "application/vnd.chipnuts.karaoke-mmd": { source: "iana", extensions: ["mmd"] }, "application/vnd.ciedi": { source: "iana" }, "application/vnd.cinderella": { source: "iana", extensions: ["cdy"] }, "application/vnd.cirpack.isdn-ext": { source: "iana" }, "application/vnd.citationstyles.style+xml": { source: "iana", compressible: true, extensions: ["csl"] }, "application/vnd.claymore": { source: "iana", extensions: ["cla"] }, "application/vnd.cloanto.rp9": { source: "iana", extensions: ["rp9"] }, "application/vnd.clonk.c4group": { source: "iana", extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] }, "application/vnd.cluetrust.cartomobile-config": { source: "iana", extensions: ["c11amc"] }, "application/vnd.cluetrust.cartomobile-config-pkg": { source: "iana", extensions: ["c11amz"] }, "application/vnd.coffeescript": { source: "iana" }, "application/vnd.collabio.xodocuments.document": { source: "iana" }, "application/vnd.collabio.xodocuments.document-template": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation-template": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet-template": { source: "iana" }, "application/vnd.collection+json": { source: "iana", compressible: true }, "application/vnd.collection.doc+json": { source: "iana", compressible: true }, "application/vnd.collection.next+json": { source: "iana", compressible: true }, "application/vnd.comicbook+zip": { source: "iana", compressible: false }, "application/vnd.comicbook-rar": { source: "iana" }, "application/vnd.commerce-battelle": { source: "iana" }, "application/vnd.commonspace": { source: "iana", extensions: ["csp"] }, "application/vnd.contact.cmsg": { source: "iana", extensions: ["cdbcmsg"] }, "application/vnd.coreos.ignition+json": { source: "iana", compressible: true }, "application/vnd.cosmocaller": { source: "iana", extensions: ["cmc"] }, "application/vnd.crick.clicker": { source: "iana", extensions: ["clkx"] }, "application/vnd.crick.clicker.keyboard": { source: "iana", extensions: ["clkk"] }, "application/vnd.crick.clicker.palette": { source: "iana", extensions: ["clkp"] }, "application/vnd.crick.clicker.template": { source: "iana", extensions: ["clkt"] }, "application/vnd.crick.clicker.wordbank": { source: "iana", extensions: ["clkw"] }, "application/vnd.criticaltools.wbs+xml": { source: "iana", compressible: true, extensions: ["wbs"] }, "application/vnd.cryptii.pipe+json": { source: "iana", compressible: true }, "application/vnd.crypto-shade-file": { source: "iana" }, "application/vnd.cryptomator.encrypted": { source: "iana" }, "application/vnd.cryptomator.vault": { source: "iana" }, "application/vnd.ctc-posml": { source: "iana", extensions: ["pml"] }, "application/vnd.ctct.ws+xml": { source: "iana", compressible: true }, "application/vnd.cups-pdf": { source: "iana" }, "application/vnd.cups-postscript": { source: "iana" }, "application/vnd.cups-ppd": { source: "iana", extensions: ["ppd"] }, "application/vnd.cups-raster": { source: "iana" }, "application/vnd.cups-raw": { source: "iana" }, "application/vnd.curl": { source: "iana" }, "application/vnd.curl.car": { source: "apache", extensions: ["car"] }, "application/vnd.curl.pcurl": { source: "apache", extensions: ["pcurl"] }, "application/vnd.cyan.dean.root+xml": { source: "iana", compressible: true }, "application/vnd.cybank": { source: "iana" }, "application/vnd.cyclonedx+json": { source: "iana", compressible: true }, "application/vnd.cyclonedx+xml": { source: "iana", compressible: true }, "application/vnd.d2l.coursepackage1p0+zip": { source: "iana", compressible: false }, "application/vnd.d3m-dataset": { source: "iana" }, "application/vnd.d3m-problem": { source: "iana" }, "application/vnd.dart": { source: "iana", compressible: true, extensions: ["dart"] }, "application/vnd.data-vision.rdz": { source: "iana", extensions: ["rdz"] }, "application/vnd.datapackage+json": { source: "iana", compressible: true }, "application/vnd.dataresource+json": { source: "iana", compressible: true }, "application/vnd.dbf": { source: "iana", extensions: ["dbf"] }, "application/vnd.debian.binary-package": { source: "iana" }, "application/vnd.dece.data": { source: "iana", extensions: ["uvf", "uvvf", "uvd", "uvvd"] }, "application/vnd.dece.ttml+xml": { source: "iana", compressible: true, extensions: ["uvt", "uvvt"] }, "application/vnd.dece.unspecified": { source: "iana", extensions: ["uvx", "uvvx"] }, "application/vnd.dece.zip": { source: "iana", extensions: ["uvz", "uvvz"] }, "application/vnd.denovo.fcselayout-link": { source: "iana", extensions: ["fe_launch"] }, "application/vnd.desmume.movie": { source: "iana" }, "application/vnd.dir-bi.plate-dl-nosuffix": { source: "iana" }, "application/vnd.dm.delegation+xml": { source: "iana", compressible: true }, "application/vnd.dna": { source: "iana", extensions: ["dna"] }, "application/vnd.document+json": { source: "iana", compressible: true }, "application/vnd.dolby.mlp": { source: "apache", extensions: ["mlp"] }, "application/vnd.dolby.mobile.1": { source: "iana" }, "application/vnd.dolby.mobile.2": { source: "iana" }, "application/vnd.doremir.scorecloud-binary-document": { source: "iana" }, "application/vnd.dpgraph": { source: "iana", extensions: ["dpg"] }, "application/vnd.dreamfactory": { source: "iana", extensions: ["dfac"] }, "application/vnd.drive+json": { source: "iana", compressible: true }, "application/vnd.ds-keypoint": { source: "apache", extensions: ["kpxx"] }, "application/vnd.dtg.local": { source: "iana" }, "application/vnd.dtg.local.flash": { source: "iana" }, "application/vnd.dtg.local.html": { source: "iana" }, "application/vnd.dvb.ait": { source: "iana", extensions: ["ait"] }, "application/vnd.dvb.dvbisl+xml": { source: "iana", compressible: true }, "application/vnd.dvb.dvbj": { source: "iana" }, "application/vnd.dvb.esgcontainer": { source: "iana" }, "application/vnd.dvb.ipdcdftnotifaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess2": { source: "iana" }, "application/vnd.dvb.ipdcesgpdd": { source: "iana" }, "application/vnd.dvb.ipdcroaming": { source: "iana" }, "application/vnd.dvb.iptv.alfec-base": { source: "iana" }, "application/vnd.dvb.iptv.alfec-enhancement": { source: "iana" }, "application/vnd.dvb.notif-aggregate-root+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-container+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-generic+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-msglist+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-registration-request+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-ia-registration-response+xml": { source: "iana", compressible: true }, "application/vnd.dvb.notif-init+xml": { source: "iana", compressible: true }, "application/vnd.dvb.pfr": { source: "iana" }, "application/vnd.dvb.service": { source: "iana", extensions: ["svc"] }, "application/vnd.dxr": { source: "iana" }, "application/vnd.dynageo": { source: "iana", extensions: ["geo"] }, "application/vnd.dzr": { source: "iana" }, "application/vnd.easykaraoke.cdgdownload": { source: "iana" }, "application/vnd.ecdis-update": { source: "iana" }, "application/vnd.ecip.rlp": { source: "iana" }, "application/vnd.eclipse.ditto+json": { source: "iana", compressible: true }, "application/vnd.ecowin.chart": { source: "iana", extensions: ["mag"] }, "application/vnd.ecowin.filerequest": { source: "iana" }, "application/vnd.ecowin.fileupdate": { source: "iana" }, "application/vnd.ecowin.series": { source: "iana" }, "application/vnd.ecowin.seriesrequest": { source: "iana" }, "application/vnd.ecowin.seriesupdate": { source: "iana" }, "application/vnd.efi.img": { source: "iana" }, "application/vnd.efi.iso": { source: "iana" }, "application/vnd.emclient.accessrequest+xml": { source: "iana", compressible: true }, "application/vnd.enliven": { source: "iana", extensions: ["nml"] }, "application/vnd.enphase.envoy": { source: "iana" }, "application/vnd.eprints.data+xml": { source: "iana", compressible: true }, "application/vnd.epson.esf": { source: "iana", extensions: ["esf"] }, "application/vnd.epson.msf": { source: "iana", extensions: ["msf"] }, "application/vnd.epson.quickanime": { source: "iana", extensions: ["qam"] }, "application/vnd.epson.salt": { source: "iana", extensions: ["slt"] }, "application/vnd.epson.ssf": { source: "iana", extensions: ["ssf"] }, "application/vnd.ericsson.quickcall": { source: "iana" }, "application/vnd.espass-espass+zip": { source: "iana", compressible: false }, "application/vnd.eszigno3+xml": { source: "iana", compressible: true, extensions: ["es3", "et3"] }, "application/vnd.etsi.aoc+xml": { source: "iana", compressible: true }, "application/vnd.etsi.asic-e+zip": { source: "iana", compressible: false }, "application/vnd.etsi.asic-s+zip": { source: "iana", compressible: false }, "application/vnd.etsi.cug+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvcommand+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvdiscovery+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvprofile+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-bc+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-cod+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsad-npvr+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvservice+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvsync+xml": { source: "iana", compressible: true }, "application/vnd.etsi.iptvueprofile+xml": { source: "iana", compressible: true }, "application/vnd.etsi.mcid+xml": { source: "iana", compressible: true }, "application/vnd.etsi.mheg5": { source: "iana" }, "application/vnd.etsi.overload-control-policy-dataset+xml": { source: "iana", compressible: true }, "application/vnd.etsi.pstn+xml": { source: "iana", compressible: true }, "application/vnd.etsi.sci+xml": { source: "iana", compressible: true }, "application/vnd.etsi.simservs+xml": { source: "iana", compressible: true }, "application/vnd.etsi.timestamp-token": { source: "iana" }, "application/vnd.etsi.tsl+xml": { source: "iana", compressible: true }, "application/vnd.etsi.tsl.der": { source: "iana" }, "application/vnd.eu.kasparian.car+json": { source: "iana", compressible: true }, "application/vnd.eudora.data": { source: "iana" }, "application/vnd.evolv.ecig.profile": { source: "iana" }, "application/vnd.evolv.ecig.settings": { source: "iana" }, "application/vnd.evolv.ecig.theme": { source: "iana" }, "application/vnd.exstream-empower+zip": { source: "iana", compressible: false }, "application/vnd.exstream-package": { source: "iana" }, "application/vnd.ezpix-album": { source: "iana", extensions: ["ez2"] }, "application/vnd.ezpix-package": { source: "iana", extensions: ["ez3"] }, "application/vnd.f-secure.mobile": { source: "iana" }, "application/vnd.familysearch.gedcom+zip": { source: "iana", compressible: false }, "application/vnd.fastcopy-disk-image": { source: "iana" }, "application/vnd.fdf": { source: "iana", extensions: ["fdf"] }, "application/vnd.fdsn.mseed": { source: "iana", extensions: ["mseed"] }, "application/vnd.fdsn.seed": { source: "iana", extensions: ["seed", "dataless"] }, "application/vnd.ffsns": { source: "iana" }, "application/vnd.ficlab.flb+zip": { source: "iana", compressible: false }, "application/vnd.filmit.zfc": { source: "iana" }, "application/vnd.fints": { source: "iana" }, "application/vnd.firemonkeys.cloudcell": { source: "iana" }, "application/vnd.flographit": { source: "iana", extensions: ["gph"] }, "application/vnd.fluxtime.clip": { source: "iana", extensions: ["ftc"] }, "application/vnd.font-fontforge-sfd": { source: "iana" }, "application/vnd.framemaker": { source: "iana", extensions: ["fm", "frame", "maker", "book"] }, "application/vnd.frogans.fnc": { source: "iana", extensions: ["fnc"] }, "application/vnd.frogans.ltf": { source: "iana", extensions: ["ltf"] }, "application/vnd.fsc.weblaunch": { source: "iana", extensions: ["fsc"] }, "application/vnd.fujifilm.fb.docuworks": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.binder": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.container": { source: "iana" }, "application/vnd.fujifilm.fb.jfi+xml": { source: "iana", compressible: true }, "application/vnd.fujitsu.oasys": { source: "iana", extensions: ["oas"] }, "application/vnd.fujitsu.oasys2": { source: "iana", extensions: ["oa2"] }, "application/vnd.fujitsu.oasys3": { source: "iana", extensions: ["oa3"] }, "application/vnd.fujitsu.oasysgp": { source: "iana", extensions: ["fg5"] }, "application/vnd.fujitsu.oasysprs": { source: "iana", extensions: ["bh2"] }, "application/vnd.fujixerox.art-ex": { source: "iana" }, "application/vnd.fujixerox.art4": { source: "iana" }, "application/vnd.fujixerox.ddd": { source: "iana", extensions: ["ddd"] }, "application/vnd.fujixerox.docuworks": { source: "iana", extensions: ["xdw"] }, "application/vnd.fujixerox.docuworks.binder": { source: "iana", extensions: ["xbd"] }, "application/vnd.fujixerox.docuworks.container": { source: "iana" }, "application/vnd.fujixerox.hbpl": { source: "iana" }, "application/vnd.fut-misnet": { source: "iana" }, "application/vnd.futoin+cbor": { source: "iana" }, "application/vnd.futoin+json": { source: "iana", compressible: true }, "application/vnd.fuzzysheet": { source: "iana", extensions: ["fzs"] }, "application/vnd.genomatix.tuxedo": { source: "iana", extensions: ["txd"] }, "application/vnd.gentics.grd+json": { source: "iana", compressible: true }, "application/vnd.geo+json": { source: "iana", compressible: true }, "application/vnd.geocube+xml": { source: "iana", compressible: true }, "application/vnd.geogebra.file": { source: "iana", extensions: ["ggb"] }, "application/vnd.geogebra.slides": { source: "iana" }, "application/vnd.geogebra.tool": { source: "iana", extensions: ["ggt"] }, "application/vnd.geometry-explorer": { source: "iana", extensions: ["gex", "gre"] }, "application/vnd.geonext": { source: "iana", extensions: ["gxt"] }, "application/vnd.geoplan": { source: "iana", extensions: ["g2w"] }, "application/vnd.geospace": { source: "iana", extensions: ["g3w"] }, "application/vnd.gerber": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt-response": { source: "iana" }, "application/vnd.gmx": { source: "iana", extensions: ["gmx"] }, "application/vnd.google-apps.document": { compressible: false, extensions: ["gdoc"] }, "application/vnd.google-apps.presentation": { compressible: false, extensions: ["gslides"] }, "application/vnd.google-apps.spreadsheet": { compressible: false, extensions: ["gsheet"] }, "application/vnd.google-earth.kml+xml": { source: "iana", compressible: true, extensions: ["kml"] }, "application/vnd.google-earth.kmz": { source: "iana", compressible: false, extensions: ["kmz"] }, "application/vnd.gov.sk.e-form+xml": { source: "iana", compressible: true }, "application/vnd.gov.sk.e-form+zip": { source: "iana", compressible: false }, "application/vnd.gov.sk.xmldatacontainer+xml": { source: "iana", compressible: true }, "application/vnd.grafeq": { source: "iana", extensions: ["gqf", "gqs"] }, "application/vnd.gridmp": { source: "iana" }, "application/vnd.groove-account": { source: "iana", extensions: ["gac"] }, "application/vnd.groove-help": { source: "iana", extensions: ["ghf"] }, "application/vnd.groove-identity-message": { source: "iana", extensions: ["gim"] }, "application/vnd.groove-injector": { source: "iana", extensions: ["grv"] }, "application/vnd.groove-tool-message": { source: "iana", extensions: ["gtm"] }, "application/vnd.groove-tool-template": { source: "iana", extensions: ["tpl"] }, "application/vnd.groove-vcard": { source: "iana", extensions: ["vcg"] }, "application/vnd.hal+json": { source: "iana", compressible: true }, "application/vnd.hal+xml": { source: "iana", compressible: true, extensions: ["hal"] }, "application/vnd.handheld-entertainment+xml": { source: "iana", compressible: true, extensions: ["zmm"] }, "application/vnd.hbci": { source: "iana", extensions: ["hbci"] }, "application/vnd.hc+json": { source: "iana", compressible: true }, "application/vnd.hcl-bireports": { source: "iana" }, "application/vnd.hdt": { source: "iana" }, "application/vnd.heroku+json": { source: "iana", compressible: true }, "application/vnd.hhe.lesson-player": { source: "iana", extensions: ["les"] }, "application/vnd.hl7cda+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.hl7v2+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.hp-hpgl": { source: "iana", extensions: ["hpgl"] }, "application/vnd.hp-hpid": { source: "iana", extensions: ["hpid"] }, "application/vnd.hp-hps": { source: "iana", extensions: ["hps"] }, "application/vnd.hp-jlyt": { source: "iana", extensions: ["jlt"] }, "application/vnd.hp-pcl": { source: "iana", extensions: ["pcl"] }, "application/vnd.hp-pclxl": { source: "iana", extensions: ["pclxl"] }, "application/vnd.httphone": { source: "iana" }, "application/vnd.hydrostatix.sof-data": { source: "iana", extensions: ["sfd-hdstx"] }, "application/vnd.hyper+json": { source: "iana", compressible: true }, "application/vnd.hyper-item+json": { source: "iana", compressible: true }, "application/vnd.hyperdrive+json": { source: "iana", compressible: true }, "application/vnd.hzn-3d-crossword": { source: "iana" }, "application/vnd.ibm.afplinedata": { source: "iana" }, "application/vnd.ibm.electronic-media": { source: "iana" }, "application/vnd.ibm.minipay": { source: "iana", extensions: ["mpy"] }, "application/vnd.ibm.modcap": { source: "iana", extensions: ["afp", "listafp", "list3820"] }, "application/vnd.ibm.rights-management": { source: "iana", extensions: ["irm"] }, "application/vnd.ibm.secure-container": { source: "iana", extensions: ["sc"] }, "application/vnd.iccprofile": { source: "iana", extensions: ["icc", "icm"] }, "application/vnd.ieee.1905": { source: "iana" }, "application/vnd.igloader": { source: "iana", extensions: ["igl"] }, "application/vnd.imagemeter.folder+zip": { source: "iana", compressible: false }, "application/vnd.imagemeter.image+zip": { source: "iana", compressible: false }, "application/vnd.immervision-ivp": { source: "iana", extensions: ["ivp"] }, "application/vnd.immervision-ivu": { source: "iana", extensions: ["ivu"] }, "application/vnd.ims.imsccv1p1": { source: "iana" }, "application/vnd.ims.imsccv1p2": { source: "iana" }, "application/vnd.ims.imsccv1p3": { source: "iana" }, "application/vnd.ims.lis.v2.result+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolconsumerprofile+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolproxy+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolproxy.id+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolsettings+json": { source: "iana", compressible: true }, "application/vnd.ims.lti.v2.toolsettings.simple+json": { source: "iana", compressible: true }, "application/vnd.informedcontrol.rms+xml": { source: "iana", compressible: true }, "application/vnd.informix-visionary": { source: "iana" }, "application/vnd.infotech.project": { source: "iana" }, "application/vnd.infotech.project+xml": { source: "iana", compressible: true }, "application/vnd.innopath.wamp.notification": { source: "iana" }, "application/vnd.insors.igm": { source: "iana", extensions: ["igm"] }, "application/vnd.intercon.formnet": { source: "iana", extensions: ["xpw", "xpx"] }, "application/vnd.intergeo": { source: "iana", extensions: ["i2g"] }, "application/vnd.intertrust.digibox": { source: "iana" }, "application/vnd.intertrust.nncp": { source: "iana" }, "application/vnd.intu.qbo": { source: "iana", extensions: ["qbo"] }, "application/vnd.intu.qfx": { source: "iana", extensions: ["qfx"] }, "application/vnd.iptc.g2.catalogitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.conceptitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.knowledgeitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.newsitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.newsmessage+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.packageitem+xml": { source: "iana", compressible: true }, "application/vnd.iptc.g2.planningitem+xml": { source: "iana", compressible: true }, "application/vnd.ipunplugged.rcprofile": { source: "iana", extensions: ["rcprofile"] }, "application/vnd.irepository.package+xml": { source: "iana", compressible: true, extensions: ["irp"] }, "application/vnd.is-xpr": { source: "iana", extensions: ["xpr"] }, "application/vnd.isac.fcs": { source: "iana", extensions: ["fcs"] }, "application/vnd.iso11783-10+zip": { source: "iana", compressible: false }, "application/vnd.jam": { source: "iana", extensions: ["jam"] }, "application/vnd.japannet-directory-service": { source: "iana" }, "application/vnd.japannet-jpnstore-wakeup": { source: "iana" }, "application/vnd.japannet-payment-wakeup": { source: "iana" }, "application/vnd.japannet-registration": { source: "iana" }, "application/vnd.japannet-registration-wakeup": { source: "iana" }, "application/vnd.japannet-setstore-wakeup": { source: "iana" }, "application/vnd.japannet-verification": { source: "iana" }, "application/vnd.japannet-verification-wakeup": { source: "iana" }, "application/vnd.jcp.javame.midlet-rms": { source: "iana", extensions: ["rms"] }, "application/vnd.jisp": { source: "iana", extensions: ["jisp"] }, "application/vnd.joost.joda-archive": { source: "iana", extensions: ["joda"] }, "application/vnd.jsk.isdn-ngn": { source: "iana" }, "application/vnd.kahootz": { source: "iana", extensions: ["ktz", "ktr"] }, "application/vnd.kde.karbon": { source: "iana", extensions: ["karbon"] }, "application/vnd.kde.kchart": { source: "iana", extensions: ["chrt"] }, "application/vnd.kde.kformula": { source: "iana", extensions: ["kfo"] }, "application/vnd.kde.kivio": { source: "iana", extensions: ["flw"] }, "application/vnd.kde.kontour": { source: "iana", extensions: ["kon"] }, "application/vnd.kde.kpresenter": { source: "iana", extensions: ["kpr", "kpt"] }, "application/vnd.kde.kspread": { source: "iana", extensions: ["ksp"] }, "application/vnd.kde.kword": { source: "iana", extensions: ["kwd", "kwt"] }, "application/vnd.kenameaapp": { source: "iana", extensions: ["htke"] }, "application/vnd.kidspiration": { source: "iana", extensions: ["kia"] }, "application/vnd.kinar": { source: "iana", extensions: ["kne", "knp"] }, "application/vnd.koan": { source: "iana", extensions: ["skp", "skd", "skt", "skm"] }, "application/vnd.kodak-descriptor": { source: "iana", extensions: ["sse"] }, "application/vnd.las": { source: "iana" }, "application/vnd.las.las+json": { source: "iana", compressible: true }, "application/vnd.las.las+xml": { source: "iana", compressible: true, extensions: ["lasxml"] }, "application/vnd.laszip": { source: "iana" }, "application/vnd.leap+json": { source: "iana", compressible: true }, "application/vnd.liberty-request+xml": { source: "iana", compressible: true }, "application/vnd.llamagraphics.life-balance.desktop": { source: "iana", extensions: ["lbd"] }, "application/vnd.llamagraphics.life-balance.exchange+xml": { source: "iana", compressible: true, extensions: ["lbe"] }, "application/vnd.logipipe.circuit+zip": { source: "iana", compressible: false }, "application/vnd.loom": { source: "iana" }, "application/vnd.lotus-1-2-3": { source: "iana", extensions: ["123"] }, "application/vnd.lotus-approach": { source: "iana", extensions: ["apr"] }, "application/vnd.lotus-freelance": { source: "iana", extensions: ["pre"] }, "application/vnd.lotus-notes": { source: "iana", extensions: ["nsf"] }, "application/vnd.lotus-organizer": { source: "iana", extensions: ["org"] }, "application/vnd.lotus-screencam": { source: "iana", extensions: ["scm"] }, "application/vnd.lotus-wordpro": { source: "iana", extensions: ["lwp"] }, "application/vnd.macports.portpkg": { source: "iana", extensions: ["portpkg"] }, "application/vnd.mapbox-vector-tile": { source: "iana", extensions: ["mvt"] }, "application/vnd.marlin.drm.actiontoken+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.conftoken+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.license+xml": { source: "iana", compressible: true }, "application/vnd.marlin.drm.mdcf": { source: "iana" }, "application/vnd.mason+json": { source: "iana", compressible: true }, "application/vnd.maxar.archive.3tz+zip": { source: "iana", compressible: false }, "application/vnd.maxmind.maxmind-db": { source: "iana" }, "application/vnd.mcd": { source: "iana", extensions: ["mcd"] }, "application/vnd.medcalcdata": { source: "iana", extensions: ["mc1"] }, "application/vnd.mediastation.cdkey": { source: "iana", extensions: ["cdkey"] }, "application/vnd.meridian-slingshot": { source: "iana" }, "application/vnd.mfer": { source: "iana", extensions: ["mwf"] }, "application/vnd.mfmp": { source: "iana", extensions: ["mfm"] }, "application/vnd.micro+json": { source: "iana", compressible: true }, "application/vnd.micrografx.flo": { source: "iana", extensions: ["flo"] }, "application/vnd.micrografx.igx": { source: "iana", extensions: ["igx"] }, "application/vnd.microsoft.portable-executable": { source: "iana" }, "application/vnd.microsoft.windows.thumbnail-cache": { source: "iana" }, "application/vnd.miele+json": { source: "iana", compressible: true }, "application/vnd.mif": { source: "iana", extensions: ["mif"] }, "application/vnd.minisoft-hp3000-save": { source: "iana" }, "application/vnd.mitsubishi.misty-guard.trustweb": { source: "iana" }, "application/vnd.mobius.daf": { source: "iana", extensions: ["daf"] }, "application/vnd.mobius.dis": { source: "iana", extensions: ["dis"] }, "application/vnd.mobius.mbk": { source: "iana", extensions: ["mbk"] }, "application/vnd.mobius.mqy": { source: "iana", extensions: ["mqy"] }, "application/vnd.mobius.msl": { source: "iana", extensions: ["msl"] }, "application/vnd.mobius.plc": { source: "iana", extensions: ["plc"] }, "application/vnd.mobius.txf": { source: "iana", extensions: ["txf"] }, "application/vnd.mophun.application": { source: "iana", extensions: ["mpn"] }, "application/vnd.mophun.certificate": { source: "iana", extensions: ["mpc"] }, "application/vnd.motorola.flexsuite": { source: "iana" }, "application/vnd.motorola.flexsuite.adsi": { source: "iana" }, "application/vnd.motorola.flexsuite.fis": { source: "iana" }, "application/vnd.motorola.flexsuite.gotap": { source: "iana" }, "application/vnd.motorola.flexsuite.kmr": { source: "iana" }, "application/vnd.motorola.flexsuite.ttc": { source: "iana" }, "application/vnd.motorola.flexsuite.wem": { source: "iana" }, "application/vnd.motorola.iprm": { source: "iana" }, "application/vnd.mozilla.xul+xml": { source: "iana", compressible: true, extensions: ["xul"] }, "application/vnd.ms-3mfdocument": { source: "iana" }, "application/vnd.ms-artgalry": { source: "iana", extensions: ["cil"] }, "application/vnd.ms-asf": { source: "iana" }, "application/vnd.ms-cab-compressed": { source: "iana", extensions: ["cab"] }, "application/vnd.ms-color.iccprofile": { source: "apache" }, "application/vnd.ms-excel": { source: "iana", compressible: false, extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] }, "application/vnd.ms-excel.addin.macroenabled.12": { source: "iana", extensions: ["xlam"] }, "application/vnd.ms-excel.sheet.binary.macroenabled.12": { source: "iana", extensions: ["xlsb"] }, "application/vnd.ms-excel.sheet.macroenabled.12": { source: "iana", extensions: ["xlsm"] }, "application/vnd.ms-excel.template.macroenabled.12": { source: "iana", extensions: ["xltm"] }, "application/vnd.ms-fontobject": { source: "iana", compressible: true, extensions: ["eot"] }, "application/vnd.ms-htmlhelp": { source: "iana", extensions: ["chm"] }, "application/vnd.ms-ims": { source: "iana", extensions: ["ims"] }, "application/vnd.ms-lrm": { source: "iana", extensions: ["lrm"] }, "application/vnd.ms-office.activex+xml": { source: "iana", compressible: true }, "application/vnd.ms-officetheme": { source: "iana", extensions: ["thmx"] }, "application/vnd.ms-opentype": { source: "apache", compressible: true }, "application/vnd.ms-outlook": { compressible: false, extensions: ["msg"] }, "application/vnd.ms-package.obfuscated-opentype": { source: "apache" }, "application/vnd.ms-pki.seccat": { source: "apache", extensions: ["cat"] }, "application/vnd.ms-pki.stl": { source: "apache", extensions: ["stl"] }, "application/vnd.ms-playready.initiator+xml": { source: "iana", compressible: true }, "application/vnd.ms-powerpoint": { source: "iana", compressible: false, extensions: ["ppt", "pps", "pot"] }, "application/vnd.ms-powerpoint.addin.macroenabled.12": { source: "iana", extensions: ["ppam"] }, "application/vnd.ms-powerpoint.presentation.macroenabled.12": { source: "iana", extensions: ["pptm"] }, "application/vnd.ms-powerpoint.slide.macroenabled.12": { source: "iana", extensions: ["sldm"] }, "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { source: "iana", extensions: ["ppsm"] }, "application/vnd.ms-powerpoint.template.macroenabled.12": { source: "iana", extensions: ["potm"] }, "application/vnd.ms-printdevicecapabilities+xml": { source: "iana", compressible: true }, "application/vnd.ms-printing.printticket+xml": { source: "apache", compressible: true }, "application/vnd.ms-printschematicket+xml": { source: "iana", compressible: true }, "application/vnd.ms-project": { source: "iana", extensions: ["mpp", "mpt"] }, "application/vnd.ms-tnef": { source: "iana" }, "application/vnd.ms-windows.devicepairing": { source: "iana" }, "application/vnd.ms-windows.nwprinting.oob": { source: "iana" }, "application/vnd.ms-windows.printerpairing": { source: "iana" }, "application/vnd.ms-windows.wsd.oob": { source: "iana" }, "application/vnd.ms-wmdrm.lic-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.lic-resp": { source: "iana" }, "application/vnd.ms-wmdrm.meter-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.meter-resp": { source: "iana" }, "application/vnd.ms-word.document.macroenabled.12": { source: "iana", extensions: ["docm"] }, "application/vnd.ms-word.template.macroenabled.12": { source: "iana", extensions: ["dotm"] }, "application/vnd.ms-works": { source: "iana", extensions: ["wps", "wks", "wcm", "wdb"] }, "application/vnd.ms-wpl": { source: "iana", extensions: ["wpl"] }, "application/vnd.ms-xpsdocument": { source: "iana", compressible: false, extensions: ["xps"] }, "application/vnd.msa-disk-image": { source: "iana" }, "application/vnd.mseq": { source: "iana", extensions: ["mseq"] }, "application/vnd.msign": { source: "iana" }, "application/vnd.multiad.creator": { source: "iana" }, "application/vnd.multiad.creator.cif": { source: "iana" }, "application/vnd.music-niff": { source: "iana" }, "application/vnd.musician": { source: "iana", extensions: ["mus"] }, "application/vnd.muvee.style": { source: "iana", extensions: ["msty"] }, "application/vnd.mynfc": { source: "iana", extensions: ["taglet"] }, "application/vnd.nacamar.ybrid+json": { source: "iana", compressible: true }, "application/vnd.ncd.control": { source: "iana" }, "application/vnd.ncd.reference": { source: "iana" }, "application/vnd.nearst.inv+json": { source: "iana", compressible: true }, "application/vnd.nebumind.line": { source: "iana" }, "application/vnd.nervana": { source: "iana" }, "application/vnd.netfpx": { source: "iana" }, "application/vnd.neurolanguage.nlu": { source: "iana", extensions: ["nlu"] }, "application/vnd.nimn": { source: "iana" }, "application/vnd.nintendo.nitro.rom": { source: "iana" }, "application/vnd.nintendo.snes.rom": { source: "iana" }, "application/vnd.nitf": { source: "iana", extensions: ["ntf", "nitf"] }, "application/vnd.noblenet-directory": { source: "iana", extensions: ["nnd"] }, "application/vnd.noblenet-sealer": { source: "iana", extensions: ["nns"] }, "application/vnd.noblenet-web": { source: "iana", extensions: ["nnw"] }, "application/vnd.nokia.catalogs": { source: "iana" }, "application/vnd.nokia.conml+wbxml": { source: "iana" }, "application/vnd.nokia.conml+xml": { source: "iana", compressible: true }, "application/vnd.nokia.iptv.config+xml": { source: "iana", compressible: true }, "application/vnd.nokia.isds-radio-presets": { source: "iana" }, "application/vnd.nokia.landmark+wbxml": { source: "iana" }, "application/vnd.nokia.landmark+xml": { source: "iana", compressible: true }, "application/vnd.nokia.landmarkcollection+xml": { source: "iana", compressible: true }, "application/vnd.nokia.n-gage.ac+xml": { source: "iana", compressible: true, extensions: ["ac"] }, "application/vnd.nokia.n-gage.data": { source: "iana", extensions: ["ngdat"] }, "application/vnd.nokia.n-gage.symbian.install": { source: "iana", extensions: ["n-gage"] }, "application/vnd.nokia.ncd": { source: "iana" }, "application/vnd.nokia.pcd+wbxml": { source: "iana" }, "application/vnd.nokia.pcd+xml": { source: "iana", compressible: true }, "application/vnd.nokia.radio-preset": { source: "iana", extensions: ["rpst"] }, "application/vnd.nokia.radio-presets": { source: "iana", extensions: ["rpss"] }, "application/vnd.novadigm.edm": { source: "iana", extensions: ["edm"] }, "application/vnd.novadigm.edx": { source: "iana", extensions: ["edx"] }, "application/vnd.novadigm.ext": { source: "iana", extensions: ["ext"] }, "application/vnd.ntt-local.content-share": { source: "iana" }, "application/vnd.ntt-local.file-transfer": { source: "iana" }, "application/vnd.ntt-local.ogw_remote-access": { source: "iana" }, "application/vnd.ntt-local.sip-ta_remote": { source: "iana" }, "application/vnd.ntt-local.sip-ta_tcp_stream": { source: "iana" }, "application/vnd.oasis.opendocument.chart": { source: "iana", extensions: ["odc"] }, "application/vnd.oasis.opendocument.chart-template": { source: "iana", extensions: ["otc"] }, "application/vnd.oasis.opendocument.database": { source: "iana", extensions: ["odb"] }, "application/vnd.oasis.opendocument.formula": { source: "iana", extensions: ["odf"] }, "application/vnd.oasis.opendocument.formula-template": { source: "iana", extensions: ["odft"] }, "application/vnd.oasis.opendocument.graphics": { source: "iana", compressible: false, extensions: ["odg"] }, "application/vnd.oasis.opendocument.graphics-template": { source: "iana", extensions: ["otg"] }, "application/vnd.oasis.opendocument.image": { source: "iana", extensions: ["odi"] }, "application/vnd.oasis.opendocument.image-template": { source: "iana", extensions: ["oti"] }, "application/vnd.oasis.opendocument.presentation": { source: "iana", compressible: false, extensions: ["odp"] }, "application/vnd.oasis.opendocument.presentation-template": { source: "iana", extensions: ["otp"] }, "application/vnd.oasis.opendocument.spreadsheet": { source: "iana", compressible: false, extensions: ["ods"] }, "application/vnd.oasis.opendocument.spreadsheet-template": { source: "iana", extensions: ["ots"] }, "application/vnd.oasis.opendocument.text": { source: "iana", compressible: false, extensions: ["odt"] }, "application/vnd.oasis.opendocument.text-master": { source: "iana", extensions: ["odm"] }, "application/vnd.oasis.opendocument.text-template": { source: "iana", extensions: ["ott"] }, "application/vnd.oasis.opendocument.text-web": { source: "iana", extensions: ["oth"] }, "application/vnd.obn": { source: "iana" }, "application/vnd.ocf+cbor": { source: "iana" }, "application/vnd.oci.image.manifest.v1+json": { source: "iana", compressible: true }, "application/vnd.oftn.l10n+json": { source: "iana", compressible: true }, "application/vnd.oipf.contentaccessdownload+xml": { source: "iana", compressible: true }, "application/vnd.oipf.contentaccessstreaming+xml": { source: "iana", compressible: true }, "application/vnd.oipf.cspg-hexbinary": { source: "iana" }, "application/vnd.oipf.dae.svg+xml": { source: "iana", compressible: true }, "application/vnd.oipf.dae.xhtml+xml": { source: "iana", compressible: true }, "application/vnd.oipf.mippvcontrolmessage+xml": { source: "iana", compressible: true }, "application/vnd.oipf.pae.gem": { source: "iana" }, "application/vnd.oipf.spdiscovery+xml": { source: "iana", compressible: true }, "application/vnd.oipf.spdlist+xml": { source: "iana", compressible: true }, "application/vnd.oipf.ueprofile+xml": { source: "iana", compressible: true }, "application/vnd.oipf.userprofile+xml": { source: "iana", compressible: true }, "application/vnd.olpc-sugar": { source: "iana", extensions: ["xo"] }, "application/vnd.oma-scws-config": { source: "iana" }, "application/vnd.oma-scws-http-request": { source: "iana" }, "application/vnd.oma-scws-http-response": { source: "iana" }, "application/vnd.oma.bcast.associated-procedure-parameter+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.drm-trigger+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.imd+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.ltkm": { source: "iana" }, "application/vnd.oma.bcast.notification+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.provisioningtrigger": { source: "iana" }, "application/vnd.oma.bcast.sgboot": { source: "iana" }, "application/vnd.oma.bcast.sgdd+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.sgdu": { source: "iana" }, "application/vnd.oma.bcast.simple-symbol-container": { source: "iana" }, "application/vnd.oma.bcast.smartcard-trigger+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.sprov+xml": { source: "iana", compressible: true }, "application/vnd.oma.bcast.stkm": { source: "iana" }, "application/vnd.oma.cab-address-book+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-feature-handler+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-pcc+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-subs-invite+xml": { source: "iana", compressible: true }, "application/vnd.oma.cab-user-prefs+xml": { source: "iana", compressible: true }, "application/vnd.oma.dcd": { source: "iana" }, "application/vnd.oma.dcdc": { source: "iana" }, "application/vnd.oma.dd2+xml": { source: "iana", compressible: true, extensions: ["dd2"] }, "application/vnd.oma.drm.risd+xml": { source: "iana", compressible: true }, "application/vnd.oma.group-usage-list+xml": { source: "iana", compressible: true }, "application/vnd.oma.lwm2m+cbor": { source: "iana" }, "application/vnd.oma.lwm2m+json": { source: "iana", compressible: true }, "application/vnd.oma.lwm2m+tlv": { source: "iana" }, "application/vnd.oma.pal+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.detailed-progress-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.final-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.groups+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.invocation-descriptor+xml": { source: "iana", compressible: true }, "application/vnd.oma.poc.optimized-progress-report+xml": { source: "iana", compressible: true }, "application/vnd.oma.push": { source: "iana" }, "application/vnd.oma.scidm.messages+xml": { source: "iana", compressible: true }, "application/vnd.oma.xcap-directory+xml": { source: "iana", compressible: true }, "application/vnd.omads-email+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omads-file+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omads-folder+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.omaloc-supl-init": { source: "iana" }, "application/vnd.onepager": { source: "iana" }, "application/vnd.onepagertamp": { source: "iana" }, "application/vnd.onepagertamx": { source: "iana" }, "application/vnd.onepagertat": { source: "iana" }, "application/vnd.onepagertatp": { source: "iana" }, "application/vnd.onepagertatx": { source: "iana" }, "application/vnd.openblox.game+xml": { source: "iana", compressible: true, extensions: ["obgx"] }, "application/vnd.openblox.game-binary": { source: "iana" }, "application/vnd.openeye.oeb": { source: "iana" }, "application/vnd.openofficeorg.extension": { source: "apache", extensions: ["oxt"] }, "application/vnd.openstreetmap.data+xml": { source: "iana", compressible: true, extensions: ["osm"] }, "application/vnd.opentimestamps.ots": { source: "iana" }, "application/vnd.openxmlformats-officedocument.custom-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawing+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.extended-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.presentation": { source: "iana", compressible: false, extensions: ["pptx"] }, "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slide": { source: "iana", extensions: ["sldx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { source: "iana", extensions: ["ppsx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.template": { source: "iana", extensions: ["potx"] }, "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { source: "iana", compressible: false, extensions: ["xlsx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { source: "iana", extensions: ["xltx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.theme+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.themeoverride+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.vmldrawing": { source: "iana" }, "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { source: "iana", compressible: false, extensions: ["docx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { source: "iana", extensions: ["dotx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.core-properties+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { source: "iana", compressible: true }, "application/vnd.openxmlformats-package.relationships+xml": { source: "iana", compressible: true }, "application/vnd.oracle.resource+json": { source: "iana", compressible: true }, "application/vnd.orange.indata": { source: "iana" }, "application/vnd.osa.netdeploy": { source: "iana" }, "application/vnd.osgeo.mapguide.package": { source: "iana", extensions: ["mgp"] }, "application/vnd.osgi.bundle": { source: "iana" }, "application/vnd.osgi.dp": { source: "iana", extensions: ["dp"] }, "application/vnd.osgi.subsystem": { source: "iana", extensions: ["esa"] }, "application/vnd.otps.ct-kip+xml": { source: "iana", compressible: true }, "application/vnd.oxli.countgraph": { source: "iana" }, "application/vnd.pagerduty+json": { source: "iana", compressible: true }, "application/vnd.palm": { source: "iana", extensions: ["pdb", "pqa", "oprc"] }, "application/vnd.panoply": { source: "iana" }, "application/vnd.paos.xml": { source: "iana" }, "application/vnd.patentdive": { source: "iana" }, "application/vnd.patientecommsdoc": { source: "iana" }, "application/vnd.pawaafile": { source: "iana", extensions: ["paw"] }, "application/vnd.pcos": { source: "iana" }, "application/vnd.pg.format": { source: "iana", extensions: ["str"] }, "application/vnd.pg.osasli": { source: "iana", extensions: ["ei6"] }, "application/vnd.piaccess.application-licence": { source: "iana" }, "application/vnd.picsel": { source: "iana", extensions: ["efif"] }, "application/vnd.pmi.widget": { source: "iana", extensions: ["wg"] }, "application/vnd.poc.group-advertisement+xml": { source: "iana", compressible: true }, "application/vnd.pocketlearn": { source: "iana", extensions: ["plf"] }, "application/vnd.powerbuilder6": { source: "iana", extensions: ["pbd"] }, "application/vnd.powerbuilder6-s": { source: "iana" }, "application/vnd.powerbuilder7": { source: "iana" }, "application/vnd.powerbuilder7-s": { source: "iana" }, "application/vnd.powerbuilder75": { source: "iana" }, "application/vnd.powerbuilder75-s": { source: "iana" }, "application/vnd.preminet": { source: "iana" }, "application/vnd.previewsystems.box": { source: "iana", extensions: ["box"] }, "application/vnd.proteus.magazine": { source: "iana", extensions: ["mgz"] }, "application/vnd.psfs": { source: "iana" }, "application/vnd.publishare-delta-tree": { source: "iana", extensions: ["qps"] }, "application/vnd.pvi.ptid1": { source: "iana", extensions: ["ptid"] }, "application/vnd.pwg-multiplexed": { source: "iana" }, "application/vnd.pwg-xhtml-print+xml": { source: "iana", compressible: true }, "application/vnd.qualcomm.brew-app-res": { source: "iana" }, "application/vnd.quarantainenet": { source: "iana" }, "application/vnd.quark.quarkxpress": { source: "iana", extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] }, "application/vnd.quobject-quoxdocument": { source: "iana" }, "application/vnd.radisys.moml+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-conf+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-conn+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-dialog+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-audit-stream+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-conf+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-base+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-fax-detect+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-group+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-speech+xml": { source: "iana", compressible: true }, "application/vnd.radisys.msml-dialog-transform+xml": { source: "iana", compressible: true }, "application/vnd.rainstor.data": { source: "iana" }, "application/vnd.rapid": { source: "iana" }, "application/vnd.rar": { source: "iana", extensions: ["rar"] }, "application/vnd.realvnc.bed": { source: "iana", extensions: ["bed"] }, "application/vnd.recordare.musicxml": { source: "iana", extensions: ["mxl"] }, "application/vnd.recordare.musicxml+xml": { source: "iana", compressible: true, extensions: ["musicxml"] }, "application/vnd.renlearn.rlprint": { source: "iana" }, "application/vnd.resilient.logic": { source: "iana" }, "application/vnd.restful+json": { source: "iana", compressible: true }, "application/vnd.rig.cryptonote": { source: "iana", extensions: ["cryptonote"] }, "application/vnd.rim.cod": { source: "apache", extensions: ["cod"] }, "application/vnd.rn-realmedia": { source: "apache", extensions: ["rm"] }, "application/vnd.rn-realmedia-vbr": { source: "apache", extensions: ["rmvb"] }, "application/vnd.route66.link66+xml": { source: "iana", compressible: true, extensions: ["link66"] }, "application/vnd.rs-274x": { source: "iana" }, "application/vnd.ruckus.download": { source: "iana" }, "application/vnd.s3sms": { source: "iana" }, "application/vnd.sailingtracker.track": { source: "iana", extensions: ["st"] }, "application/vnd.sar": { source: "iana" }, "application/vnd.sbm.cid": { source: "iana" }, "application/vnd.sbm.mid2": { source: "iana" }, "application/vnd.scribus": { source: "iana" }, "application/vnd.sealed.3df": { source: "iana" }, "application/vnd.sealed.csf": { source: "iana" }, "application/vnd.sealed.doc": { source: "iana" }, "application/vnd.sealed.eml": { source: "iana" }, "application/vnd.sealed.mht": { source: "iana" }, "application/vnd.sealed.net": { source: "iana" }, "application/vnd.sealed.ppt": { source: "iana" }, "application/vnd.sealed.tiff": { source: "iana" }, "application/vnd.sealed.xls": { source: "iana" }, "application/vnd.sealedmedia.softseal.html": { source: "iana" }, "application/vnd.sealedmedia.softseal.pdf": { source: "iana" }, "application/vnd.seemail": { source: "iana", extensions: ["see"] }, "application/vnd.seis+json": { source: "iana", compressible: true }, "application/vnd.sema": { source: "iana", extensions: ["sema"] }, "application/vnd.semd": { source: "iana", extensions: ["semd"] }, "application/vnd.semf": { source: "iana", extensions: ["semf"] }, "application/vnd.shade-save-file": { source: "iana" }, "application/vnd.shana.informed.formdata": { source: "iana", extensions: ["ifm"] }, "application/vnd.shana.informed.formtemplate": { source: "iana", extensions: ["itp"] }, "application/vnd.shana.informed.interchange": { source: "iana", extensions: ["iif"] }, "application/vnd.shana.informed.package": { source: "iana", extensions: ["ipk"] }, "application/vnd.shootproof+json": { source: "iana", compressible: true }, "application/vnd.shopkick+json": { source: "iana", compressible: true }, "application/vnd.shp": { source: "iana" }, "application/vnd.shx": { source: "iana" }, "application/vnd.sigrok.session": { source: "iana" }, "application/vnd.simtech-mindmapper": { source: "iana", extensions: ["twd", "twds"] }, "application/vnd.siren+json": { source: "iana", compressible: true }, "application/vnd.smaf": { source: "iana", extensions: ["mmf"] }, "application/vnd.smart.notebook": { source: "iana" }, "application/vnd.smart.teacher": { source: "iana", extensions: ["teacher"] }, "application/vnd.snesdev-page-table": { source: "iana" }, "application/vnd.software602.filler.form+xml": { source: "iana", compressible: true, extensions: ["fo"] }, "application/vnd.software602.filler.form-xml-zip": { source: "iana" }, "application/vnd.solent.sdkm+xml": { source: "iana", compressible: true, extensions: ["sdkm", "sdkd"] }, "application/vnd.spotfire.dxp": { source: "iana", extensions: ["dxp"] }, "application/vnd.spotfire.sfs": { source: "iana", extensions: ["sfs"] }, "application/vnd.sqlite3": { source: "iana" }, "application/vnd.sss-cod": { source: "iana" }, "application/vnd.sss-dtf": { source: "iana" }, "application/vnd.sss-ntf": { source: "iana" }, "application/vnd.stardivision.calc": { source: "apache", extensions: ["sdc"] }, "application/vnd.stardivision.draw": { source: "apache", extensions: ["sda"] }, "application/vnd.stardivision.impress": { source: "apache", extensions: ["sdd"] }, "application/vnd.stardivision.math": { source: "apache", extensions: ["smf"] }, "application/vnd.stardivision.writer": { source: "apache", extensions: ["sdw", "vor"] }, "application/vnd.stardivision.writer-global": { source: "apache", extensions: ["sgl"] }, "application/vnd.stepmania.package": { source: "iana", extensions: ["smzip"] }, "application/vnd.stepmania.stepchart": { source: "iana", extensions: ["sm"] }, "application/vnd.street-stream": { source: "iana" }, "application/vnd.sun.wadl+xml": { source: "iana", compressible: true, extensions: ["wadl"] }, "application/vnd.sun.xml.calc": { source: "apache", extensions: ["sxc"] }, "application/vnd.sun.xml.calc.template": { source: "apache", extensions: ["stc"] }, "application/vnd.sun.xml.draw": { source: "apache", extensions: ["sxd"] }, "application/vnd.sun.xml.draw.template": { source: "apache", extensions: ["std"] }, "application/vnd.sun.xml.impress": { source: "apache", extensions: ["sxi"] }, "application/vnd.sun.xml.impress.template": { source: "apache", extensions: ["sti"] }, "application/vnd.sun.xml.math": { source: "apache", extensions: ["sxm"] }, "application/vnd.sun.xml.writer": { source: "apache", extensions: ["sxw"] }, "application/vnd.sun.xml.writer.global": { source: "apache", extensions: ["sxg"] }, "application/vnd.sun.xml.writer.template": { source: "apache", extensions: ["stw"] }, "application/vnd.sus-calendar": { source: "iana", extensions: ["sus", "susp"] }, "application/vnd.svd": { source: "iana", extensions: ["svd"] }, "application/vnd.swiftview-ics": { source: "iana" }, "application/vnd.sycle+xml": { source: "iana", compressible: true }, "application/vnd.syft+json": { source: "iana", compressible: true }, "application/vnd.symbian.install": { source: "apache", extensions: ["sis", "sisx"] }, "application/vnd.syncml+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["xsm"] }, "application/vnd.syncml.dm+wbxml": { source: "iana", charset: "UTF-8", extensions: ["bdm"] }, "application/vnd.syncml.dm+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["xdm"] }, "application/vnd.syncml.dm.notification": { source: "iana" }, "application/vnd.syncml.dmddf+wbxml": { source: "iana" }, "application/vnd.syncml.dmddf+xml": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["ddf"] }, "application/vnd.syncml.dmtnds+wbxml": { source: "iana" }, "application/vnd.syncml.dmtnds+xml": { source: "iana", charset: "UTF-8", compressible: true }, "application/vnd.syncml.ds.notification": { source: "iana" }, "application/vnd.tableschema+json": { source: "iana", compressible: true }, "application/vnd.tao.intent-module-archive": { source: "iana", extensions: ["tao"] }, "application/vnd.tcpdump.pcap": { source: "iana", extensions: ["pcap", "cap", "dmp"] }, "application/vnd.think-cell.ppttc+json": { source: "iana", compressible: true }, "application/vnd.tmd.mediaflex.api+xml": { source: "iana", compressible: true }, "application/vnd.tml": { source: "iana" }, "application/vnd.tmobile-livetv": { source: "iana", extensions: ["tmo"] }, "application/vnd.tri.onesource": { source: "iana" }, "application/vnd.trid.tpt": { source: "iana", extensions: ["tpt"] }, "application/vnd.triscape.mxs": { source: "iana", extensions: ["mxs"] }, "application/vnd.trueapp": { source: "iana", extensions: ["tra"] }, "application/vnd.truedoc": { source: "iana" }, "application/vnd.ubisoft.webplayer": { source: "iana" }, "application/vnd.ufdl": { source: "iana", extensions: ["ufd", "ufdl"] }, "application/vnd.uiq.theme": { source: "iana", extensions: ["utz"] }, "application/vnd.umajin": { source: "iana", extensions: ["umj"] }, "application/vnd.unity": { source: "iana", extensions: ["unityweb"] }, "application/vnd.uoml+xml": { source: "iana", compressible: true, extensions: ["uoml"] }, "application/vnd.uplanet.alert": { source: "iana" }, "application/vnd.uplanet.alert-wbxml": { source: "iana" }, "application/vnd.uplanet.bearer-choice": { source: "iana" }, "application/vnd.uplanet.bearer-choice-wbxml": { source: "iana" }, "application/vnd.uplanet.cacheop": { source: "iana" }, "application/vnd.uplanet.cacheop-wbxml": { source: "iana" }, "application/vnd.uplanet.channel": { source: "iana" }, "application/vnd.uplanet.channel-wbxml": { source: "iana" }, "application/vnd.uplanet.list": { source: "iana" }, "application/vnd.uplanet.list-wbxml": { source: "iana" }, "application/vnd.uplanet.listcmd": { source: "iana" }, "application/vnd.uplanet.listcmd-wbxml": { source: "iana" }, "application/vnd.uplanet.signal": { source: "iana" }, "application/vnd.uri-map": { source: "iana" }, "application/vnd.valve.source.material": { source: "iana" }, "application/vnd.vcx": { source: "iana", extensions: ["vcx"] }, "application/vnd.vd-study": { source: "iana" }, "application/vnd.vectorworks": { source: "iana" }, "application/vnd.vel+json": { source: "iana", compressible: true }, "application/vnd.verimatrix.vcas": { source: "iana" }, "application/vnd.veritone.aion+json": { source: "iana", compressible: true }, "application/vnd.veryant.thin": { source: "iana" }, "application/vnd.ves.encrypted": { source: "iana" }, "application/vnd.vidsoft.vidconference": { source: "iana" }, "application/vnd.visio": { source: "iana", extensions: ["vsd", "vst", "vss", "vsw"] }, "application/vnd.visionary": { source: "iana", extensions: ["vis"] }, "application/vnd.vividence.scriptfile": { source: "iana" }, "application/vnd.vsf": { source: "iana", extensions: ["vsf"] }, "application/vnd.wap.sic": { source: "iana" }, "application/vnd.wap.slc": { source: "iana" }, "application/vnd.wap.wbxml": { source: "iana", charset: "UTF-8", extensions: ["wbxml"] }, "application/vnd.wap.wmlc": { source: "iana", extensions: ["wmlc"] }, "application/vnd.wap.wmlscriptc": { source: "iana", extensions: ["wmlsc"] }, "application/vnd.webturbo": { source: "iana", extensions: ["wtb"] }, "application/vnd.wfa.dpp": { source: "iana" }, "application/vnd.wfa.p2p": { source: "iana" }, "application/vnd.wfa.wsc": { source: "iana" }, "application/vnd.windows.devicepairing": { source: "iana" }, "application/vnd.wmc": { source: "iana" }, "application/vnd.wmf.bootstrap": { source: "iana" }, "application/vnd.wolfram.mathematica": { source: "iana" }, "application/vnd.wolfram.mathematica.package": { source: "iana" }, "application/vnd.wolfram.player": { source: "iana", extensions: ["nbp"] }, "application/vnd.wordperfect": { source: "iana", extensions: ["wpd"] }, "application/vnd.wqd": { source: "iana", extensions: ["wqd"] }, "application/vnd.wrq-hp3000-labelled": { source: "iana" }, "application/vnd.wt.stf": { source: "iana", extensions: ["stf"] }, "application/vnd.wv.csp+wbxml": { source: "iana" }, "application/vnd.wv.csp+xml": { source: "iana", compressible: true }, "application/vnd.wv.ssp+xml": { source: "iana", compressible: true }, "application/vnd.xacml+json": { source: "iana", compressible: true }, "application/vnd.xara": { source: "iana", extensions: ["xar"] }, "application/vnd.xfdl": { source: "iana", extensions: ["xfdl"] }, "application/vnd.xfdl.webform": { source: "iana" }, "application/vnd.xmi+xml": { source: "iana", compressible: true }, "application/vnd.xmpie.cpkg": { source: "iana" }, "application/vnd.xmpie.dpkg": { source: "iana" }, "application/vnd.xmpie.plan": { source: "iana" }, "application/vnd.xmpie.ppkg": { source: "iana" }, "application/vnd.xmpie.xlim": { source: "iana" }, "application/vnd.yamaha.hv-dic": { source: "iana", extensions: ["hvd"] }, "application/vnd.yamaha.hv-script": { source: "iana", extensions: ["hvs"] }, "application/vnd.yamaha.hv-voice": { source: "iana", extensions: ["hvp"] }, "application/vnd.yamaha.openscoreformat": { source: "iana", extensions: ["osf"] }, "application/vnd.yamaha.openscoreformat.osfpvg+xml": { source: "iana", compressible: true, extensions: ["osfpvg"] }, "application/vnd.yamaha.remote-setup": { source: "iana" }, "application/vnd.yamaha.smaf-audio": { source: "iana", extensions: ["saf"] }, "application/vnd.yamaha.smaf-phrase": { source: "iana", extensions: ["spf"] }, "application/vnd.yamaha.through-ngn": { source: "iana" }, "application/vnd.yamaha.tunnel-udpencap": { source: "iana" }, "application/vnd.yaoweme": { source: "iana" }, "application/vnd.yellowriver-custom-menu": { source: "iana", extensions: ["cmp"] }, "application/vnd.youtube.yt": { source: "iana" }, "application/vnd.zul": { source: "iana", extensions: ["zir", "zirz"] }, "application/vnd.zzazz.deck+xml": { source: "iana", compressible: true, extensions: ["zaz"] }, "application/voicexml+xml": { source: "iana", compressible: true, extensions: ["vxml"] }, "application/voucher-cms+json": { source: "iana", compressible: true }, "application/vq-rtcpxr": { source: "iana" }, "application/wasm": { source: "iana", compressible: true, extensions: ["wasm"] }, "application/watcherinfo+xml": { source: "iana", compressible: true, extensions: ["wif"] }, "application/webpush-options+json": { source: "iana", compressible: true }, "application/whoispp-query": { source: "iana" }, "application/whoispp-response": { source: "iana" }, "application/widget": { source: "iana", extensions: ["wgt"] }, "application/winhlp": { source: "apache", extensions: ["hlp"] }, "application/wita": { source: "iana" }, "application/wordperfect5.1": { source: "iana" }, "application/wsdl+xml": { source: "iana", compressible: true, extensions: ["wsdl"] }, "application/wspolicy+xml": { source: "iana", compressible: true, extensions: ["wspolicy"] }, "application/x-7z-compressed": { source: "apache", compressible: false, extensions: ["7z"] }, "application/x-abiword": { source: "apache", extensions: ["abw"] }, "application/x-ace-compressed": { source: "apache", extensions: ["ace"] }, "application/x-amf": { source: "apache" }, "application/x-apple-diskimage": { source: "apache", extensions: ["dmg"] }, "application/x-arj": { compressible: false, extensions: ["arj"] }, "application/x-authorware-bin": { source: "apache", extensions: ["aab", "x32", "u32", "vox"] }, "application/x-authorware-map": { source: "apache", extensions: ["aam"] }, "application/x-authorware-seg": { source: "apache", extensions: ["aas"] }, "application/x-bcpio": { source: "apache", extensions: ["bcpio"] }, "application/x-bdoc": { compressible: false, extensions: ["bdoc"] }, "application/x-bittorrent": { source: "apache", extensions: ["torrent"] }, "application/x-blorb": { source: "apache", extensions: ["blb", "blorb"] }, "application/x-bzip": { source: "apache", compressible: false, extensions: ["bz"] }, "application/x-bzip2": { source: "apache", compressible: false, extensions: ["bz2", "boz"] }, "application/x-cbr": { source: "apache", extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] }, "application/x-cdlink": { source: "apache", extensions: ["vcd"] }, "application/x-cfs-compressed": { source: "apache", extensions: ["cfs"] }, "application/x-chat": { source: "apache", extensions: ["chat"] }, "application/x-chess-pgn": { source: "apache", extensions: ["pgn"] }, "application/x-chrome-extension": { extensions: ["crx"] }, "application/x-cocoa": { source: "nginx", extensions: ["cco"] }, "application/x-compress": { source: "apache" }, "application/x-conference": { source: "apache", extensions: ["nsc"] }, "application/x-cpio": { source: "apache", extensions: ["cpio"] }, "application/x-csh": { source: "apache", extensions: ["csh"] }, "application/x-deb": { compressible: false }, "application/x-debian-package": { source: "apache", extensions: ["deb", "udeb"] }, "application/x-dgc-compressed": { source: "apache", extensions: ["dgc"] }, "application/x-director": { source: "apache", extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] }, "application/x-doom": { source: "apache", extensions: ["wad"] }, "application/x-dtbncx+xml": { source: "apache", compressible: true, extensions: ["ncx"] }, "application/x-dtbook+xml": { source: "apache", compressible: true, extensions: ["dtb"] }, "application/x-dtbresource+xml": { source: "apache", compressible: true, extensions: ["res"] }, "application/x-dvi": { source: "apache", compressible: false, extensions: ["dvi"] }, "application/x-envoy": { source: "apache", extensions: ["evy"] }, "application/x-eva": { source: "apache", extensions: ["eva"] }, "application/x-font-bdf": { source: "apache", extensions: ["bdf"] }, "application/x-font-dos": { source: "apache" }, "application/x-font-framemaker": { source: "apache" }, "application/x-font-ghostscript": { source: "apache", extensions: ["gsf"] }, "application/x-font-libgrx": { source: "apache" }, "application/x-font-linux-psf": { source: "apache", extensions: ["psf"] }, "application/x-font-pcf": { source: "apache", extensions: ["pcf"] }, "application/x-font-snf": { source: "apache", extensions: ["snf"] }, "application/x-font-speedo": { source: "apache" }, "application/x-font-sunos-news": { source: "apache" }, "application/x-font-type1": { source: "apache", extensions: ["pfa", "pfb", "pfm", "afm"] }, "application/x-font-vfont": { source: "apache" }, "application/x-freearc": { source: "apache", extensions: ["arc"] }, "application/x-futuresplash": { source: "apache", extensions: ["spl"] }, "application/x-gca-compressed": { source: "apache", extensions: ["gca"] }, "application/x-glulx": { source: "apache", extensions: ["ulx"] }, "application/x-gnumeric": { source: "apache", extensions: ["gnumeric"] }, "application/x-gramps-xml": { source: "apache", extensions: ["gramps"] }, "application/x-gtar": { source: "apache", extensions: ["gtar"] }, "application/x-gzip": { source: "apache" }, "application/x-hdf": { source: "apache", extensions: ["hdf"] }, "application/x-httpd-php": { compressible: true, extensions: ["php"] }, "application/x-install-instructions": { source: "apache", extensions: ["install"] }, "application/x-iso9660-image": { source: "apache", extensions: ["iso"] }, "application/x-iwork-keynote-sffkey": { extensions: ["key"] }, "application/x-iwork-numbers-sffnumbers": { extensions: ["numbers"] }, "application/x-iwork-pages-sffpages": { extensions: ["pages"] }, "application/x-java-archive-diff": { source: "nginx", extensions: ["jardiff"] }, "application/x-java-jnlp-file": { source: "apache", compressible: false, extensions: ["jnlp"] }, "application/x-javascript": { compressible: true }, "application/x-keepass2": { extensions: ["kdbx"] }, "application/x-latex": { source: "apache", compressible: false, extensions: ["latex"] }, "application/x-lua-bytecode": { extensions: ["luac"] }, "application/x-lzh-compressed": { source: "apache", extensions: ["lzh", "lha"] }, "application/x-makeself": { source: "nginx", extensions: ["run"] }, "application/x-mie": { source: "apache", extensions: ["mie"] }, "application/x-mobipocket-ebook": { source: "apache", extensions: ["prc", "mobi"] }, "application/x-mpegurl": { compressible: false }, "application/x-ms-application": { source: "apache", extensions: ["application"] }, "application/x-ms-shortcut": { source: "apache", extensions: ["lnk"] }, "application/x-ms-wmd": { source: "apache", extensions: ["wmd"] }, "application/x-ms-wmz": { source: "apache", extensions: ["wmz"] }, "application/x-ms-xbap": { source: "apache", extensions: ["xbap"] }, "application/x-msaccess": { source: "apache", extensions: ["mdb"] }, "application/x-msbinder": { source: "apache", extensions: ["obd"] }, "application/x-mscardfile": { source: "apache", extensions: ["crd"] }, "application/x-msclip": { source: "apache", extensions: ["clp"] }, "application/x-msdos-program": { extensions: ["exe"] }, "application/x-msdownload": { source: "apache", extensions: ["exe", "dll", "com", "bat", "msi"] }, "application/x-msmediaview": { source: "apache", extensions: ["mvb", "m13", "m14"] }, "application/x-msmetafile": { source: "apache", extensions: ["wmf", "wmz", "emf", "emz"] }, "application/x-msmoney": { source: "apache", extensions: ["mny"] }, "application/x-mspublisher": { source: "apache", extensions: ["pub"] }, "application/x-msschedule": { source: "apache", extensions: ["scd"] }, "application/x-msterminal": { source: "apache", extensions: ["trm"] }, "application/x-mswrite": { source: "apache", extensions: ["wri"] }, "application/x-netcdf": { source: "apache", extensions: ["nc", "cdf"] }, "application/x-ns-proxy-autoconfig": { compressible: true, extensions: ["pac"] }, "application/x-nzb": { source: "apache", extensions: ["nzb"] }, "application/x-perl": { source: "nginx", extensions: ["pl", "pm"] }, "application/x-pilot": { source: "nginx", extensions: ["prc", "pdb"] }, "application/x-pkcs12": { source: "apache", compressible: false, extensions: ["p12", "pfx"] }, "application/x-pkcs7-certificates": { source: "apache", extensions: ["p7b", "spc"] }, "application/x-pkcs7-certreqresp": { source: "apache", extensions: ["p7r"] }, "application/x-pki-message": { source: "iana" }, "application/x-rar-compressed": { source: "apache", compressible: false, extensions: ["rar"] }, "application/x-redhat-package-manager": { source: "nginx", extensions: ["rpm"] }, "application/x-research-info-systems": { source: "apache", extensions: ["ris"] }, "application/x-sea": { source: "nginx", extensions: ["sea"] }, "application/x-sh": { source: "apache", compressible: true, extensions: ["sh"] }, "application/x-shar": { source: "apache", extensions: ["shar"] }, "application/x-shockwave-flash": { source: "apache", compressible: false, extensions: ["swf"] }, "application/x-silverlight-app": { source: "apache", extensions: ["xap"] }, "application/x-sql": { source: "apache", extensions: ["sql"] }, "application/x-stuffit": { source: "apache", compressible: false, extensions: ["sit"] }, "application/x-stuffitx": { source: "apache", extensions: ["sitx"] }, "application/x-subrip": { source: "apache", extensions: ["srt"] }, "application/x-sv4cpio": { source: "apache", extensions: ["sv4cpio"] }, "application/x-sv4crc": { source: "apache", extensions: ["sv4crc"] }, "application/x-t3vm-image": { source: "apache", extensions: ["t3"] }, "application/x-tads": { source: "apache", extensions: ["gam"] }, "application/x-tar": { source: "apache", compressible: true, extensions: ["tar"] }, "application/x-tcl": { source: "apache", extensions: ["tcl", "tk"] }, "application/x-tex": { source: "apache", extensions: ["tex"] }, "application/x-tex-tfm": { source: "apache", extensions: ["tfm"] }, "application/x-texinfo": { source: "apache", extensions: ["texinfo", "texi"] }, "application/x-tgif": { source: "apache", extensions: ["obj"] }, "application/x-ustar": { source: "apache", extensions: ["ustar"] }, "application/x-virtualbox-hdd": { compressible: true, extensions: ["hdd"] }, "application/x-virtualbox-ova": { compressible: true, extensions: ["ova"] }, "application/x-virtualbox-ovf": { compressible: true, extensions: ["ovf"] }, "application/x-virtualbox-vbox": { compressible: true, extensions: ["vbox"] }, "application/x-virtualbox-vbox-extpack": { compressible: false, extensions: ["vbox-extpack"] }, "application/x-virtualbox-vdi": { compressible: true, extensions: ["vdi"] }, "application/x-virtualbox-vhd": { compressible: true, extensions: ["vhd"] }, "application/x-virtualbox-vmdk": { compressible: true, extensions: ["vmdk"] }, "application/x-wais-source": { source: "apache", extensions: ["src"] }, "application/x-web-app-manifest+json": { compressible: true, extensions: ["webapp"] }, "application/x-www-form-urlencoded": { source: "iana", compressible: true }, "application/x-x509-ca-cert": { source: "iana", extensions: ["der", "crt", "pem"] }, "application/x-x509-ca-ra-cert": { source: "iana" }, "application/x-x509-next-ca-cert": { source: "iana" }, "application/x-xfig": { source: "apache", extensions: ["fig"] }, "application/x-xliff+xml": { source: "apache", compressible: true, extensions: ["xlf"] }, "application/x-xpinstall": { source: "apache", compressible: false, extensions: ["xpi"] }, "application/x-xz": { source: "apache", extensions: ["xz"] }, "application/x-zmachine": { source: "apache", extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] }, "application/x400-bp": { source: "iana" }, "application/xacml+xml": { source: "iana", compressible: true }, "application/xaml+xml": { source: "apache", compressible: true, extensions: ["xaml"] }, "application/xcap-att+xml": { source: "iana", compressible: true, extensions: ["xav"] }, "application/xcap-caps+xml": { source: "iana", compressible: true, extensions: ["xca"] }, "application/xcap-diff+xml": { source: "iana", compressible: true, extensions: ["xdf"] }, "application/xcap-el+xml": { source: "iana", compressible: true, extensions: ["xel"] }, "application/xcap-error+xml": { source: "iana", compressible: true }, "application/xcap-ns+xml": { source: "iana", compressible: true, extensions: ["xns"] }, "application/xcon-conference-info+xml": { source: "iana", compressible: true }, "application/xcon-conference-info-diff+xml": { source: "iana", compressible: true }, "application/xenc+xml": { source: "iana", compressible: true, extensions: ["xenc"] }, "application/xhtml+xml": { source: "iana", compressible: true, extensions: ["xhtml", "xht"] }, "application/xhtml-voice+xml": { source: "apache", compressible: true }, "application/xliff+xml": { source: "iana", compressible: true, extensions: ["xlf"] }, "application/xml": { source: "iana", compressible: true, extensions: ["xml", "xsl", "xsd", "rng"] }, "application/xml-dtd": { source: "iana", compressible: true, extensions: ["dtd"] }, "application/xml-external-parsed-entity": { source: "iana" }, "application/xml-patch+xml": { source: "iana", compressible: true }, "application/xmpp+xml": { source: "iana", compressible: true }, "application/xop+xml": { source: "iana", compressible: true, extensions: ["xop"] }, "application/xproc+xml": { source: "apache", compressible: true, extensions: ["xpl"] }, "application/xslt+xml": { source: "iana", compressible: true, extensions: ["xsl", "xslt"] }, "application/xspf+xml": { source: "apache", compressible: true, extensions: ["xspf"] }, "application/xv+xml": { source: "iana", compressible: true, extensions: ["mxml", "xhvml", "xvml", "xvm"] }, "application/yang": { source: "iana", extensions: ["yang"] }, "application/yang-data+json": { source: "iana", compressible: true }, "application/yang-data+xml": { source: "iana", compressible: true }, "application/yang-patch+json": { source: "iana", compressible: true }, "application/yang-patch+xml": { source: "iana", compressible: true }, "application/yin+xml": { source: "iana", compressible: true, extensions: ["yin"] }, "application/zip": { source: "iana", compressible: false, extensions: ["zip"] }, "application/zlib": { source: "iana" }, "application/zstd": { source: "iana" }, "audio/1d-interleaved-parityfec": { source: "iana" }, "audio/32kadpcm": { source: "iana" }, "audio/3gpp": { source: "iana", compressible: false, extensions: ["3gpp"] }, "audio/3gpp2": { source: "iana" }, "audio/aac": { source: "iana" }, "audio/ac3": { source: "iana" }, "audio/adpcm": { source: "apache", extensions: ["adp"] }, "audio/amr": { source: "iana", extensions: ["amr"] }, "audio/amr-wb": { source: "iana" }, "audio/amr-wb+": { source: "iana" }, "audio/aptx": { source: "iana" }, "audio/asc": { source: "iana" }, "audio/atrac-advanced-lossless": { source: "iana" }, "audio/atrac-x": { source: "iana" }, "audio/atrac3": { source: "iana" }, "audio/basic": { source: "iana", compressible: false, extensions: ["au", "snd"] }, "audio/bv16": { source: "iana" }, "audio/bv32": { source: "iana" }, "audio/clearmode": { source: "iana" }, "audio/cn": { source: "iana" }, "audio/dat12": { source: "iana" }, "audio/dls": { source: "iana" }, "audio/dsr-es201108": { source: "iana" }, "audio/dsr-es202050": { source: "iana" }, "audio/dsr-es202211": { source: "iana" }, "audio/dsr-es202212": { source: "iana" }, "audio/dv": { source: "iana" }, "audio/dvi4": { source: "iana" }, "audio/eac3": { source: "iana" }, "audio/encaprtp": { source: "iana" }, "audio/evrc": { source: "iana" }, "audio/evrc-qcp": { source: "iana" }, "audio/evrc0": { source: "iana" }, "audio/evrc1": { source: "iana" }, "audio/evrcb": { source: "iana" }, "audio/evrcb0": { source: "iana" }, "audio/evrcb1": { source: "iana" }, "audio/evrcnw": { source: "iana" }, "audio/evrcnw0": { source: "iana" }, "audio/evrcnw1": { source: "iana" }, "audio/evrcwb": { source: "iana" }, "audio/evrcwb0": { source: "iana" }, "audio/evrcwb1": { source: "iana" }, "audio/evs": { source: "iana" }, "audio/flexfec": { source: "iana" }, "audio/fwdred": { source: "iana" }, "audio/g711-0": { source: "iana" }, "audio/g719": { source: "iana" }, "audio/g722": { source: "iana" }, "audio/g7221": { source: "iana" }, "audio/g723": { source: "iana" }, "audio/g726-16": { source: "iana" }, "audio/g726-24": { source: "iana" }, "audio/g726-32": { source: "iana" }, "audio/g726-40": { source: "iana" }, "audio/g728": { source: "iana" }, "audio/g729": { source: "iana" }, "audio/g7291": { source: "iana" }, "audio/g729d": { source: "iana" }, "audio/g729e": { source: "iana" }, "audio/gsm": { source: "iana" }, "audio/gsm-efr": { source: "iana" }, "audio/gsm-hr-08": { source: "iana" }, "audio/ilbc": { source: "iana" }, "audio/ip-mr_v2.5": { source: "iana" }, "audio/isac": { source: "apache" }, "audio/l16": { source: "iana" }, "audio/l20": { source: "iana" }, "audio/l24": { source: "iana", compressible: false }, "audio/l8": { source: "iana" }, "audio/lpc": { source: "iana" }, "audio/melp": { source: "iana" }, "audio/melp1200": { source: "iana" }, "audio/melp2400": { source: "iana" }, "audio/melp600": { source: "iana" }, "audio/mhas": { source: "iana" }, "audio/midi": { source: "apache", extensions: ["mid", "midi", "kar", "rmi"] }, "audio/mobile-xmf": { source: "iana", extensions: ["mxmf"] }, "audio/mp3": { compressible: false, extensions: ["mp3"] }, "audio/mp4": { source: "iana", compressible: false, extensions: ["m4a", "mp4a"] }, "audio/mp4a-latm": { source: "iana" }, "audio/mpa": { source: "iana" }, "audio/mpa-robust": { source: "iana" }, "audio/mpeg": { source: "iana", compressible: false, extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] }, "audio/mpeg4-generic": { source: "iana" }, "audio/musepack": { source: "apache" }, "audio/ogg": { source: "iana", compressible: false, extensions: ["oga", "ogg", "spx", "opus"] }, "audio/opus": { source: "iana" }, "audio/parityfec": { source: "iana" }, "audio/pcma": { source: "iana" }, "audio/pcma-wb": { source: "iana" }, "audio/pcmu": { source: "iana" }, "audio/pcmu-wb": { source: "iana" }, "audio/prs.sid": { source: "iana" }, "audio/qcelp": { source: "iana" }, "audio/raptorfec": { source: "iana" }, "audio/red": { source: "iana" }, "audio/rtp-enc-aescm128": { source: "iana" }, "audio/rtp-midi": { source: "iana" }, "audio/rtploopback": { source: "iana" }, "audio/rtx": { source: "iana" }, "audio/s3m": { source: "apache", extensions: ["s3m"] }, "audio/scip": { source: "iana" }, "audio/silk": { source: "apache", extensions: ["sil"] }, "audio/smv": { source: "iana" }, "audio/smv-qcp": { source: "iana" }, "audio/smv0": { source: "iana" }, "audio/sofa": { source: "iana" }, "audio/sp-midi": { source: "iana" }, "audio/speex": { source: "iana" }, "audio/t140c": { source: "iana" }, "audio/t38": { source: "iana" }, "audio/telephone-event": { source: "iana" }, "audio/tetra_acelp": { source: "iana" }, "audio/tetra_acelp_bb": { source: "iana" }, "audio/tone": { source: "iana" }, "audio/tsvcis": { source: "iana" }, "audio/uemclip": { source: "iana" }, "audio/ulpfec": { source: "iana" }, "audio/usac": { source: "iana" }, "audio/vdvi": { source: "iana" }, "audio/vmr-wb": { source: "iana" }, "audio/vnd.3gpp.iufp": { source: "iana" }, "audio/vnd.4sb": { source: "iana" }, "audio/vnd.audiokoz": { source: "iana" }, "audio/vnd.celp": { source: "iana" }, "audio/vnd.cisco.nse": { source: "iana" }, "audio/vnd.cmles.radio-events": { source: "iana" }, "audio/vnd.cns.anp1": { source: "iana" }, "audio/vnd.cns.inf1": { source: "iana" }, "audio/vnd.dece.audio": { source: "iana", extensions: ["uva", "uvva"] }, "audio/vnd.digital-winds": { source: "iana", extensions: ["eol"] }, "audio/vnd.dlna.adts": { source: "iana" }, "audio/vnd.dolby.heaac.1": { source: "iana" }, "audio/vnd.dolby.heaac.2": { source: "iana" }, "audio/vnd.dolby.mlp": { source: "iana" }, "audio/vnd.dolby.mps": { source: "iana" }, "audio/vnd.dolby.pl2": { source: "iana" }, "audio/vnd.dolby.pl2x": { source: "iana" }, "audio/vnd.dolby.pl2z": { source: "iana" }, "audio/vnd.dolby.pulse.1": { source: "iana" }, "audio/vnd.dra": { source: "iana", extensions: ["dra"] }, "audio/vnd.dts": { source: "iana", extensions: ["dts"] }, "audio/vnd.dts.hd": { source: "iana", extensions: ["dtshd"] }, "audio/vnd.dts.uhd": { source: "iana" }, "audio/vnd.dvb.file": { source: "iana" }, "audio/vnd.everad.plj": { source: "iana" }, "audio/vnd.hns.audio": { source: "iana" }, "audio/vnd.lucent.voice": { source: "iana", extensions: ["lvp"] }, "audio/vnd.ms-playready.media.pya": { source: "iana", extensions: ["pya"] }, "audio/vnd.nokia.mobile-xmf": { source: "iana" }, "audio/vnd.nortel.vbk": { source: "iana" }, "audio/vnd.nuera.ecelp4800": { source: "iana", extensions: ["ecelp4800"] }, "audio/vnd.nuera.ecelp7470": { source: "iana", extensions: ["ecelp7470"] }, "audio/vnd.nuera.ecelp9600": { source: "iana", extensions: ["ecelp9600"] }, "audio/vnd.octel.sbc": { source: "iana" }, "audio/vnd.presonus.multitrack": { source: "iana" }, "audio/vnd.qcelp": { source: "iana" }, "audio/vnd.rhetorex.32kadpcm": { source: "iana" }, "audio/vnd.rip": { source: "iana", extensions: ["rip"] }, "audio/vnd.rn-realaudio": { compressible: false }, "audio/vnd.sealedmedia.softseal.mpeg": { source: "iana" }, "audio/vnd.vmx.cvsd": { source: "iana" }, "audio/vnd.wave": { compressible: false }, "audio/vorbis": { source: "iana", compressible: false }, "audio/vorbis-config": { source: "iana" }, "audio/wav": { compressible: false, extensions: ["wav"] }, "audio/wave": { compressible: false, extensions: ["wav"] }, "audio/webm": { source: "apache", compressible: false, extensions: ["weba"] }, "audio/x-aac": { source: "apache", compressible: false, extensions: ["aac"] }, "audio/x-aiff": { source: "apache", extensions: ["aif", "aiff", "aifc"] }, "audio/x-caf": { source: "apache", compressible: false, extensions: ["caf"] }, "audio/x-flac": { source: "apache", extensions: ["flac"] }, "audio/x-m4a": { source: "nginx", extensions: ["m4a"] }, "audio/x-matroska": { source: "apache", extensions: ["mka"] }, "audio/x-mpegurl": { source: "apache", extensions: ["m3u"] }, "audio/x-ms-wax": { source: "apache", extensions: ["wax"] }, "audio/x-ms-wma": { source: "apache", extensions: ["wma"] }, "audio/x-pn-realaudio": { source: "apache", extensions: ["ram", "ra"] }, "audio/x-pn-realaudio-plugin": { source: "apache", extensions: ["rmp"] }, "audio/x-realaudio": { source: "nginx", extensions: ["ra"] }, "audio/x-tta": { source: "apache" }, "audio/x-wav": { source: "apache", extensions: ["wav"] }, "audio/xm": { source: "apache", extensions: ["xm"] }, "chemical/x-cdx": { source: "apache", extensions: ["cdx"] }, "chemical/x-cif": { source: "apache", extensions: ["cif"] }, "chemical/x-cmdf": { source: "apache", extensions: ["cmdf"] }, "chemical/x-cml": { source: "apache", extensions: ["cml"] }, "chemical/x-csml": { source: "apache", extensions: ["csml"] }, "chemical/x-pdb": { source: "apache" }, "chemical/x-xyz": { source: "apache", extensions: ["xyz"] }, "font/collection": { source: "iana", extensions: ["ttc"] }, "font/otf": { source: "iana", compressible: true, extensions: ["otf"] }, "font/sfnt": { source: "iana" }, "font/ttf": { source: "iana", compressible: true, extensions: ["ttf"] }, "font/woff": { source: "iana", extensions: ["woff"] }, "font/woff2": { source: "iana", extensions: ["woff2"] }, "image/aces": { source: "iana", extensions: ["exr"] }, "image/apng": { compressible: false, extensions: ["apng"] }, "image/avci": { source: "iana", extensions: ["avci"] }, "image/avcs": { source: "iana", extensions: ["avcs"] }, "image/avif": { source: "iana", compressible: false, extensions: ["avif"] }, "image/bmp": { source: "iana", compressible: true, extensions: ["bmp"] }, "image/cgm": { source: "iana", extensions: ["cgm"] }, "image/dicom-rle": { source: "iana", extensions: ["drle"] }, "image/emf": { source: "iana", extensions: ["emf"] }, "image/fits": { source: "iana", extensions: ["fits"] }, "image/g3fax": { source: "iana", extensions: ["g3"] }, "image/gif": { source: "iana", compressible: false, extensions: ["gif"] }, "image/heic": { source: "iana", extensions: ["heic"] }, "image/heic-sequence": { source: "iana", extensions: ["heics"] }, "image/heif": { source: "iana", extensions: ["heif"] }, "image/heif-sequence": { source: "iana", extensions: ["heifs"] }, "image/hej2k": { source: "iana", extensions: ["hej2"] }, "image/hsj2": { source: "iana", extensions: ["hsj2"] }, "image/ief": { source: "iana", extensions: ["ief"] }, "image/jls": { source: "iana", extensions: ["jls"] }, "image/jp2": { source: "iana", compressible: false, extensions: ["jp2", "jpg2"] }, "image/jpeg": { source: "iana", compressible: false, extensions: ["jpeg", "jpg", "jpe"] }, "image/jph": { source: "iana", extensions: ["jph"] }, "image/jphc": { source: "iana", extensions: ["jhc"] }, "image/jpm": { source: "iana", compressible: false, extensions: ["jpm"] }, "image/jpx": { source: "iana", compressible: false, extensions: ["jpx", "jpf"] }, "image/jxr": { source: "iana", extensions: ["jxr"] }, "image/jxra": { source: "iana", extensions: ["jxra"] }, "image/jxrs": { source: "iana", extensions: ["jxrs"] }, "image/jxs": { source: "iana", extensions: ["jxs"] }, "image/jxsc": { source: "iana", extensions: ["jxsc"] }, "image/jxsi": { source: "iana", extensions: ["jxsi"] }, "image/jxss": { source: "iana", extensions: ["jxss"] }, "image/ktx": { source: "iana", extensions: ["ktx"] }, "image/ktx2": { source: "iana", extensions: ["ktx2"] }, "image/naplps": { source: "iana" }, "image/pjpeg": { compressible: false }, "image/png": { source: "iana", compressible: false, extensions: ["png"] }, "image/prs.btif": { source: "iana", extensions: ["btif"] }, "image/prs.pti": { source: "iana", extensions: ["pti"] }, "image/pwg-raster": { source: "iana" }, "image/sgi": { source: "apache", extensions: ["sgi"] }, "image/svg+xml": { source: "iana", compressible: true, extensions: ["svg", "svgz"] }, "image/t38": { source: "iana", extensions: ["t38"] }, "image/tiff": { source: "iana", compressible: false, extensions: ["tif", "tiff"] }, "image/tiff-fx": { source: "iana", extensions: ["tfx"] }, "image/vnd.adobe.photoshop": { source: "iana", compressible: true, extensions: ["psd"] }, "image/vnd.airzip.accelerator.azv": { source: "iana", extensions: ["azv"] }, "image/vnd.cns.inf2": { source: "iana" }, "image/vnd.dece.graphic": { source: "iana", extensions: ["uvi", "uvvi", "uvg", "uvvg"] }, "image/vnd.djvu": { source: "iana", extensions: ["djvu", "djv"] }, "image/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "image/vnd.dwg": { source: "iana", extensions: ["dwg"] }, "image/vnd.dxf": { source: "iana", extensions: ["dxf"] }, "image/vnd.fastbidsheet": { source: "iana", extensions: ["fbs"] }, "image/vnd.fpx": { source: "iana", extensions: ["fpx"] }, "image/vnd.fst": { source: "iana", extensions: ["fst"] }, "image/vnd.fujixerox.edmics-mmr": { source: "iana", extensions: ["mmr"] }, "image/vnd.fujixerox.edmics-rlc": { source: "iana", extensions: ["rlc"] }, "image/vnd.globalgraphics.pgb": { source: "iana" }, "image/vnd.microsoft.icon": { source: "iana", compressible: true, extensions: ["ico"] }, "image/vnd.mix": { source: "iana" }, "image/vnd.mozilla.apng": { source: "iana" }, "image/vnd.ms-dds": { compressible: true, extensions: ["dds"] }, "image/vnd.ms-modi": { source: "iana", extensions: ["mdi"] }, "image/vnd.ms-photo": { source: "apache", extensions: ["wdp"] }, "image/vnd.net-fpx": { source: "iana", extensions: ["npx"] }, "image/vnd.pco.b16": { source: "iana", extensions: ["b16"] }, "image/vnd.radiance": { source: "iana" }, "image/vnd.sealed.png": { source: "iana" }, "image/vnd.sealedmedia.softseal.gif": { source: "iana" }, "image/vnd.sealedmedia.softseal.jpg": { source: "iana" }, "image/vnd.svf": { source: "iana" }, "image/vnd.tencent.tap": { source: "iana", extensions: ["tap"] }, "image/vnd.valve.source.texture": { source: "iana", extensions: ["vtf"] }, "image/vnd.wap.wbmp": { source: "iana", extensions: ["wbmp"] }, "image/vnd.xiff": { source: "iana", extensions: ["xif"] }, "image/vnd.zbrush.pcx": { source: "iana", extensions: ["pcx"] }, "image/webp": { source: "apache", extensions: ["webp"] }, "image/wmf": { source: "iana", extensions: ["wmf"] }, "image/x-3ds": { source: "apache", extensions: ["3ds"] }, "image/x-cmu-raster": { source: "apache", extensions: ["ras"] }, "image/x-cmx": { source: "apache", extensions: ["cmx"] }, "image/x-freehand": { source: "apache", extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] }, "image/x-icon": { source: "apache", compressible: true, extensions: ["ico"] }, "image/x-jng": { source: "nginx", extensions: ["jng"] }, "image/x-mrsid-image": { source: "apache", extensions: ["sid"] }, "image/x-ms-bmp": { source: "nginx", compressible: true, extensions: ["bmp"] }, "image/x-pcx": { source: "apache", extensions: ["pcx"] }, "image/x-pict": { source: "apache", extensions: ["pic", "pct"] }, "image/x-portable-anymap": { source: "apache", extensions: ["pnm"] }, "image/x-portable-bitmap": { source: "apache", extensions: ["pbm"] }, "image/x-portable-graymap": { source: "apache", extensions: ["pgm"] }, "image/x-portable-pixmap": { source: "apache", extensions: ["ppm"] }, "image/x-rgb": { source: "apache", extensions: ["rgb"] }, "image/x-tga": { source: "apache", extensions: ["tga"] }, "image/x-xbitmap": { source: "apache", extensions: ["xbm"] }, "image/x-xcf": { compressible: false }, "image/x-xpixmap": { source: "apache", extensions: ["xpm"] }, "image/x-xwindowdump": { source: "apache", extensions: ["xwd"] }, "message/cpim": { source: "iana" }, "message/delivery-status": { source: "iana" }, "message/disposition-notification": { source: "iana", extensions: [ "disposition-notification" ] }, "message/external-body": { source: "iana" }, "message/feedback-report": { source: "iana" }, "message/global": { source: "iana", extensions: ["u8msg"] }, "message/global-delivery-status": { source: "iana", extensions: ["u8dsn"] }, "message/global-disposition-notification": { source: "iana", extensions: ["u8mdn"] }, "message/global-headers": { source: "iana", extensions: ["u8hdr"] }, "message/http": { source: "iana", compressible: false }, "message/imdn+xml": { source: "iana", compressible: true }, "message/news": { source: "iana" }, "message/partial": { source: "iana", compressible: false }, "message/rfc822": { source: "iana", compressible: true, extensions: ["eml", "mime"] }, "message/s-http": { source: "iana" }, "message/sip": { source: "iana" }, "message/sipfrag": { source: "iana" }, "message/tracking-status": { source: "iana" }, "message/vnd.si.simp": { source: "iana" }, "message/vnd.wfa.wsc": { source: "iana", extensions: ["wsc"] }, "model/3mf": { source: "iana", extensions: ["3mf"] }, "model/e57": { source: "iana" }, "model/gltf+json": { source: "iana", compressible: true, extensions: ["gltf"] }, "model/gltf-binary": { source: "iana", compressible: true, extensions: ["glb"] }, "model/iges": { source: "iana", compressible: false, extensions: ["igs", "iges"] }, "model/mesh": { source: "iana", compressible: false, extensions: ["msh", "mesh", "silo"] }, "model/mtl": { source: "iana", extensions: ["mtl"] }, "model/obj": { source: "iana", extensions: ["obj"] }, "model/step": { source: "iana" }, "model/step+xml": { source: "iana", compressible: true, extensions: ["stpx"] }, "model/step+zip": { source: "iana", compressible: false, extensions: ["stpz"] }, "model/step-xml+zip": { source: "iana", compressible: false, extensions: ["stpxz"] }, "model/stl": { source: "iana", extensions: ["stl"] }, "model/vnd.collada+xml": { source: "iana", compressible: true, extensions: ["dae"] }, "model/vnd.dwf": { source: "iana", extensions: ["dwf"] }, "model/vnd.flatland.3dml": { source: "iana" }, "model/vnd.gdl": { source: "iana", extensions: ["gdl"] }, "model/vnd.gs-gdl": { source: "apache" }, "model/vnd.gs.gdl": { source: "iana" }, "model/vnd.gtw": { source: "iana", extensions: ["gtw"] }, "model/vnd.moml+xml": { source: "iana", compressible: true }, "model/vnd.mts": { source: "iana", extensions: ["mts"] }, "model/vnd.opengex": { source: "iana", extensions: ["ogex"] }, "model/vnd.parasolid.transmit.binary": { source: "iana", extensions: ["x_b"] }, "model/vnd.parasolid.transmit.text": { source: "iana", extensions: ["x_t"] }, "model/vnd.pytha.pyox": { source: "iana" }, "model/vnd.rosette.annotated-data-model": { source: "iana" }, "model/vnd.sap.vds": { source: "iana", extensions: ["vds"] }, "model/vnd.usdz+zip": { source: "iana", compressible: false, extensions: ["usdz"] }, "model/vnd.valve.source.compiled-map": { source: "iana", extensions: ["bsp"] }, "model/vnd.vtu": { source: "iana", extensions: ["vtu"] }, "model/vrml": { source: "iana", compressible: false, extensions: ["wrl", "vrml"] }, "model/x3d+binary": { source: "apache", compressible: false, extensions: ["x3db", "x3dbz"] }, "model/x3d+fastinfoset": { source: "iana", extensions: ["x3db"] }, "model/x3d+vrml": { source: "apache", compressible: false, extensions: ["x3dv", "x3dvz"] }, "model/x3d+xml": { source: "iana", compressible: true, extensions: ["x3d", "x3dz"] }, "model/x3d-vrml": { source: "iana", extensions: ["x3dv"] }, "multipart/alternative": { source: "iana", compressible: false }, "multipart/appledouble": { source: "iana" }, "multipart/byteranges": { source: "iana" }, "multipart/digest": { source: "iana" }, "multipart/encrypted": { source: "iana", compressible: false }, "multipart/form-data": { source: "iana", compressible: false }, "multipart/header-set": { source: "iana" }, "multipart/mixed": { source: "iana" }, "multipart/multilingual": { source: "iana" }, "multipart/parallel": { source: "iana" }, "multipart/related": { source: "iana", compressible: false }, "multipart/report": { source: "iana" }, "multipart/signed": { source: "iana", compressible: false }, "multipart/vnd.bint.med-plus": { source: "iana" }, "multipart/voice-message": { source: "iana" }, "multipart/x-mixed-replace": { source: "iana" }, "text/1d-interleaved-parityfec": { source: "iana" }, "text/cache-manifest": { source: "iana", compressible: true, extensions: ["appcache", "manifest"] }, "text/calendar": { source: "iana", extensions: ["ics", "ifb"] }, "text/calender": { compressible: true }, "text/cmd": { compressible: true }, "text/coffeescript": { extensions: ["coffee", "litcoffee"] }, "text/cql": { source: "iana" }, "text/cql-expression": { source: "iana" }, "text/cql-identifier": { source: "iana" }, "text/css": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["css"] }, "text/csv": { source: "iana", compressible: true, extensions: ["csv"] }, "text/csv-schema": { source: "iana" }, "text/directory": { source: "iana" }, "text/dns": { source: "iana" }, "text/ecmascript": { source: "iana" }, "text/encaprtp": { source: "iana" }, "text/enriched": { source: "iana" }, "text/fhirpath": { source: "iana" }, "text/flexfec": { source: "iana" }, "text/fwdred": { source: "iana" }, "text/gff3": { source: "iana" }, "text/grammar-ref-list": { source: "iana" }, "text/html": { source: "iana", compressible: true, extensions: ["html", "htm", "shtml"] }, "text/jade": { extensions: ["jade"] }, "text/javascript": { source: "iana", compressible: true }, "text/jcr-cnd": { source: "iana" }, "text/jsx": { compressible: true, extensions: ["jsx"] }, "text/less": { compressible: true, extensions: ["less"] }, "text/markdown": { source: "iana", compressible: true, extensions: ["markdown", "md"] }, "text/mathml": { source: "nginx", extensions: ["mml"] }, "text/mdx": { compressible: true, extensions: ["mdx"] }, "text/mizar": { source: "iana" }, "text/n3": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["n3"] }, "text/parameters": { source: "iana", charset: "UTF-8" }, "text/parityfec": { source: "iana" }, "text/plain": { source: "iana", compressible: true, extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] }, "text/provenance-notation": { source: "iana", charset: "UTF-8" }, "text/prs.fallenstein.rst": { source: "iana" }, "text/prs.lines.tag": { source: "iana", extensions: ["dsc"] }, "text/prs.prop.logic": { source: "iana" }, "text/raptorfec": { source: "iana" }, "text/red": { source: "iana" }, "text/rfc822-headers": { source: "iana" }, "text/richtext": { source: "iana", compressible: true, extensions: ["rtx"] }, "text/rtf": { source: "iana", compressible: true, extensions: ["rtf"] }, "text/rtp-enc-aescm128": { source: "iana" }, "text/rtploopback": { source: "iana" }, "text/rtx": { source: "iana" }, "text/sgml": { source: "iana", extensions: ["sgml", "sgm"] }, "text/shaclc": { source: "iana" }, "text/shex": { source: "iana", extensions: ["shex"] }, "text/slim": { extensions: ["slim", "slm"] }, "text/spdx": { source: "iana", extensions: ["spdx"] }, "text/strings": { source: "iana" }, "text/stylus": { extensions: ["stylus", "styl"] }, "text/t140": { source: "iana" }, "text/tab-separated-values": { source: "iana", compressible: true, extensions: ["tsv"] }, "text/troff": { source: "iana", extensions: ["t", "tr", "roff", "man", "me", "ms"] }, "text/turtle": { source: "iana", charset: "UTF-8", extensions: ["ttl"] }, "text/ulpfec": { source: "iana" }, "text/uri-list": { source: "iana", compressible: true, extensions: ["uri", "uris", "urls"] }, "text/vcard": { source: "iana", compressible: true, extensions: ["vcard"] }, "text/vnd.a": { source: "iana" }, "text/vnd.abc": { source: "iana" }, "text/vnd.ascii-art": { source: "iana" }, "text/vnd.curl": { source: "iana", extensions: ["curl"] }, "text/vnd.curl.dcurl": { source: "apache", extensions: ["dcurl"] }, "text/vnd.curl.mcurl": { source: "apache", extensions: ["mcurl"] }, "text/vnd.curl.scurl": { source: "apache", extensions: ["scurl"] }, "text/vnd.debian.copyright": { source: "iana", charset: "UTF-8" }, "text/vnd.dmclientscript": { source: "iana" }, "text/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "text/vnd.esmertec.theme-descriptor": { source: "iana", charset: "UTF-8" }, "text/vnd.familysearch.gedcom": { source: "iana", extensions: ["ged"] }, "text/vnd.ficlab.flt": { source: "iana" }, "text/vnd.fly": { source: "iana", extensions: ["fly"] }, "text/vnd.fmi.flexstor": { source: "iana", extensions: ["flx"] }, "text/vnd.gml": { source: "iana" }, "text/vnd.graphviz": { source: "iana", extensions: ["gv"] }, "text/vnd.hans": { source: "iana" }, "text/vnd.hgl": { source: "iana" }, "text/vnd.in3d.3dml": { source: "iana", extensions: ["3dml"] }, "text/vnd.in3d.spot": { source: "iana", extensions: ["spot"] }, "text/vnd.iptc.newsml": { source: "iana" }, "text/vnd.iptc.nitf": { source: "iana" }, "text/vnd.latex-z": { source: "iana" }, "text/vnd.motorola.reflex": { source: "iana" }, "text/vnd.ms-mediapackage": { source: "iana" }, "text/vnd.net2phone.commcenter.command": { source: "iana" }, "text/vnd.radisys.msml-basic-layout": { source: "iana" }, "text/vnd.senx.warpscript": { source: "iana" }, "text/vnd.si.uricatalogue": { source: "iana" }, "text/vnd.sosi": { source: "iana" }, "text/vnd.sun.j2me.app-descriptor": { source: "iana", charset: "UTF-8", extensions: ["jad"] }, "text/vnd.trolltech.linguist": { source: "iana", charset: "UTF-8" }, "text/vnd.wap.si": { source: "iana" }, "text/vnd.wap.sl": { source: "iana" }, "text/vnd.wap.wml": { source: "iana", extensions: ["wml"] }, "text/vnd.wap.wmlscript": { source: "iana", extensions: ["wmls"] }, "text/vtt": { source: "iana", charset: "UTF-8", compressible: true, extensions: ["vtt"] }, "text/x-asm": { source: "apache", extensions: ["s", "asm"] }, "text/x-c": { source: "apache", extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] }, "text/x-component": { source: "nginx", extensions: ["htc"] }, "text/x-fortran": { source: "apache", extensions: ["f", "for", "f77", "f90"] }, "text/x-gwt-rpc": { compressible: true }, "text/x-handlebars-template": { extensions: ["hbs"] }, "text/x-java-source": { source: "apache", extensions: ["java"] }, "text/x-jquery-tmpl": { compressible: true }, "text/x-lua": { extensions: ["lua"] }, "text/x-markdown": { compressible: true, extensions: ["mkd"] }, "text/x-nfo": { source: "apache", extensions: ["nfo"] }, "text/x-opml": { source: "apache", extensions: ["opml"] }, "text/x-org": { compressible: true, extensions: ["org"] }, "text/x-pascal": { source: "apache", extensions: ["p", "pas"] }, "text/x-processing": { compressible: true, extensions: ["pde"] }, "text/x-sass": { extensions: ["sass"] }, "text/x-scss": { extensions: ["scss"] }, "text/x-setext": { source: "apache", extensions: ["etx"] }, "text/x-sfv": { source: "apache", extensions: ["sfv"] }, "text/x-suse-ymp": { compressible: true, extensions: ["ymp"] }, "text/x-uuencode": { source: "apache", extensions: ["uu"] }, "text/x-vcalendar": { source: "apache", extensions: ["vcs"] }, "text/x-vcard": { source: "apache", extensions: ["vcf"] }, "text/xml": { source: "iana", compressible: true, extensions: ["xml"] }, "text/xml-external-parsed-entity": { source: "iana" }, "text/yaml": { compressible: true, extensions: ["yaml", "yml"] }, "video/1d-interleaved-parityfec": { source: "iana" }, "video/3gpp": { source: "iana", extensions: ["3gp", "3gpp"] }, "video/3gpp-tt": { source: "iana" }, "video/3gpp2": { source: "iana", extensions: ["3g2"] }, "video/av1": { source: "iana" }, "video/bmpeg": { source: "iana" }, "video/bt656": { source: "iana" }, "video/celb": { source: "iana" }, "video/dv": { source: "iana" }, "video/encaprtp": { source: "iana" }, "video/ffv1": { source: "iana" }, "video/flexfec": { source: "iana" }, "video/h261": { source: "iana", extensions: ["h261"] }, "video/h263": { source: "iana", extensions: ["h263"] }, "video/h263-1998": { source: "iana" }, "video/h263-2000": { source: "iana" }, "video/h264": { source: "iana", extensions: ["h264"] }, "video/h264-rcdo": { source: "iana" }, "video/h264-svc": { source: "iana" }, "video/h265": { source: "iana" }, "video/iso.segment": { source: "iana", extensions: ["m4s"] }, "video/jpeg": { source: "iana", extensions: ["jpgv"] }, "video/jpeg2000": { source: "iana" }, "video/jpm": { source: "apache", extensions: ["jpm", "jpgm"] }, "video/jxsv": { source: "iana" }, "video/mj2": { source: "iana", extensions: ["mj2", "mjp2"] }, "video/mp1s": { source: "iana" }, "video/mp2p": { source: "iana" }, "video/mp2t": { source: "iana", extensions: ["ts"] }, "video/mp4": { source: "iana", compressible: false, extensions: ["mp4", "mp4v", "mpg4"] }, "video/mp4v-es": { source: "iana" }, "video/mpeg": { source: "iana", compressible: false, extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] }, "video/mpeg4-generic": { source: "iana" }, "video/mpv": { source: "iana" }, "video/nv": { source: "iana" }, "video/ogg": { source: "iana", compressible: false, extensions: ["ogv"] }, "video/parityfec": { source: "iana" }, "video/pointer": { source: "iana" }, "video/quicktime": { source: "iana", compressible: false, extensions: ["qt", "mov"] }, "video/raptorfec": { source: "iana" }, "video/raw": { source: "iana" }, "video/rtp-enc-aescm128": { source: "iana" }, "video/rtploopback": { source: "iana" }, "video/rtx": { source: "iana" }, "video/scip": { source: "iana" }, "video/smpte291": { source: "iana" }, "video/smpte292m": { source: "iana" }, "video/ulpfec": { source: "iana" }, "video/vc1": { source: "iana" }, "video/vc2": { source: "iana" }, "video/vnd.cctv": { source: "iana" }, "video/vnd.dece.hd": { source: "iana", extensions: ["uvh", "uvvh"] }, "video/vnd.dece.mobile": { source: "iana", extensions: ["uvm", "uvvm"] }, "video/vnd.dece.mp4": { source: "iana" }, "video/vnd.dece.pd": { source: "iana", extensions: ["uvp", "uvvp"] }, "video/vnd.dece.sd": { source: "iana", extensions: ["uvs", "uvvs"] }, "video/vnd.dece.video": { source: "iana", extensions: ["uvv", "uvvv"] }, "video/vnd.directv.mpeg": { source: "iana" }, "video/vnd.directv.mpeg-tts": { source: "iana" }, "video/vnd.dlna.mpeg-tts": { source: "iana" }, "video/vnd.dvb.file": { source: "iana", extensions: ["dvb"] }, "video/vnd.fvt": { source: "iana", extensions: ["fvt"] }, "video/vnd.hns.video": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.ttsavc": { source: "iana" }, "video/vnd.iptvforum.ttsmpeg2": { source: "iana" }, "video/vnd.motorola.video": { source: "iana" }, "video/vnd.motorola.videop": { source: "iana" }, "video/vnd.mpegurl": { source: "iana", extensions: ["mxu", "m4u"] }, "video/vnd.ms-playready.media.pyv": { source: "iana", extensions: ["pyv"] }, "video/vnd.nokia.interleaved-multimedia": { source: "iana" }, "video/vnd.nokia.mp4vr": { source: "iana" }, "video/vnd.nokia.videovoip": { source: "iana" }, "video/vnd.objectvideo": { source: "iana" }, "video/vnd.radgamettools.bink": { source: "iana" }, "video/vnd.radgamettools.smacker": { source: "iana" }, "video/vnd.sealed.mpeg1": { source: "iana" }, "video/vnd.sealed.mpeg4": { source: "iana" }, "video/vnd.sealed.swf": { source: "iana" }, "video/vnd.sealedmedia.softseal.mov": { source: "iana" }, "video/vnd.uvvu.mp4": { source: "iana", extensions: ["uvu", "uvvu"] }, "video/vnd.vivo": { source: "iana", extensions: ["viv"] }, "video/vnd.youtube.yt": { source: "iana" }, "video/vp8": { source: "iana" }, "video/vp9": { source: "iana" }, "video/webm": { source: "apache", compressible: false, extensions: ["webm"] }, "video/x-f4v": { source: "apache", extensions: ["f4v"] }, "video/x-fli": { source: "apache", extensions: ["fli"] }, "video/x-flv": { source: "apache", compressible: false, extensions: ["flv"] }, "video/x-m4v": { source: "apache", extensions: ["m4v"] }, "video/x-matroska": { source: "apache", compressible: false, extensions: ["mkv", "mk3d", "mks"] }, "video/x-mng": { source: "apache", extensions: ["mng"] }, "video/x-ms-asf": { source: "apache", extensions: ["asf", "asx"] }, "video/x-ms-vob": { source: "apache", extensions: ["vob"] }, "video/x-ms-wm": { source: "apache", extensions: ["wm"] }, "video/x-ms-wmv": { source: "apache", compressible: false, extensions: ["wmv"] }, "video/x-ms-wmx": { source: "apache", extensions: ["wmx"] }, "video/x-ms-wvx": { source: "apache", extensions: ["wvx"] }, "video/x-msvideo": { source: "apache", extensions: ["avi"] }, "video/x-sgi-movie": { source: "apache", extensions: ["movie"] }, "video/x-smv": { source: "apache", extensions: ["smv"] }, "x-conference/x-cooltalk": { source: "apache", extensions: ["ice"] }, "x-shader/x-fragment": { compressible: true }, "x-shader/x-vertex": { compressible: true } }; }); // node_modules/mime-types/index.js var require_mime_types = __commonJS((exports) => { /*! * mime-types * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ var db = require_db(); var extname = __require("path").extname; var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; var TEXT_TYPE_REGEXP = /^text\//i; exports.charset = charset; exports.charsets = { lookup: charset }; exports.contentType = contentType; exports.extension = extension; exports.extensions = Object.create(null); exports.lookup = lookup; exports.types = Object.create(null); populateMaps(exports.extensions, exports.types); function charset(type) { if (!type || typeof type !== "string") { return false; } var match = EXTRACT_TYPE_REGEXP.exec(type); var mime = match && db[match[1].toLowerCase()]; if (mime && mime.charset) { return mime.charset; } if (match && TEXT_TYPE_REGEXP.test(match[1])) { return "UTF-8"; } return false; } function contentType(str) { if (!str || typeof str !== "string") { return false; } var mime = str.indexOf("/") === -1 ? exports.lookup(str) : str; if (!mime) { return false; } if (mime.indexOf("charset") === -1) { var charset2 = exports.charset(mime); if (charset2) mime += "; charset=" + charset2.toLowerCase(); } return mime; } function extension(type) { if (!type || typeof type !== "string") { return false; } var match = EXTRACT_TYPE_REGEXP.exec(type); var exts = match && exports.extensions[match[1].toLowerCase()]; if (!exts || !exts.length) { return false; } return exts[0]; } function lookup(path8) { if (!path8 || typeof path8 !== "string") { return false; } var extension2 = extname("x." + path8).toLowerCase().substr(1); if (!extension2) { return false; } return exports.types[extension2] || false; } function populateMaps(extensions, types) { var preference = ["nginx", "apache", undefined, "iana"]; Object.keys(db).forEach(function forEachMimeType(type) { var mime = db[type]; var exts = mime.extensions; if (!exts || !exts.length) { return; } extensions[type] = exts; for (var i = 0;i < exts.length; i++) { var extension2 = exts[i]; if (types[extension2]) { var from = preference.indexOf(db[types[extension2]].source); var to = preference.indexOf(mime.source); if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) { continue; } } types[extension2] = type; } }); } }); // node_modules/type-is/index.js var require_type_is = __commonJS((exports, module) => { /*! * type-is * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var typer = require_media_typer(); var mime = require_mime_types(); module.exports = typeofrequest; module.exports.is = typeis; module.exports.hasBody = hasbody; module.exports.normalize = normalize; module.exports.match = mimeMatch; function typeis(value, types_) { var i; var types = types_; var val = tryNormalizeType(value); if (!val) { return false; } if (types && !Array.isArray(types)) { types = new Array(arguments.length - 1); for (i = 0;i < types.length; i++) { types[i] = arguments[i + 1]; } } if (!types || !types.length) { return val; } var type; for (i = 0;i < types.length; i++) { if (mimeMatch(normalize(type = types[i]), val)) { return type[0] === "+" || type.indexOf("*") !== -1 ? val : type; } } return false; } function hasbody(req) { return req.headers["transfer-encoding"] !== undefined || !isNaN(req.headers["content-length"]); } function typeofrequest(req, types_) { var types = types_; if (!hasbody(req)) { return null; } if (arguments.length > 2) { types = new Array(arguments.length - 1); for (var i = 0;i < types.length; i++) { types[i] = arguments[i + 1]; } } var value = req.headers["content-type"]; return typeis(value, types); } function normalize(type) { if (typeof type !== "string") { return false; } switch (type) { case "urlencoded": return "application/x-www-form-urlencoded"; case "multipart": return "multipart/*"; } if (type[0] === "+") { return "*/*" + type; } return type.indexOf("/") === -1 ? mime.lookup(type) : type; } function mimeMatch(expected, actual) { if (expected === false) { return false; } var actualParts = actual.split("/"); var expectedParts = expected.split("/"); if (actualParts.length !== 2 || expectedParts.length !== 2) { return false; } if (expectedParts[0] !== "*" && expectedParts[0] !== actualParts[0]) { return false; } if (expectedParts[1].substr(0, 2) === "*+") { return expectedParts[1].length <= actualParts[1].length + 1 && expectedParts[1].substr(1) === actualParts[1].substr(1 - expectedParts[1].length); } if (expectedParts[1] !== "*" && expectedParts[1] !== actualParts[1]) { return false; } return true; } function normalizeType(value) { var type = typer.parse(value); type.parameters = undefined; return typer.format(type); } function tryNormalizeType(value) { if (!value) { return null; } try { return normalizeType(value); } catch (err) { return null; } } }); // node_modules/body-parser/lib/types/json.js var require_json = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var bytes = require_bytes(); var contentType = require_content_type(); var createError = require_http_errors(); var debug = require_src()("body-parser:json"); var read = require_read(); var typeis = require_type_is(); module.exports = json; var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/; var JSON_SYNTAX_CHAR = "#"; var JSON_SYNTAX_REGEXP = /#+/g; function json(options) { var opts = options || {}; var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; var inflate = opts.inflate !== false; var reviver = opts.reviver; var strict = opts.strict !== false; var type = opts.type || "application/json"; var verify = opts.verify || false; if (verify !== false && typeof verify !== "function") { throw new TypeError("option verify must be function"); } var shouldParse = typeof type !== "function" ? typeChecker(type) : type; function parse5(body) { if (body.length === 0) { return {}; } if (strict) { var first = firstchar(body); if (first !== "{" && first !== "[") { debug("strict violation"); throw createStrictSyntaxError(body, first); } } try { debug("parse json"); return JSON.parse(body, reviver); } catch (e) { throw normalizeJsonSyntaxError(e, { message: e.message, stack: e.stack }); } } return function jsonParser(req, res, next) { if (req._body) { debug("body already parsed"); next(); return; } req.body = req.body || {}; if (!typeis.hasBody(req)) { debug("skip empty body"); next(); return; } debug("content-type %j", req.headers["content-type"]); if (!shouldParse(req)) { debug("skip parsing"); next(); return; } var charset = getCharset(req) || "utf-8"; if (charset.slice(0, 4) !== "utf-") { debug("invalid charset"); next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { charset, type: "charset.unsupported" })); return; } read(req, res, next, parse5, debug, { encoding: charset, inflate, limit, verify }); }; } function createStrictSyntaxError(str, char) { var index = str.indexOf(char); var partial2 = ""; if (index !== -1) { partial2 = str.substring(0, index) + JSON_SYNTAX_CHAR; for (var i = index + 1;i < str.length; i++) { partial2 += JSON_SYNTAX_CHAR; } } try { JSON.parse(partial2); throw new SyntaxError("strict violation"); } catch (e) { return normalizeJsonSyntaxError(e, { message: e.message.replace(JSON_SYNTAX_REGEXP, function(placeholder) { return str.substring(index, index + placeholder.length); }), stack: e.stack }); } } function firstchar(str) { var match = FIRST_CHAR_REGEXP.exec(str); return match ? match[1] : undefined; } function getCharset(req) { try { return (contentType.parse(req).parameters.charset || "").toLowerCase(); } catch (e) { return; } } function normalizeJsonSyntaxError(error2, obj) { var keys = Object.getOwnPropertyNames(error2); for (var i = 0;i < keys.length; i++) { var key = keys[i]; if (key !== "stack" && key !== "message") { delete error2[key]; } } error2.stack = obj.stack.replace(error2.message, obj.message); error2.message = obj.message; return error2; } function typeChecker(type) { return function checkType(req) { return Boolean(typeis(req, type)); }; } }); // node_modules/body-parser/lib/types/raw.js var require_raw = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var bytes = require_bytes(); var debug = require_src()("body-parser:raw"); var read = require_read(); var typeis = require_type_is(); module.exports = raw; function raw(options) { var opts = options || {}; var inflate = opts.inflate !== false; var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; var type = opts.type || "application/octet-stream"; var verify = opts.verify || false; if (verify !== false && typeof verify !== "function") { throw new TypeError("option verify must be function"); } var shouldParse = typeof type !== "function" ? typeChecker(type) : type; function parse5(buf) { return buf; } return function rawParser(req, res, next) { if (req._body) { debug("body already parsed"); next(); return; } req.body = req.body || {}; if (!typeis.hasBody(req)) { debug("skip empty body"); next(); return; } debug("content-type %j", req.headers["content-type"]); if (!shouldParse(req)) { debug("skip parsing"); next(); return; } read(req, res, next, parse5, debug, { encoding: null, inflate, limit, verify }); }; } function typeChecker(type) { return function checkType(req) { return Boolean(typeis(req, type)); }; } }); // node_modules/body-parser/lib/types/text.js var require_text = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var bytes = require_bytes(); var contentType = require_content_type(); var debug = require_src()("body-parser:text"); var read = require_read(); var typeis = require_type_is(); module.exports = text; function text(options) { var opts = options || {}; var defaultCharset = opts.defaultCharset || "utf-8"; var inflate = opts.inflate !== false; var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; var type = opts.type || "text/plain"; var verify = opts.verify || false; if (verify !== false && typeof verify !== "function") { throw new TypeError("option verify must be function"); } var shouldParse = typeof type !== "function" ? typeChecker(type) : type; function parse5(buf) { return buf; } return function textParser(req, res, next) { if (req._body) { debug("body already parsed"); next(); return; } req.body = req.body || {}; if (!typeis.hasBody(req)) { debug("skip empty body"); next(); return; } debug("content-type %j", req.headers["content-type"]); if (!shouldParse(req)) { debug("skip parsing"); next(); return; } var charset = getCharset(req) || defaultCharset; read(req, res, next, parse5, debug, { encoding: charset, inflate, limit, verify }); }; } function getCharset(req) { try { return (contentType.parse(req).parameters.charset || "").toLowerCase(); } catch (e) { return; } } function typeChecker(type) { return function checkType(req) { return Boolean(typeis(req, type)); }; } }); // node_modules/es-errors/type.js var require_type = __commonJS((exports, module) => { module.exports = TypeError; }); // node_modules/object-inspect/util.inspect.js var require_util_inspect = __commonJS((exports, module) => { module.exports = __require("util").inspect; }); // node_modules/object-inspect/index.js var require_object_inspect = __commonJS((exports, module) => { var hasMap = typeof Map === "function" && Map.prototype; var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, "size") : null; var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === "function" ? mapSizeDescriptor.get : null; var mapForEach = hasMap && Map.prototype.forEach; var hasSet = typeof Set === "function" && Set.prototype; var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, "size") : null; var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === "function" ? setSizeDescriptor.get : null; var setForEach = hasSet && Set.prototype.forEach; var hasWeakMap = typeof WeakMap === "function" && WeakMap.prototype; var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; var hasWeakSet = typeof WeakSet === "function" && WeakSet.prototype; var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; var hasWeakRef = typeof WeakRef === "function" && WeakRef.prototype; var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; var booleanValueOf = Boolean.prototype.valueOf; var objectToString = Object.prototype.toString; var functionToString = Function.prototype.toString; var $match = String.prototype.match; var $slice = String.prototype.slice; var $replace = String.prototype.replace; var $toUpperCase = String.prototype.toUpperCase; var $toLowerCase = String.prototype.toLowerCase; var $test = RegExp.prototype.test; var $concat = Array.prototype.concat; var $join = Array.prototype.join; var $arrSlice = Array.prototype.slice; var $floor = Math.floor; var bigIntValueOf = typeof BigInt === "function" ? BigInt.prototype.valueOf : null; var gOPS = Object.getOwnPropertySymbols; var symToString = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? Symbol.prototype.toString : null; var hasShammedSymbols = typeof Symbol === "function" && typeof Symbol.iterator === "object"; var toStringTag = typeof Symbol === "function" && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? "object" : "symbol") ? Symbol.toStringTag : null; var isEnumerable = Object.prototype.propertyIsEnumerable; var gPO = (typeof Reflect === "function" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(O) { return O.__proto__; } : null); function addNumericSeparator(num, str) { if (num === Infinity || num === -Infinity || num !== num || num && num > -1000 && num < 1000 || $test.call(/e/, str)) { return str; } var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; if (typeof num === "number") { var int2 = num < 0 ? -$floor(-num) : $floor(num); if (int2 !== num) { var intStr = String(int2); var dec = $slice.call(str, intStr.length + 1); return $replace.call(intStr, sepRegex, "$&_") + "." + $replace.call($replace.call(dec, /([0-9]{3})/g, "$&_"), /_$/, ""); } } return $replace.call(str, sepRegex, "$&_"); } var utilInspect = require_util_inspect(); var inspectCustom = utilInspect.custom; var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; var quotes = { __proto__: null, double: '"', single: "'" }; var quoteREs = { __proto__: null, double: /(["\\])/g, single: /(['\\])/g }; module.exports = function inspect_(obj, options, depth, seen) { var opts = options || {}; if (has(opts, "quoteStyle") && !has(quotes, opts.quoteStyle)) { throw new TypeError('option "quoteStyle" must be "single" or "double"'); } if (has(opts, "maxStringLength") && (typeof opts.maxStringLength === "number" ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) { throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); } var customInspect = has(opts, "customInspect") ? opts.customInspect : true; if (typeof customInspect !== "boolean" && customInspect !== "symbol") { throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`"); } if (has(opts, "indent") && opts.indent !== null && opts.indent !== "\t" && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) { throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); } if (has(opts, "numericSeparator") && typeof opts.numericSeparator !== "boolean") { throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); } var numericSeparator = opts.numericSeparator; if (typeof obj === "undefined") { return "undefined"; } if (obj === null) { return "null"; } if (typeof obj === "boolean") { return obj ? "true" : "false"; } if (typeof obj === "string") { return inspectString(obj, opts); } if (typeof obj === "number") { if (obj === 0) { return Infinity / obj > 0 ? "0" : "-0"; } var str = String(obj); return numericSeparator ? addNumericSeparator(obj, str) : str; } if (typeof obj === "bigint") { var bigIntStr = String(obj) + "n"; return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; } var maxDepth = typeof opts.depth === "undefined" ? 5 : opts.depth; if (typeof depth === "undefined") { depth = 0; } if (depth >= maxDepth && maxDepth > 0 && typeof obj === "object") { return isArray(obj) ? "[Array]" : "[Object]"; } var indent = getIndent(opts, depth); if (typeof seen === "undefined") { seen = []; } else if (indexOf(seen, obj) >= 0) { return "[Circular]"; } function inspect(value, from, noIndent) { if (from) { seen = $arrSlice.call(seen); seen.push(from); } if (noIndent) { var newOpts = { depth: opts.depth }; if (has(opts, "quoteStyle")) { newOpts.quoteStyle = opts.quoteStyle; } return inspect_(value, newOpts, depth + 1, seen); } return inspect_(value, opts, depth + 1, seen); } if (typeof obj === "function" && !isRegExp(obj)) { var name = nameOf(obj); var keys = arrObjKeys(obj, inspect); return "[Function" + (name ? ": " + name : " (anonymous)") + "]" + (keys.length > 0 ? " { " + $join.call(keys, ", ") + " }" : ""); } if (isSymbol(obj)) { var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, "$1") : symToString.call(obj); return typeof obj === "object" && !hasShammedSymbols ? markBoxed(symString) : symString; } if (isElement(obj)) { var s = "<" + $toLowerCase.call(String(obj.nodeName)); var attrs = obj.attributes || []; for (var i = 0;i < attrs.length; i++) { s += " " + attrs[i].name + "=" + wrapQuotes(quote(attrs[i].value), "double", opts); } s += ">"; if (obj.childNodes && obj.childNodes.length) { s += "..."; } s += ""; return s; } if (isArray(obj)) { if (obj.length === 0) { return "[]"; } var xs = arrObjKeys(obj, inspect); if (indent && !singleLineValues(xs)) { return "[" + indentedJoin(xs, indent) + "]"; } return "[ " + $join.call(xs, ", ") + " ]"; } if (isError(obj)) { var parts = arrObjKeys(obj, inspect); if (!("cause" in Error.prototype) && "cause" in obj && !isEnumerable.call(obj, "cause")) { return "{ [" + String(obj) + "] " + $join.call($concat.call("[cause]: " + inspect(obj.cause), parts), ", ") + " }"; } if (parts.length === 0) { return "[" + String(obj) + "]"; } return "{ [" + String(obj) + "] " + $join.call(parts, ", ") + " }"; } if (typeof obj === "object" && customInspect) { if (inspectSymbol && typeof obj[inspectSymbol] === "function" && utilInspect) { return utilInspect(obj, { depth: maxDepth - depth }); } else if (customInspect !== "symbol" && typeof obj.inspect === "function") { return obj.inspect(); } } if (isMap(obj)) { var mapParts = []; if (mapForEach) { mapForEach.call(obj, function(value, key) { mapParts.push(inspect(key, obj, true) + " => " + inspect(value, obj)); }); } return collectionOf("Map", mapSize.call(obj), mapParts, indent); } if (isSet(obj)) { var setParts = []; if (setForEach) { setForEach.call(obj, function(value) { setParts.push(inspect(value, obj)); }); } return collectionOf("Set", setSize.call(obj), setParts, indent); } if (isWeakMap(obj)) { return weakCollectionOf("WeakMap"); } if (isWeakSet(obj)) { return weakCollectionOf("WeakSet"); } if (isWeakRef(obj)) { return weakCollectionOf("WeakRef"); } if (isNumber(obj)) { return markBoxed(inspect(Number(obj))); } if (isBigInt(obj)) { return markBoxed(inspect(bigIntValueOf.call(obj))); } if (isBoolean(obj)) { return markBoxed(booleanValueOf.call(obj)); } if (isString(obj)) { return markBoxed(inspect(String(obj))); } if (typeof window !== "undefined" && obj === window) { return "{ [object Window] }"; } if (typeof globalThis !== "undefined" && obj === globalThis || typeof global !== "undefined" && obj === global) { return "{ [object globalThis] }"; } if (!isDate(obj) && !isRegExp(obj)) { var ys = arrObjKeys(obj, inspect); var isPlainObject3 = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; var protoTag = obj instanceof Object ? "" : "null prototype"; var stringTag = !isPlainObject3 && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? "Object" : ""; var constructorTag = isPlainObject3 || typeof obj.constructor !== "function" ? "" : obj.constructor.name ? obj.constructor.name + " " : ""; var tag = constructorTag + (stringTag || protoTag ? "[" + $join.call($concat.call([], stringTag || [], protoTag || []), ": ") + "] " : ""); if (ys.length === 0) { return tag + "{}"; } if (indent) { return tag + "{" + indentedJoin(ys, indent) + "}"; } return tag + "{ " + $join.call(ys, ", ") + " }"; } return String(obj); }; function wrapQuotes(s, defaultStyle, opts) { var style = opts.quoteStyle || defaultStyle; var quoteChar = quotes[style]; return quoteChar + s + quoteChar; } function quote(s) { return $replace.call(String(s), /"/g, """); } function canTrustToString(obj) { return !toStringTag || !(typeof obj === "object" && ((toStringTag in obj) || typeof obj[toStringTag] !== "undefined")); } function isArray(obj) { return toStr(obj) === "[object Array]" && canTrustToString(obj); } function isDate(obj) { return toStr(obj) === "[object Date]" && canTrustToString(obj); } function isRegExp(obj) { return toStr(obj) === "[object RegExp]" && canTrustToString(obj); } function isError(obj) { return toStr(obj) === "[object Error]" && canTrustToString(obj); } function isString(obj) { return toStr(obj) === "[object String]" && canTrustToString(obj); } function isNumber(obj) { return toStr(obj) === "[object Number]" && canTrustToString(obj); } function isBoolean(obj) { return toStr(obj) === "[object Boolean]" && canTrustToString(obj); } function isSymbol(obj) { if (hasShammedSymbols) { return obj && typeof obj === "object" && obj instanceof Symbol; } if (typeof obj === "symbol") { return true; } if (!obj || typeof obj !== "object" || !symToString) { return false; } try { symToString.call(obj); return true; } catch (e) {} return false; } function isBigInt(obj) { if (!obj || typeof obj !== "object" || !bigIntValueOf) { return false; } try { bigIntValueOf.call(obj); return true; } catch (e) {} return false; } var hasOwn = Object.prototype.hasOwnProperty || function(key) { return key in this; }; function has(obj, key) { return hasOwn.call(obj, key); } function toStr(obj) { return objectToString.call(obj); } function nameOf(f) { if (f.name) { return f.name; } var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); if (m) { return m[1]; } return null; } function indexOf(xs, x) { if (xs.indexOf) { return xs.indexOf(x); } for (var i = 0, l = xs.length;i < l; i++) { if (xs[i] === x) { return i; } } return -1; } function isMap(x) { if (!mapSize || !x || typeof x !== "object") { return false; } try { mapSize.call(x); try { setSize.call(x); } catch (s) { return true; } return x instanceof Map; } catch (e) {} return false; } function isWeakMap(x) { if (!weakMapHas || !x || typeof x !== "object") { return false; } try { weakMapHas.call(x, weakMapHas); try { weakSetHas.call(x, weakSetHas); } catch (s) { return true; } return x instanceof WeakMap; } catch (e) {} return false; } function isWeakRef(x) { if (!weakRefDeref || !x || typeof x !== "object") { return false; } try { weakRefDeref.call(x); return true; } catch (e) {} return false; } function isSet(x) { if (!setSize || !x || typeof x !== "object") { return false; } try { setSize.call(x); try { mapSize.call(x); } catch (m) { return true; } return x instanceof Set; } catch (e) {} return false; } function isWeakSet(x) { if (!weakSetHas || !x || typeof x !== "object") { return false; } try { weakSetHas.call(x, weakSetHas); try { weakMapHas.call(x, weakMapHas); } catch (s) { return true; } return x instanceof WeakSet; } catch (e) {} return false; } function isElement(x) { if (!x || typeof x !== "object") { return false; } if (typeof HTMLElement !== "undefined" && x instanceof HTMLElement) { return true; } return typeof x.nodeName === "string" && typeof x.getAttribute === "function"; } function inspectString(str, opts) { if (str.length > opts.maxStringLength) { var remaining = str.length - opts.maxStringLength; var trailer = "... " + remaining + " more character" + (remaining > 1 ? "s" : ""); return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; } var quoteRE = quoteREs[opts.quoteStyle || "single"]; quoteRE.lastIndex = 0; var s = $replace.call($replace.call(str, quoteRE, "\\$1"), /[\x00-\x1f]/g, lowbyte); return wrapQuotes(s, "single", opts); } function lowbyte(c) { var n = c.charCodeAt(0); var x = { 8: "b", 9: "t", 10: "n", 12: "f", 13: "r" }[n]; if (x) { return "\\" + x; } return "\\x" + (n < 16 ? "0" : "") + $toUpperCase.call(n.toString(16)); } function markBoxed(str) { return "Object(" + str + ")"; } function weakCollectionOf(type) { return type + " { ? }"; } function collectionOf(type, size, entries, indent) { var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ", "); return type + " (" + size + ") {" + joinedEntries + "}"; } function singleLineValues(xs) { for (var i = 0;i < xs.length; i++) { if (indexOf(xs[i], ` `) >= 0) { return false; } } return true; } function getIndent(opts, depth) { var baseIndent; if (opts.indent === "\t") { baseIndent = "\t"; } else if (typeof opts.indent === "number" && opts.indent > 0) { baseIndent = $join.call(Array(opts.indent + 1), " "); } else { return null; } return { base: baseIndent, prev: $join.call(Array(depth + 1), baseIndent) }; } function indentedJoin(xs, indent) { if (xs.length === 0) { return ""; } var lineJoiner = ` ` + indent.prev + indent.base; return lineJoiner + $join.call(xs, "," + lineJoiner) + ` ` + indent.prev; } function arrObjKeys(obj, inspect) { var isArr = isArray(obj); var xs = []; if (isArr) { xs.length = obj.length; for (var i = 0;i < obj.length; i++) { xs[i] = has(obj, i) ? inspect(obj[i], obj) : ""; } } var syms = typeof gOPS === "function" ? gOPS(obj) : []; var symMap; if (hasShammedSymbols) { symMap = {}; for (var k = 0;k < syms.length; k++) { symMap["$" + syms[k]] = syms[k]; } } for (var key in obj) { if (!has(obj, key)) { continue; } if (isArr && String(Number(key)) === key && key < obj.length) { continue; } if (hasShammedSymbols && symMap["$" + key] instanceof Symbol) { continue; } else if ($test.call(/[^\w$]/, key)) { xs.push(inspect(key, obj) + ": " + inspect(obj[key], obj)); } else { xs.push(key + ": " + inspect(obj[key], obj)); } } if (typeof gOPS === "function") { for (var j = 0;j < syms.length; j++) { if (isEnumerable.call(obj, syms[j])) { xs.push("[" + inspect(syms[j]) + "]: " + inspect(obj[syms[j]], obj)); } } } return xs; } }); // node_modules/side-channel-list/index.js var require_side_channel_list = __commonJS((exports, module) => { var inspect = require_object_inspect(); var $TypeError = require_type(); var listGetNode = function(list, key, isDelete) { var prev = list; var curr; for (;(curr = prev.next) != null; prev = curr) { if (curr.key === key) { prev.next = curr.next; if (!isDelete) { curr.next = list.next; list.next = curr; } return curr; } } }; var listGet = function(objects, key) { if (!objects) { return; } var node = listGetNode(objects, key); return node && node.value; }; var listSet = function(objects, key, value) { var node = listGetNode(objects, key); if (node) { node.value = value; } else { objects.next = { key, next: objects.next, value }; } }; var listHas = function(objects, key) { if (!objects) { return false; } return !!listGetNode(objects, key); }; var listDelete = function(objects, key) { if (objects) { return listGetNode(objects, key, true); } }; module.exports = function getSideChannelList() { var $o; var channel = { assert: function(key) { if (!channel.has(key)) { throw new $TypeError("Side channel does not contain " + inspect(key)); } }, delete: function(key) { var root = $o && $o.next; var deletedNode = listDelete($o, key); if (deletedNode && root && root === deletedNode) { $o = undefined; } return !!deletedNode; }, get: function(key) { return listGet($o, key); }, has: function(key) { return listHas($o, key); }, set: function(key, value) { if (!$o) { $o = { next: undefined }; } listSet($o, key, value); } }; return channel; }; }); // node_modules/es-object-atoms/index.js var require_es_object_atoms = __commonJS((exports, module) => { module.exports = Object; }); // node_modules/es-errors/index.js var require_es_errors = __commonJS((exports, module) => { module.exports = Error; }); // node_modules/es-errors/eval.js var require_eval = __commonJS((exports, module) => { module.exports = EvalError; }); // node_modules/es-errors/range.js var require_range = __commonJS((exports, module) => { module.exports = RangeError; }); // node_modules/es-errors/ref.js var require_ref2 = __commonJS((exports, module) => { module.exports = ReferenceError; }); // node_modules/es-errors/syntax.js var require_syntax = __commonJS((exports, module) => { module.exports = SyntaxError; }); // node_modules/es-errors/uri.js var require_uri2 = __commonJS((exports, module) => { module.exports = URIError; }); // node_modules/math-intrinsics/abs.js var require_abs = __commonJS((exports, module) => { module.exports = Math.abs; }); // node_modules/math-intrinsics/floor.js var require_floor = __commonJS((exports, module) => { module.exports = Math.floor; }); // node_modules/math-intrinsics/max.js var require_max = __commonJS((exports, module) => { module.exports = Math.max; }); // node_modules/math-intrinsics/min.js var require_min = __commonJS((exports, module) => { module.exports = Math.min; }); // node_modules/math-intrinsics/pow.js var require_pow = __commonJS((exports, module) => { module.exports = Math.pow; }); // node_modules/math-intrinsics/round.js var require_round = __commonJS((exports, module) => { module.exports = Math.round; }); // node_modules/math-intrinsics/isNaN.js var require_isNaN = __commonJS((exports, module) => { module.exports = Number.isNaN || function isNaN2(a) { return a !== a; }; }); // node_modules/math-intrinsics/sign.js var require_sign = __commonJS((exports, module) => { var $isNaN = require_isNaN(); module.exports = function sign(number4) { if ($isNaN(number4) || number4 === 0) { return number4; } return number4 < 0 ? -1 : 1; }; }); // node_modules/gopd/gOPD.js var require_gOPD = __commonJS((exports, module) => { module.exports = Object.getOwnPropertyDescriptor; }); // node_modules/gopd/index.js var require_gopd = __commonJS((exports, module) => { var $gOPD = require_gOPD(); if ($gOPD) { try { $gOPD([], "length"); } catch (e) { $gOPD = null; } } module.exports = $gOPD; }); // node_modules/es-define-property/index.js var require_es_define_property = __commonJS((exports, module) => { var $defineProperty = Object.defineProperty || false; if ($defineProperty) { try { $defineProperty({}, "a", { value: 1 }); } catch (e) { $defineProperty = false; } } module.exports = $defineProperty; }); // node_modules/has-symbols/shams.js var require_shams = __commonJS((exports, module) => { module.exports = function hasSymbols() { if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") { return false; } if (typeof Symbol.iterator === "symbol") { return true; } var obj = {}; var sym = Symbol("test"); var symObj = Object(sym); if (typeof sym === "string") { return false; } if (Object.prototype.toString.call(sym) !== "[object Symbol]") { return false; } if (Object.prototype.toString.call(symObj) !== "[object Symbol]") { return false; } var symVal = 42; obj[sym] = symVal; for (var _ in obj) { return false; } if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) { return false; } if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) { return false; } var syms = Object.getOwnPropertySymbols(obj); if (syms.length !== 1 || syms[0] !== sym) { return false; } if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } if (typeof Object.getOwnPropertyDescriptor === "function") { var descriptor = Object.getOwnPropertyDescriptor(obj, sym); if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } } return true; }; }); // node_modules/has-symbols/index.js var require_has_symbols = __commonJS((exports, module) => { var origSymbol = typeof Symbol !== "undefined" && Symbol; var hasSymbolSham = require_shams(); module.exports = function hasNativeSymbols() { if (typeof origSymbol !== "function") { return false; } if (typeof Symbol !== "function") { return false; } if (typeof origSymbol("foo") !== "symbol") { return false; } if (typeof Symbol("bar") !== "symbol") { return false; } return hasSymbolSham(); }; }); // node_modules/get-proto/Reflect.getPrototypeOf.js var require_Reflect_getPrototypeOf = __commonJS((exports, module) => { module.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null; }); // node_modules/get-proto/Object.getPrototypeOf.js var require_Object_getPrototypeOf = __commonJS((exports, module) => { var $Object = require_es_object_atoms(); module.exports = $Object.getPrototypeOf || null; }); // node_modules/function-bind/implementation.js var require_implementation = __commonJS((exports, module) => { var ERROR_MESSAGE = "Function.prototype.bind called on incompatible "; var toStr = Object.prototype.toString; var max = Math.max; var funcType = "[object Function]"; var concatty = function concatty2(a, b) { var arr = []; for (var i = 0;i < a.length; i += 1) { arr[i] = a[i]; } for (var j = 0;j < b.length; j += 1) { arr[j + a.length] = b[j]; } return arr; }; var slicy = function slicy2(arrLike, offset) { var arr = []; for (var i = offset || 0, j = 0;i < arrLike.length; i += 1, j += 1) { arr[j] = arrLike[i]; } return arr; }; var joiny = function(arr, joiner) { var str = ""; for (var i = 0;i < arr.length; i += 1) { str += arr[i]; if (i + 1 < arr.length) { str += joiner; } } return str; }; module.exports = function bind(that) { var target = this; if (typeof target !== "function" || toStr.apply(target) !== funcType) { throw new TypeError(ERROR_MESSAGE + target); } var args = slicy(arguments, 1); var bound; var binder = function() { if (this instanceof bound) { var result = target.apply(this, concatty(args, arguments)); if (Object(result) === result) { return result; } return this; } return target.apply(that, concatty(args, arguments)); }; var boundLength = max(0, target.length - args.length); var boundArgs = []; for (var i = 0;i < boundLength; i++) { boundArgs[i] = "$" + i; } bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder); if (target.prototype) { var Empty = function Empty2() {}; Empty.prototype = target.prototype; bound.prototype = new Empty; Empty.prototype = null; } return bound; }; }); // node_modules/function-bind/index.js var require_function_bind = __commonJS((exports, module) => { var implementation = require_implementation(); module.exports = Function.prototype.bind || implementation; }); // node_modules/call-bind-apply-helpers/functionCall.js var require_functionCall = __commonJS((exports, module) => { module.exports = Function.prototype.call; }); // node_modules/call-bind-apply-helpers/functionApply.js var require_functionApply = __commonJS((exports, module) => { module.exports = Function.prototype.apply; }); // node_modules/call-bind-apply-helpers/reflectApply.js var require_reflectApply = __commonJS((exports, module) => { module.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply; }); // node_modules/call-bind-apply-helpers/actualApply.js var require_actualApply = __commonJS((exports, module) => { var bind = require_function_bind(); var $apply = require_functionApply(); var $call = require_functionCall(); var $reflectApply = require_reflectApply(); module.exports = $reflectApply || bind.call($call, $apply); }); // node_modules/call-bind-apply-helpers/index.js var require_call_bind_apply_helpers = __commonJS((exports, module) => { var bind = require_function_bind(); var $TypeError = require_type(); var $call = require_functionCall(); var $actualApply = require_actualApply(); module.exports = function callBindBasic(args) { if (args.length < 1 || typeof args[0] !== "function") { throw new $TypeError("a function is required"); } return $actualApply(bind, $call, args); }; }); // node_modules/dunder-proto/get.js var require_get = __commonJS((exports, module) => { var callBind = require_call_bind_apply_helpers(); var gOPD = require_gopd(); var hasProtoAccessor; try { hasProtoAccessor = [].__proto__ === Array.prototype; } catch (e) { if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") { throw e; } } var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, "__proto__"); var $Object = Object; var $getPrototypeOf = $Object.getPrototypeOf; module.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? function getDunder(value) { return $getPrototypeOf(value == null ? value : $Object(value)); } : false; }); // node_modules/get-proto/index.js var require_get_proto = __commonJS((exports, module) => { var reflectGetProto = require_Reflect_getPrototypeOf(); var originalGetProto = require_Object_getPrototypeOf(); var getDunderProto = require_get(); module.exports = reflectGetProto ? function getProto(O) { return reflectGetProto(O); } : originalGetProto ? function getProto(O) { if (!O || typeof O !== "object" && typeof O !== "function") { throw new TypeError("getProto: not an object"); } return originalGetProto(O); } : getDunderProto ? function getProto(O) { return getDunderProto(O); } : null; }); // node_modules/hasown/index.js var require_hasown = __commonJS((exports, module) => { var call = Function.prototype.call; var $hasOwn = Object.prototype.hasOwnProperty; var bind = require_function_bind(); module.exports = bind.call(call, $hasOwn); }); // node_modules/get-intrinsic/index.js var require_get_intrinsic = __commonJS((exports, module) => { var undefined3; var $Object = require_es_object_atoms(); var $Error = require_es_errors(); var $EvalError = require_eval(); var $RangeError = require_range(); var $ReferenceError = require_ref2(); var $SyntaxError = require_syntax(); var $TypeError = require_type(); var $URIError = require_uri2(); var abs = require_abs(); var floor = require_floor(); var max = require_max(); var min = require_min(); var pow = require_pow(); var round = require_round(); var sign = require_sign(); var $Function = Function; var getEvalledConstructor = function(expressionSyntax) { try { return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")(); } catch (e) {} }; var $gOPD = require_gopd(); var $defineProperty = require_es_define_property(); var throwTypeError = function() { throw new $TypeError; }; var ThrowTypeError = $gOPD ? function() { try { arguments.callee; return throwTypeError; } catch (calleeThrows) { try { return $gOPD(arguments, "callee").get; } catch (gOPDthrows) { return throwTypeError; } } }() : throwTypeError; var hasSymbols = require_has_symbols()(); var getProto = require_get_proto(); var $ObjectGPO = require_Object_getPrototypeOf(); var $ReflectGPO = require_Reflect_getPrototypeOf(); var $apply = require_functionApply(); var $call = require_functionCall(); var needsEval = {}; var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined3 : getProto(Uint8Array); var INTRINSICS = { __proto__: null, "%AggregateError%": typeof AggregateError === "undefined" ? undefined3 : AggregateError, "%Array%": Array, "%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined3 : ArrayBuffer, "%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined3, "%AsyncFromSyncIteratorPrototype%": undefined3, "%AsyncFunction%": needsEval, "%AsyncGenerator%": needsEval, "%AsyncGeneratorFunction%": needsEval, "%AsyncIteratorPrototype%": needsEval, "%Atomics%": typeof Atomics === "undefined" ? undefined3 : Atomics, "%BigInt%": typeof BigInt === "undefined" ? undefined3 : BigInt, "%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined3 : BigInt64Array, "%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined3 : BigUint64Array, "%Boolean%": Boolean, "%DataView%": typeof DataView === "undefined" ? undefined3 : DataView, "%Date%": Date, "%decodeURI%": decodeURI, "%decodeURIComponent%": decodeURIComponent, "%encodeURI%": encodeURI, "%encodeURIComponent%": encodeURIComponent, "%Error%": $Error, "%eval%": eval, "%EvalError%": $EvalError, "%Float16Array%": typeof Float16Array === "undefined" ? undefined3 : Float16Array, "%Float32Array%": typeof Float32Array === "undefined" ? undefined3 : Float32Array, "%Float64Array%": typeof Float64Array === "undefined" ? undefined3 : Float64Array, "%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined3 : FinalizationRegistry, "%Function%": $Function, "%GeneratorFunction%": needsEval, "%Int8Array%": typeof Int8Array === "undefined" ? undefined3 : Int8Array, "%Int16Array%": typeof Int16Array === "undefined" ? undefined3 : Int16Array, "%Int32Array%": typeof Int32Array === "undefined" ? undefined3 : Int32Array, "%isFinite%": isFinite, "%isNaN%": isNaN, "%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined3, "%JSON%": typeof JSON === "object" ? JSON : undefined3, "%Map%": typeof Map === "undefined" ? undefined3 : Map, "%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined3 : getProto(new Map()[Symbol.iterator]()), "%Math%": Math, "%Number%": Number, "%Object%": $Object, "%Object.getOwnPropertyDescriptor%": $gOPD, "%parseFloat%": parseFloat, "%parseInt%": parseInt, "%Promise%": typeof Promise === "undefined" ? undefined3 : Promise, "%Proxy%": typeof Proxy === "undefined" ? undefined3 : Proxy, "%RangeError%": $RangeError, "%ReferenceError%": $ReferenceError, "%Reflect%": typeof Reflect === "undefined" ? undefined3 : Reflect, "%RegExp%": RegExp, "%Set%": typeof Set === "undefined" ? undefined3 : Set, "%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined3 : getProto(new Set()[Symbol.iterator]()), "%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined3 : SharedArrayBuffer, "%String%": String, "%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined3, "%Symbol%": hasSymbols ? Symbol : undefined3, "%SyntaxError%": $SyntaxError, "%ThrowTypeError%": ThrowTypeError, "%TypedArray%": TypedArray, "%TypeError%": $TypeError, "%Uint8Array%": typeof Uint8Array === "undefined" ? undefined3 : Uint8Array, "%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined3 : Uint8ClampedArray, "%Uint16Array%": typeof Uint16Array === "undefined" ? undefined3 : Uint16Array, "%Uint32Array%": typeof Uint32Array === "undefined" ? undefined3 : Uint32Array, "%URIError%": $URIError, "%WeakMap%": typeof WeakMap === "undefined" ? undefined3 : WeakMap, "%WeakRef%": typeof WeakRef === "undefined" ? undefined3 : WeakRef, "%WeakSet%": typeof WeakSet === "undefined" ? undefined3 : WeakSet, "%Function.prototype.call%": $call, "%Function.prototype.apply%": $apply, "%Object.defineProperty%": $defineProperty, "%Object.getPrototypeOf%": $ObjectGPO, "%Math.abs%": abs, "%Math.floor%": floor, "%Math.max%": max, "%Math.min%": min, "%Math.pow%": pow, "%Math.round%": round, "%Math.sign%": sign, "%Reflect.getPrototypeOf%": $ReflectGPO }; if (getProto) { try { null.error; } catch (e) { errorProto = getProto(getProto(e)); INTRINSICS["%Error.prototype%"] = errorProto; } } var errorProto; var doEval = function doEval2(name) { var value; if (name === "%AsyncFunction%") { value = getEvalledConstructor("async function () {}"); } else if (name === "%GeneratorFunction%") { value = getEvalledConstructor("function* () {}"); } else if (name === "%AsyncGeneratorFunction%") { value = getEvalledConstructor("async function* () {}"); } else if (name === "%AsyncGenerator%") { var fn = doEval2("%AsyncGeneratorFunction%"); if (fn) { value = fn.prototype; } } else if (name === "%AsyncIteratorPrototype%") { var gen = doEval2("%AsyncGenerator%"); if (gen && getProto) { value = getProto(gen.prototype); } } INTRINSICS[name] = value; return value; }; var LEGACY_ALIASES = { __proto__: null, "%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"], "%ArrayPrototype%": ["Array", "prototype"], "%ArrayProto_entries%": ["Array", "prototype", "entries"], "%ArrayProto_forEach%": ["Array", "prototype", "forEach"], "%ArrayProto_keys%": ["Array", "prototype", "keys"], "%ArrayProto_values%": ["Array", "prototype", "values"], "%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"], "%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"], "%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"], "%BooleanPrototype%": ["Boolean", "prototype"], "%DataViewPrototype%": ["DataView", "prototype"], "%DatePrototype%": ["Date", "prototype"], "%ErrorPrototype%": ["Error", "prototype"], "%EvalErrorPrototype%": ["EvalError", "prototype"], "%Float32ArrayPrototype%": ["Float32Array", "prototype"], "%Float64ArrayPrototype%": ["Float64Array", "prototype"], "%FunctionPrototype%": ["Function", "prototype"], "%Generator%": ["GeneratorFunction", "prototype"], "%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"], "%Int8ArrayPrototype%": ["Int8Array", "prototype"], "%Int16ArrayPrototype%": ["Int16Array", "prototype"], "%Int32ArrayPrototype%": ["Int32Array", "prototype"], "%JSONParse%": ["JSON", "parse"], "%JSONStringify%": ["JSON", "stringify"], "%MapPrototype%": ["Map", "prototype"], "%NumberPrototype%": ["Number", "prototype"], "%ObjectPrototype%": ["Object", "prototype"], "%ObjProto_toString%": ["Object", "prototype", "toString"], "%ObjProto_valueOf%": ["Object", "prototype", "valueOf"], "%PromisePrototype%": ["Promise", "prototype"], "%PromiseProto_then%": ["Promise", "prototype", "then"], "%Promise_all%": ["Promise", "all"], "%Promise_reject%": ["Promise", "reject"], "%Promise_resolve%": ["Promise", "resolve"], "%RangeErrorPrototype%": ["RangeError", "prototype"], "%ReferenceErrorPrototype%": ["ReferenceError", "prototype"], "%RegExpPrototype%": ["RegExp", "prototype"], "%SetPrototype%": ["Set", "prototype"], "%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"], "%StringPrototype%": ["String", "prototype"], "%SymbolPrototype%": ["Symbol", "prototype"], "%SyntaxErrorPrototype%": ["SyntaxError", "prototype"], "%TypedArrayPrototype%": ["TypedArray", "prototype"], "%TypeErrorPrototype%": ["TypeError", "prototype"], "%Uint8ArrayPrototype%": ["Uint8Array", "prototype"], "%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"], "%Uint16ArrayPrototype%": ["Uint16Array", "prototype"], "%Uint32ArrayPrototype%": ["Uint32Array", "prototype"], "%URIErrorPrototype%": ["URIError", "prototype"], "%WeakMapPrototype%": ["WeakMap", "prototype"], "%WeakSetPrototype%": ["WeakSet", "prototype"] }; var bind = require_function_bind(); var hasOwn = require_hasown(); var $concat = bind.call($call, Array.prototype.concat); var $spliceApply = bind.call($apply, Array.prototype.splice); var $replace = bind.call($call, String.prototype.replace); var $strSlice = bind.call($call, String.prototype.slice); var $exec = bind.call($call, RegExp.prototype.exec); var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; var reEscapeChar = /\\(\\)?/g; var stringToPath = function stringToPath2(string4) { var first = $strSlice(string4, 0, 1); var last = $strSlice(string4, -1); if (first === "%" && last !== "%") { throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`"); } else if (last === "%" && first !== "%") { throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`"); } var result = []; $replace(string4, rePropName, function(match, number4, quote, subString) { result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number4 || match; }); return result; }; var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) { var intrinsicName = name; var alias; if (hasOwn(LEGACY_ALIASES, intrinsicName)) { alias = LEGACY_ALIASES[intrinsicName]; intrinsicName = "%" + alias[0] + "%"; } if (hasOwn(INTRINSICS, intrinsicName)) { var value = INTRINSICS[intrinsicName]; if (value === needsEval) { value = doEval(intrinsicName); } if (typeof value === "undefined" && !allowMissing) { throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!"); } return { alias, name: intrinsicName, value }; } throw new $SyntaxError("intrinsic " + name + " does not exist!"); }; module.exports = function GetIntrinsic(name, allowMissing) { if (typeof name !== "string" || name.length === 0) { throw new $TypeError("intrinsic name must be a non-empty string"); } if (arguments.length > 1 && typeof allowMissing !== "boolean") { throw new $TypeError('"allowMissing" argument must be a boolean'); } if ($exec(/^%?[^%]*%?$/, name) === null) { throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name"); } var parts = stringToPath(name); var intrinsicBaseName = parts.length > 0 ? parts[0] : ""; var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing); var intrinsicRealName = intrinsic.name; var value = intrinsic.value; var skipFurtherCaching = false; var alias = intrinsic.alias; if (alias) { intrinsicBaseName = alias[0]; $spliceApply(parts, $concat([0, 1], alias)); } for (var i = 1, isOwn = true;i < parts.length; i += 1) { var part = parts[i]; var first = $strSlice(part, 0, 1); var last = $strSlice(part, -1); if ((first === '"' || first === "'" || first === "`" || (last === '"' || last === "'" || last === "`")) && first !== last) { throw new $SyntaxError("property names with quotes must have matching quotes"); } if (part === "constructor" || !isOwn) { skipFurtherCaching = true; } intrinsicBaseName += "." + part; intrinsicRealName = "%" + intrinsicBaseName + "%"; if (hasOwn(INTRINSICS, intrinsicRealName)) { value = INTRINSICS[intrinsicRealName]; } else if (value != null) { if (!(part in value)) { if (!allowMissing) { throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available."); } return; } if ($gOPD && i + 1 >= parts.length) { var desc = $gOPD(value, part); isOwn = !!desc; if (isOwn && "get" in desc && !("originalValue" in desc.get)) { value = desc.get; } else { value = value[part]; } } else { isOwn = hasOwn(value, part); value = value[part]; } if (isOwn && !skipFurtherCaching) { INTRINSICS[intrinsicRealName] = value; } } } return value; }; }); // node_modules/call-bound/index.js var require_call_bound = __commonJS((exports, module) => { var GetIntrinsic = require_get_intrinsic(); var callBindBasic = require_call_bind_apply_helpers(); var $indexOf = callBindBasic([GetIntrinsic("%String.prototype.indexOf%")]); module.exports = function callBoundIntrinsic(name, allowMissing) { var intrinsic = GetIntrinsic(name, !!allowMissing); if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) { return callBindBasic([intrinsic]); } return intrinsic; }; }); // node_modules/side-channel-map/index.js var require_side_channel_map = __commonJS((exports, module) => { var GetIntrinsic = require_get_intrinsic(); var callBound = require_call_bound(); var inspect = require_object_inspect(); var $TypeError = require_type(); var $Map = GetIntrinsic("%Map%", true); var $mapGet = callBound("Map.prototype.get", true); var $mapSet = callBound("Map.prototype.set", true); var $mapHas = callBound("Map.prototype.has", true); var $mapDelete = callBound("Map.prototype.delete", true); var $mapSize = callBound("Map.prototype.size", true); module.exports = !!$Map && function getSideChannelMap() { var $m; var channel = { assert: function(key) { if (!channel.has(key)) { throw new $TypeError("Side channel does not contain " + inspect(key)); } }, delete: function(key) { if ($m) { var result = $mapDelete($m, key); if ($mapSize($m) === 0) { $m = undefined; } return result; } return false; }, get: function(key) { if ($m) { return $mapGet($m, key); } }, has: function(key) { if ($m) { return $mapHas($m, key); } return false; }, set: function(key, value) { if (!$m) { $m = new $Map; } $mapSet($m, key, value); } }; return channel; }; }); // node_modules/side-channel-weakmap/index.js var require_side_channel_weakmap = __commonJS((exports, module) => { var GetIntrinsic = require_get_intrinsic(); var callBound = require_call_bound(); var inspect = require_object_inspect(); var getSideChannelMap = require_side_channel_map(); var $TypeError = require_type(); var $WeakMap = GetIntrinsic("%WeakMap%", true); var $weakMapGet = callBound("WeakMap.prototype.get", true); var $weakMapSet = callBound("WeakMap.prototype.set", true); var $weakMapHas = callBound("WeakMap.prototype.has", true); var $weakMapDelete = callBound("WeakMap.prototype.delete", true); module.exports = $WeakMap ? function getSideChannelWeakMap() { var $wm; var $m; var channel = { assert: function(key) { if (!channel.has(key)) { throw new $TypeError("Side channel does not contain " + inspect(key)); } }, delete: function(key) { if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) { if ($wm) { return $weakMapDelete($wm, key); } } else if (getSideChannelMap) { if ($m) { return $m["delete"](key); } } return false; }, get: function(key) { if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) { if ($wm) { return $weakMapGet($wm, key); } } return $m && $m.get(key); }, has: function(key) { if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) { if ($wm) { return $weakMapHas($wm, key); } } return !!$m && $m.has(key); }, set: function(key, value) { if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) { if (!$wm) { $wm = new $WeakMap; } $weakMapSet($wm, key, value); } else if (getSideChannelMap) { if (!$m) { $m = getSideChannelMap(); } $m.set(key, value); } } }; return channel; } : getSideChannelMap; }); // node_modules/side-channel/index.js var require_side_channel = __commonJS((exports, module) => { var $TypeError = require_type(); var inspect = require_object_inspect(); var getSideChannelList = require_side_channel_list(); var getSideChannelMap = require_side_channel_map(); var getSideChannelWeakMap = require_side_channel_weakmap(); var makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList; module.exports = function getSideChannel() { var $channelData; var channel = { assert: function(key) { if (!channel.has(key)) { throw new $TypeError("Side channel does not contain " + inspect(key)); } }, delete: function(key) { return !!$channelData && $channelData["delete"](key); }, get: function(key) { return $channelData && $channelData.get(key); }, has: function(key) { return !!$channelData && $channelData.has(key); }, set: function(key, value) { if (!$channelData) { $channelData = makeChannel(); } $channelData.set(key, value); } }; return channel; }; }); // node_modules/qs/lib/formats.js var require_formats2 = __commonJS((exports, module) => { var replace = String.prototype.replace; var percentTwenties = /%20/g; var Format = { RFC1738: "RFC1738", RFC3986: "RFC3986" }; module.exports = { default: Format.RFC3986, formatters: { RFC1738: function(value) { return replace.call(value, percentTwenties, "+"); }, RFC3986: function(value) { return String(value); } }, RFC1738: Format.RFC1738, RFC3986: Format.RFC3986 }; }); // node_modules/qs/lib/utils.js var require_utils2 = __commonJS((exports, module) => { var formats = require_formats2(); var getSideChannel = require_side_channel(); var has = Object.prototype.hasOwnProperty; var isArray = Array.isArray; var overflowChannel = getSideChannel(); var markOverflow = function markOverflow2(obj, maxIndex) { overflowChannel.set(obj, maxIndex); return obj; }; var isOverflow = function isOverflow2(obj) { return overflowChannel.has(obj); }; var getMaxIndex = function getMaxIndex2(obj) { return overflowChannel.get(obj); }; var setMaxIndex = function setMaxIndex2(obj, maxIndex) { overflowChannel.set(obj, maxIndex); }; var hexTable = function() { var array3 = []; for (var i = 0;i < 256; ++i) { array3[array3.length] = "%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase(); } return array3; }(); var compactQueue = function compactQueue2(queue) { while (queue.length > 1) { var item = queue.pop(); var obj = item.obj[item.prop]; if (isArray(obj)) { var compacted = []; for (var j = 0;j < obj.length; ++j) { if (typeof obj[j] !== "undefined") { compacted[compacted.length] = obj[j]; } } item.obj[item.prop] = compacted; } } }; var arrayToObject = function arrayToObject2(source, options) { var obj = options && options.plainObjects ? { __proto__: null } : {}; for (var i = 0;i < source.length; ++i) { if (typeof source[i] !== "undefined") { obj[i] = source[i]; } } return obj; }; var merge2 = function merge3(target, source, options) { if (!source) { return target; } if (typeof source !== "object" && typeof source !== "function") { if (isArray(target)) { var nextIndex = target.length; if (options && typeof options.arrayLimit === "number" && nextIndex > options.arrayLimit) { return markOverflow(arrayToObject(target.concat(source), options), nextIndex); } target[nextIndex] = source; } else if (target && typeof target === "object") { if (isOverflow(target)) { var newIndex = getMaxIndex(target) + 1; target[newIndex] = source; setMaxIndex(target, newIndex); } else if (options && (options.plainObjects || options.allowPrototypes) || !has.call(Object.prototype, source)) { target[source] = true; } } else { return [target, source]; } return target; } if (!target || typeof target !== "object") { if (isOverflow(source)) { var sourceKeys = Object.keys(source); var result = options && options.plainObjects ? { __proto__: null, 0: target } : { 0: target }; for (var m = 0;m < sourceKeys.length; m++) { var oldKey = parseInt(sourceKeys[m], 10); result[oldKey + 1] = source[sourceKeys[m]]; } return markOverflow(result, getMaxIndex(source) + 1); } var combined = [target].concat(source); if (options && typeof options.arrayLimit === "number" && combined.length > options.arrayLimit) { return markOverflow(arrayToObject(combined, options), combined.length - 1); } return combined; } var mergeTarget = target; if (isArray(target) && !isArray(source)) { mergeTarget = arrayToObject(target, options); } if (isArray(target) && isArray(source)) { source.forEach(function(item, i) { if (has.call(target, i)) { var targetItem = target[i]; if (targetItem && typeof targetItem === "object" && item && typeof item === "object") { target[i] = merge3(targetItem, item, options); } else { target[target.length] = item; } } else { target[i] = item; } }); return target; } return Object.keys(source).reduce(function(acc, key) { var value = source[key]; if (has.call(acc, key)) { acc[key] = merge3(acc[key], value, options); } else { acc[key] = value; } if (isOverflow(source) && !isOverflow(acc)) { markOverflow(acc, getMaxIndex(source)); } if (isOverflow(acc)) { var keyNum = parseInt(key, 10); if (String(keyNum) === key && keyNum >= 0 && keyNum > getMaxIndex(acc)) { setMaxIndex(acc, keyNum); } } return acc; }, mergeTarget); }; var assign = function assignSingleSource(target, source) { return Object.keys(source).reduce(function(acc, key) { acc[key] = source[key]; return acc; }, target); }; var decode3 = function(str, defaultDecoder, charset) { var strWithoutPlus = str.replace(/\+/g, " "); if (charset === "iso-8859-1") { return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); } try { return decodeURIComponent(strWithoutPlus); } catch (e) { return strWithoutPlus; } }; var limit = 1024; var encode3 = function encode4(str, defaultEncoder, charset, kind, format) { if (str.length === 0) { return str; } var string4 = str; if (typeof str === "symbol") { string4 = Symbol.prototype.toString.call(str); } else if (typeof str !== "string") { string4 = String(str); } if (charset === "iso-8859-1") { return escape(string4).replace(/%u[0-9a-f]{4}/gi, function($0) { return "%26%23" + parseInt($0.slice(2), 16) + "%3B"; }); } var out = ""; for (var j = 0;j < string4.length; j += limit) { var segment = string4.length >= limit ? string4.slice(j, j + limit) : string4; var arr = []; for (var i = 0;i < segment.length; ++i) { var c = segment.charCodeAt(i); if (c === 45 || c === 46 || c === 95 || c === 126 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || format === formats.RFC1738 && (c === 40 || c === 41)) { arr[arr.length] = segment.charAt(i); continue; } if (c < 128) { arr[arr.length] = hexTable[c]; continue; } if (c < 2048) { arr[arr.length] = hexTable[192 | c >> 6] + hexTable[128 | c & 63]; continue; } if (c < 55296 || c >= 57344) { arr[arr.length] = hexTable[224 | c >> 12] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63]; continue; } i += 1; c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023); arr[arr.length] = hexTable[240 | c >> 18] + hexTable[128 | c >> 12 & 63] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63]; } out += arr.join(""); } return out; }; var compact = function compact2(value) { var queue = [{ obj: { o: value }, prop: "o" }]; var refs = []; for (var i = 0;i < queue.length; ++i) { var item = queue[i]; var obj = item.obj[item.prop]; var keys = Object.keys(obj); for (var j = 0;j < keys.length; ++j) { var key = keys[j]; var val = obj[key]; if (typeof val === "object" && val !== null && refs.indexOf(val) === -1) { queue[queue.length] = { obj, prop: key }; refs[refs.length] = val; } } } compactQueue(queue); return value; }; var isRegExp = function isRegExp2(obj) { return Object.prototype.toString.call(obj) === "[object RegExp]"; }; var isBuffer = function isBuffer2(obj) { if (!obj || typeof obj !== "object") { return false; } return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; var combine = function combine2(a, b, arrayLimit, plainObjects) { if (isOverflow(a)) { var newIndex = getMaxIndex(a) + 1; a[newIndex] = b; setMaxIndex(a, newIndex); return a; } var result = [].concat(a, b); if (result.length > arrayLimit) { return markOverflow(arrayToObject(result, { plainObjects }), result.length - 1); } return result; }; var maybeMap = function maybeMap2(val, fn) { if (isArray(val)) { var mapped = []; for (var i = 0;i < val.length; i += 1) { mapped[mapped.length] = fn(val[i]); } return mapped; } return fn(val); }; module.exports = { arrayToObject, assign, combine, compact, decode: decode3, encode: encode3, isBuffer, isOverflow, isRegExp, markOverflow, maybeMap, merge: merge2 }; }); // node_modules/qs/lib/stringify.js var require_stringify = __commonJS((exports, module) => { var getSideChannel = require_side_channel(); var utils = require_utils2(); var formats = require_formats2(); var has = Object.prototype.hasOwnProperty; var arrayPrefixGenerators = { brackets: function brackets(prefix) { return prefix + "[]"; }, comma: "comma", indices: function indices(prefix, key) { return prefix + "[" + key + "]"; }, repeat: function repeat(prefix) { return prefix; } }; var isArray = Array.isArray; var push = Array.prototype.push; var pushToArray = function(arr, valueOrArray) { push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); }; var toISO = Date.prototype.toISOString; var defaultFormat = formats["default"]; var defaults = { addQueryPrefix: false, allowDots: false, allowEmptyArrays: false, arrayFormat: "indices", charset: "utf-8", charsetSentinel: false, commaRoundTrip: false, delimiter: "&", encode: true, encodeDotInKeys: false, encoder: utils.encode, encodeValuesOnly: false, filter: undefined, format: defaultFormat, formatter: formats.formatters[defaultFormat], indices: false, serializeDate: function serializeDate(date4) { return toISO.call(date4); }, skipNulls: false, strictNullHandling: false }; var isNonNullishPrimitive = function isNonNullishPrimitive2(v) { return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint"; }; var sentinel = {}; var stringify = function stringify2(object4, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) { var obj = object4; var tmpSc = sideChannel; var step = 0; var findFlag = false; while ((tmpSc = tmpSc.get(sentinel)) !== undefined && !findFlag) { var pos = tmpSc.get(object4); step += 1; if (typeof pos !== "undefined") { if (pos === step) { throw new RangeError("Cyclic object value"); } else { findFlag = true; } } if (typeof tmpSc.get(sentinel) === "undefined") { step = 0; } } if (typeof filter === "function") { obj = filter(prefix, obj); } else if (obj instanceof Date) { obj = serializeDate(obj); } else if (generateArrayPrefix === "comma" && isArray(obj)) { obj = utils.maybeMap(obj, function(value2) { if (value2 instanceof Date) { return serializeDate(value2); } return value2; }); } if (obj === null) { if (strictNullHandling) { return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, "key", format) : prefix; } obj = ""; } if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { if (encoder) { var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, "key", format); return [formatter(keyValue) + "=" + formatter(encoder(obj, defaults.encoder, charset, "value", format))]; } return [formatter(prefix) + "=" + formatter(String(obj))]; } var values = []; if (typeof obj === "undefined") { return values; } var objKeys; if (generateArrayPrefix === "comma" && isArray(obj)) { if (encodeValuesOnly && encoder) { obj = utils.maybeMap(obj, encoder); } objKeys = [{ value: obj.length > 0 ? obj.join(",") || null : undefined }]; } else if (isArray(filter)) { objKeys = filter; } else { var keys = Object.keys(obj); objKeys = sort ? keys.sort(sort) : keys; } var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix); var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + "[]" : encodedPrefix; if (allowEmptyArrays && isArray(obj) && obj.length === 0) { return adjustedPrefix + "[]"; } for (var j = 0;j < objKeys.length; ++j) { var key = objKeys[j]; var value = typeof key === "object" && key && typeof key.value !== "undefined" ? key.value : obj[key]; if (skipNulls && value === null) { continue; } var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\./g, "%2E") : String(key); var keyPrefix = isArray(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix : adjustedPrefix + (allowDots ? "." + encodedKey : "[" + encodedKey + "]"); sideChannel.set(object4, step); var valueSideChannel = getSideChannel(); valueSideChannel.set(sentinel, sideChannel); pushToArray(values, stringify2(value, keyPrefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, generateArrayPrefix === "comma" && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel)); } return values; }; var normalizeStringifyOptions = function normalizeStringifyOptions2(opts) { if (!opts) { return defaults; } if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); } if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") { throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided"); } if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") { throw new TypeError("Encoder has to be a function."); } var charset = opts.charset || defaults.charset; if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); } var format = formats["default"]; if (typeof opts.format !== "undefined") { if (!has.call(formats.formatters, opts.format)) { throw new TypeError("Unknown format option provided."); } format = opts.format; } var formatter = formats.formatters[format]; var filter = defaults.filter; if (typeof opts.filter === "function" || isArray(opts.filter)) { filter = opts.filter; } var arrayFormat; if (opts.arrayFormat in arrayPrefixGenerators) { arrayFormat = opts.arrayFormat; } else if ("indices" in opts) { arrayFormat = opts.indices ? "indices" : "repeat"; } else { arrayFormat = defaults.arrayFormat; } if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") { throw new TypeError("`commaRoundTrip` must be a boolean, or absent"); } var allowDots = typeof opts.allowDots === "undefined" ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; return { addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults.addQueryPrefix, allowDots, allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, arrayFormat, charset, charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, commaRoundTrip: !!opts.commaRoundTrip, delimiter: typeof opts.delimiter === "undefined" ? defaults.delimiter : opts.delimiter, encode: typeof opts.encode === "boolean" ? opts.encode : defaults.encode, encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults.encodeDotInKeys, encoder: typeof opts.encoder === "function" ? opts.encoder : defaults.encoder, encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults.encodeValuesOnly, filter, format, formatter, serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults.serializeDate, skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults.skipNulls, sort: typeof opts.sort === "function" ? opts.sort : null, strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling }; }; module.exports = function(object4, opts) { var obj = object4; var options = normalizeStringifyOptions(opts); var objKeys; var filter; if (typeof options.filter === "function") { filter = options.filter; obj = filter("", obj); } else if (isArray(options.filter)) { filter = options.filter; objKeys = filter; } var keys = []; if (typeof obj !== "object" || obj === null) { return ""; } var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat]; var commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip; if (!objKeys) { objKeys = Object.keys(obj); } if (options.sort) { objKeys.sort(options.sort); } var sideChannel = getSideChannel(); for (var i = 0;i < objKeys.length; ++i) { var key = objKeys[i]; var value = obj[key]; if (options.skipNulls && value === null) { continue; } pushToArray(keys, stringify(value, key, generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel)); } var joined = keys.join(options.delimiter); var prefix = options.addQueryPrefix === true ? "?" : ""; if (options.charsetSentinel) { if (options.charset === "iso-8859-1") { prefix += "utf8=%26%2310003%3B&"; } else { prefix += "utf8=%E2%9C%93&"; } } return joined.length > 0 ? prefix + joined : ""; }; }); // node_modules/qs/lib/parse.js var require_parse2 = __commonJS((exports, module) => { var utils = require_utils2(); var has = Object.prototype.hasOwnProperty; var isArray = Array.isArray; var defaults = { allowDots: false, allowEmptyArrays: false, allowPrototypes: false, allowSparse: false, arrayLimit: 20, charset: "utf-8", charsetSentinel: false, comma: false, decodeDotInKeys: false, decoder: utils.decode, delimiter: "&", depth: 5, duplicates: "combine", ignoreQueryPrefix: false, interpretNumericEntities: false, parameterLimit: 1000, parseArrays: true, plainObjects: false, strictDepth: false, strictNullHandling: false, throwOnLimitExceeded: false }; var interpretNumericEntities = function(str) { return str.replace(/&#(\d+);/g, function($0, numberStr) { return String.fromCharCode(parseInt(numberStr, 10)); }); }; var parseArrayValue = function(val, options, currentArrayLength) { if (val && typeof val === "string" && options.comma && val.indexOf(",") > -1) { return val.split(","); } if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) { throw new RangeError("Array limit exceeded. Only " + options.arrayLimit + " element" + (options.arrayLimit === 1 ? "" : "s") + " allowed in an array."); } return val; }; var isoSentinel = "utf8=%26%2310003%3B"; var charsetSentinel = "utf8=%E2%9C%93"; var parseValues = function parseQueryStringValues(str, options) { var obj = { __proto__: null }; var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, "") : str; cleanStr = cleanStr.replace(/%5B/gi, "[").replace(/%5D/gi, "]"); var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; var parts = cleanStr.split(options.delimiter, options.throwOnLimitExceeded ? limit + 1 : limit); if (options.throwOnLimitExceeded && parts.length > limit) { throw new RangeError("Parameter limit exceeded. Only " + limit + " parameter" + (limit === 1 ? "" : "s") + " allowed."); } var skipIndex = -1; var i; var charset = options.charset; if (options.charsetSentinel) { for (i = 0;i < parts.length; ++i) { if (parts[i].indexOf("utf8=") === 0) { if (parts[i] === charsetSentinel) { charset = "utf-8"; } else if (parts[i] === isoSentinel) { charset = "iso-8859-1"; } skipIndex = i; i = parts.length; } } } for (i = 0;i < parts.length; ++i) { if (i === skipIndex) { continue; } var part = parts[i]; var bracketEqualsPos = part.indexOf("]="); var pos = bracketEqualsPos === -1 ? part.indexOf("=") : bracketEqualsPos + 1; var key; var val; if (pos === -1) { key = options.decoder(part, defaults.decoder, charset, "key"); val = options.strictNullHandling ? null : ""; } else { key = options.decoder(part.slice(0, pos), defaults.decoder, charset, "key"); if (key !== null) { val = utils.maybeMap(parseArrayValue(part.slice(pos + 1), options, isArray(obj[key]) ? obj[key].length : 0), function(encodedVal) { return options.decoder(encodedVal, defaults.decoder, charset, "value"); }); } } if (val && options.interpretNumericEntities && charset === "iso-8859-1") { val = interpretNumericEntities(String(val)); } if (part.indexOf("[]=") > -1) { val = isArray(val) ? [val] : val; } if (options.comma && isArray(val) && val.length > options.arrayLimit) { if (options.throwOnLimitExceeded) { throw new RangeError("Array limit exceeded. Only " + options.arrayLimit + " element" + (options.arrayLimit === 1 ? "" : "s") + " allowed in an array."); } val = utils.combine([], val, options.arrayLimit, options.plainObjects); } if (key !== null) { var existing = has.call(obj, key); if (existing && options.duplicates === "combine") { obj[key] = utils.combine(obj[key], val, options.arrayLimit, options.plainObjects); } else if (!existing || options.duplicates === "last") { obj[key] = val; } } } return obj; }; var parseObject = function(chain, val, options, valuesParsed) { var currentArrayLength = 0; if (chain.length > 0 && chain[chain.length - 1] === "[]") { var parentKey = chain.slice(0, -1).join(""); currentArrayLength = Array.isArray(val) && val[parentKey] ? val[parentKey].length : 0; } var leaf = valuesParsed ? val : parseArrayValue(val, options, currentArrayLength); for (var i = chain.length - 1;i >= 0; --i) { var obj; var root = chain[i]; if (root === "[]" && options.parseArrays) { if (utils.isOverflow(leaf)) { obj = leaf; } else { obj = options.allowEmptyArrays && (leaf === "" || options.strictNullHandling && leaf === null) ? [] : utils.combine([], leaf, options.arrayLimit, options.plainObjects); } } else { obj = options.plainObjects ? { __proto__: null } : {}; var cleanRoot = root.charAt(0) === "[" && root.charAt(root.length - 1) === "]" ? root.slice(1, -1) : root; var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, ".") : cleanRoot; var index = parseInt(decodedRoot, 10); var isValidArrayIndex = !isNaN(index) && root !== decodedRoot && String(index) === decodedRoot && index >= 0 && options.parseArrays; if (!options.parseArrays && decodedRoot === "") { obj = { 0: leaf }; } else if (isValidArrayIndex && index < options.arrayLimit) { obj = []; obj[index] = leaf; } else if (isValidArrayIndex && options.throwOnLimitExceeded) { throw new RangeError("Array limit exceeded. Only " + options.arrayLimit + " element" + (options.arrayLimit === 1 ? "" : "s") + " allowed in an array."); } else if (isValidArrayIndex) { obj[index] = leaf; utils.markOverflow(obj, index); } else if (decodedRoot !== "__proto__") { obj[decodedRoot] = leaf; } } leaf = obj; } return leaf; }; var splitKeyIntoSegments = function splitKeyIntoSegments2(givenKey, options) { var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, "[$1]") : givenKey; if (options.depth <= 0) { if (!options.plainObjects && has.call(Object.prototype, key)) { if (!options.allowPrototypes) { return; } } return [key]; } var brackets = /(\[[^[\]]*])/; var child = /(\[[^[\]]*])/g; var segment = brackets.exec(key); var parent = segment ? key.slice(0, segment.index) : key; var keys = []; if (parent) { if (!options.plainObjects && has.call(Object.prototype, parent)) { if (!options.allowPrototypes) { return; } } keys[keys.length] = parent; } var i = 0; while ((segment = child.exec(key)) !== null && i < options.depth) { i += 1; var segmentContent = segment[1].slice(1, -1); if (!options.plainObjects && has.call(Object.prototype, segmentContent)) { if (!options.allowPrototypes) { return; } } keys[keys.length] = segment[1]; } if (segment) { if (options.strictDepth === true) { throw new RangeError("Input depth exceeded depth option of " + options.depth + " and strictDepth is true"); } keys[keys.length] = "[" + key.slice(segment.index) + "]"; } return keys; }; var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { if (!givenKey) { return; } var keys = splitKeyIntoSegments(givenKey, options); if (!keys) { return; } return parseObject(keys, val, options, valuesParsed); }; var normalizeParseOptions = function normalizeParseOptions2(opts) { if (!opts) { return defaults; } if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") { throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided"); } if (typeof opts.decodeDotInKeys !== "undefined" && typeof opts.decodeDotInKeys !== "boolean") { throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided"); } if (opts.decoder !== null && typeof opts.decoder !== "undefined" && typeof opts.decoder !== "function") { throw new TypeError("Decoder has to be a function."); } if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") { throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined"); } if (typeof opts.throwOnLimitExceeded !== "undefined" && typeof opts.throwOnLimitExceeded !== "boolean") { throw new TypeError("`throwOnLimitExceeded` option must be a boolean"); } var charset = typeof opts.charset === "undefined" ? defaults.charset : opts.charset; var duplicates = typeof opts.duplicates === "undefined" ? defaults.duplicates : opts.duplicates; if (duplicates !== "combine" && duplicates !== "first" && duplicates !== "last") { throw new TypeError("The duplicates option must be either combine, first, or last"); } var allowDots = typeof opts.allowDots === "undefined" ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots; return { allowDots, allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays, allowPrototypes: typeof opts.allowPrototypes === "boolean" ? opts.allowPrototypes : defaults.allowPrototypes, allowSparse: typeof opts.allowSparse === "boolean" ? opts.allowSparse : defaults.allowSparse, arrayLimit: typeof opts.arrayLimit === "number" ? opts.arrayLimit : defaults.arrayLimit, charset, charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults.charsetSentinel, comma: typeof opts.comma === "boolean" ? opts.comma : defaults.comma, decodeDotInKeys: typeof opts.decodeDotInKeys === "boolean" ? opts.decodeDotInKeys : defaults.decodeDotInKeys, decoder: typeof opts.decoder === "function" ? opts.decoder : defaults.decoder, delimiter: typeof opts.delimiter === "string" || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, depth: typeof opts.depth === "number" || opts.depth === false ? +opts.depth : defaults.depth, duplicates, ignoreQueryPrefix: opts.ignoreQueryPrefix === true, interpretNumericEntities: typeof opts.interpretNumericEntities === "boolean" ? opts.interpretNumericEntities : defaults.interpretNumericEntities, parameterLimit: typeof opts.parameterLimit === "number" ? opts.parameterLimit : defaults.parameterLimit, parseArrays: opts.parseArrays !== false, plainObjects: typeof opts.plainObjects === "boolean" ? opts.plainObjects : defaults.plainObjects, strictDepth: typeof opts.strictDepth === "boolean" ? !!opts.strictDepth : defaults.strictDepth, strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults.strictNullHandling, throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === "boolean" ? opts.throwOnLimitExceeded : false }; }; module.exports = function(str, opts) { var options = normalizeParseOptions(opts); if (str === "" || str === null || typeof str === "undefined") { return options.plainObjects ? { __proto__: null } : {}; } var tempObj = typeof str === "string" ? parseValues(str, options) : str; var obj = options.plainObjects ? { __proto__: null } : {}; var keys = Object.keys(tempObj); for (var i = 0;i < keys.length; ++i) { var key = keys[i]; var newObj = parseKeys(key, tempObj[key], options, typeof str === "string"); obj = utils.merge(obj, newObj, options); } if (options.allowSparse === true) { return obj; } return utils.compact(obj); }; }); // node_modules/qs/lib/index.js var require_lib2 = __commonJS((exports, module) => { var stringify = require_stringify(); var parse5 = require_parse2(); var formats = require_formats2(); module.exports = { formats, parse: parse5, stringify }; }); // node_modules/body-parser/lib/types/urlencoded.js var require_urlencoded = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var bytes = require_bytes(); var contentType = require_content_type(); var createError = require_http_errors(); var debug = require_src()("body-parser:urlencoded"); var deprecate = require_depd()("body-parser"); var read = require_read(); var typeis = require_type_is(); module.exports = urlencoded; var parsers = Object.create(null); function urlencoded(options) { var opts = options || {}; if (opts.extended === undefined) { deprecate("undefined extended: provide extended option"); } var extended = opts.extended !== false; var inflate = opts.inflate !== false; var limit = typeof opts.limit !== "number" ? bytes.parse(opts.limit || "100kb") : opts.limit; var type = opts.type || "application/x-www-form-urlencoded"; var verify = opts.verify || false; if (verify !== false && typeof verify !== "function") { throw new TypeError("option verify must be function"); } var queryparse = extended ? extendedparser(opts) : simpleparser(opts); var shouldParse = typeof type !== "function" ? typeChecker(type) : type; function parse5(body) { return body.length ? queryparse(body) : {}; } return function urlencodedParser(req, res, next) { if (req._body) { debug("body already parsed"); next(); return; } req.body = req.body || {}; if (!typeis.hasBody(req)) { debug("skip empty body"); next(); return; } debug("content-type %j", req.headers["content-type"]); if (!shouldParse(req)) { debug("skip parsing"); next(); return; } var charset = getCharset(req) || "utf-8"; if (charset !== "utf-8") { debug("invalid charset"); next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { charset, type: "charset.unsupported" })); return; } read(req, res, next, parse5, debug, { debug, encoding: charset, inflate, limit, verify }); }; } function extendedparser(options) { var parameterLimit = options.parameterLimit !== undefined ? options.parameterLimit : 1000; var depth = options.depth !== undefined ? options.depth : 32; var parse5 = parser("qs"); if (isNaN(parameterLimit) || parameterLimit < 1) { throw new TypeError("option parameterLimit must be a positive number"); } if (isNaN(depth) || depth < 0) { throw new TypeError("option depth must be a zero or a positive number"); } if (isFinite(parameterLimit)) { parameterLimit = parameterLimit | 0; } return function queryparse(body) { var paramCount = parameterCount(body, parameterLimit); if (paramCount === undefined) { debug("too many parameters"); throw createError(413, "too many parameters", { type: "parameters.too.many" }); } var arrayLimit = Math.max(100, paramCount); debug("parse extended urlencoding"); try { return parse5(body, { allowPrototypes: true, arrayLimit, depth, strictDepth: true, parameterLimit }); } catch (err) { if (err instanceof RangeError) { throw createError(400, "The input exceeded the depth", { type: "querystring.parse.rangeError" }); } else { throw err; } } }; } function getCharset(req) { try { return (contentType.parse(req).parameters.charset || "").toLowerCase(); } catch (e) { return; } } function parameterCount(body, limit) { var count = 0; var index = 0; while ((index = body.indexOf("&", index)) !== -1) { count++; index++; if (count === limit) { return; } } return count; } function parser(name) { var mod = parsers[name]; if (mod !== undefined) { return mod.parse; } switch (name) { case "qs": mod = require_lib2(); break; case "querystring": mod = __require("querystring"); break; } parsers[name] = mod; return mod.parse; } function simpleparser(options) { var parameterLimit = options.parameterLimit !== undefined ? options.parameterLimit : 1000; var parse5 = parser("querystring"); if (isNaN(parameterLimit) || parameterLimit < 1) { throw new TypeError("option parameterLimit must be a positive number"); } if (isFinite(parameterLimit)) { parameterLimit = parameterLimit | 0; } return function queryparse(body) { var paramCount = parameterCount(body, parameterLimit); if (paramCount === undefined) { debug("too many parameters"); throw createError(413, "too many parameters", { type: "parameters.too.many" }); } debug("parse urlencoding"); return parse5(body, undefined, undefined, { maxKeys: parameterLimit }); }; } function typeChecker(type) { return function checkType(req) { return Boolean(typeis(req, type)); }; } }); // node_modules/body-parser/index.js var require_body_parser = __commonJS((exports, module) => { /*! * body-parser * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var deprecate = require_depd()("body-parser"); var parsers = Object.create(null); exports = module.exports = deprecate.function(bodyParser, "bodyParser: use individual json/urlencoded middlewares"); Object.defineProperty(exports, "json", { configurable: true, enumerable: true, get: createParserGetter("json") }); Object.defineProperty(exports, "raw", { configurable: true, enumerable: true, get: createParserGetter("raw") }); Object.defineProperty(exports, "text", { configurable: true, enumerable: true, get: createParserGetter("text") }); Object.defineProperty(exports, "urlencoded", { configurable: true, enumerable: true, get: createParserGetter("urlencoded") }); function bodyParser(options) { var opts = Object.create(options || null, { type: { configurable: true, enumerable: true, value: undefined, writable: true } }); var _urlencoded = exports.urlencoded(opts); var _json = exports.json(opts); return function bodyParser2(req, res, next) { _json(req, res, function(err) { if (err) return next(err); _urlencoded(req, res, next); }); }; } function createParserGetter(name) { return function get() { return loadParser(name); }; } function loadParser(parserName) { var parser = parsers[parserName]; if (parser !== undefined) { return parser; } switch (parserName) { case "json": parser = require_json(); break; case "raw": parser = require_raw(); break; case "text": parser = require_text(); break; case "urlencoded": parser = require_urlencoded(); break; } return parsers[parserName] = parser; } }); // node_modules/merge-descriptors/index.js var require_merge_descriptors = __commonJS((exports, module) => { /*! * merge-descriptors * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ module.exports = merge2; var hasOwnProperty = Object.prototype.hasOwnProperty; function merge2(dest, src, redefine) { if (!dest) { throw new TypeError("argument dest is required"); } if (!src) { throw new TypeError("argument src is required"); } if (redefine === undefined) { redefine = true; } Object.getOwnPropertyNames(src).forEach(function forEachOwnPropertyName(name) { if (!redefine && hasOwnProperty.call(dest, name)) { return; } var descriptor = Object.getOwnPropertyDescriptor(src, name); Object.defineProperty(dest, name, descriptor); }); return dest; } }); // node_modules/encodeurl/index.js var require_encodeurl = __commonJS((exports, module) => { /*! * encodeurl * Copyright(c) 2016 Douglas Christopher Wilson * MIT Licensed */ module.exports = encodeUrl; var ENCODE_CHARS_REGEXP = /(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g; var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g; var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1�$2"; function encodeUrl(url) { return String(url).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI); } }); // node_modules/escape-html/index.js var require_escape_html = __commonJS((exports, module) => { /*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed */ var matchHtmlRegExp = /["'&<>]/; module.exports = escapeHtml; function escapeHtml(string4) { var str = "" + string4; var match = matchHtmlRegExp.exec(str); if (!match) { return str; } var escape2; var html = ""; var index = 0; var lastIndex = 0; for (index = match.index;index < str.length; index++) { switch (str.charCodeAt(index)) { case 34: escape2 = """; break; case 38: escape2 = "&"; break; case 39: escape2 = "'"; break; case 60: escape2 = "<"; break; case 62: escape2 = ">"; break; default: continue; } if (lastIndex !== index) { html += str.substring(lastIndex, index); } lastIndex = index + 1; html += escape2; } return lastIndex !== index ? html + str.substring(lastIndex, index) : html; } }); // node_modules/parseurl/index.js var require_parseurl = __commonJS((exports, module) => { /*! * parseurl * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ var url = __require("url"); var parse5 = url.parse; var Url = url.Url; module.exports = parseurl; module.exports.original = originalurl; function parseurl(req) { var url2 = req.url; if (url2 === undefined) { return; } var parsed = req._parsedUrl; if (fresh(url2, parsed)) { return parsed; } parsed = fastparse(url2); parsed._raw = url2; return req._parsedUrl = parsed; } function originalurl(req) { var url2 = req.originalUrl; if (typeof url2 !== "string") { return parseurl(req); } var parsed = req._parsedOriginalUrl; if (fresh(url2, parsed)) { return parsed; } parsed = fastparse(url2); parsed._raw = url2; return req._parsedOriginalUrl = parsed; } function fastparse(str) { if (typeof str !== "string" || str.charCodeAt(0) !== 47) { return parse5(str); } var pathname = str; var query = null; var search = null; for (var i = 1;i < str.length; i++) { switch (str.charCodeAt(i)) { case 63: if (search === null) { pathname = str.substring(0, i); query = str.substring(i + 1); search = str.substring(i); } break; case 9: case 10: case 12: case 13: case 32: case 35: case 160: case 65279: return parse5(str); } } var url2 = Url !== undefined ? new Url : {}; url2.path = str; url2.href = str; url2.pathname = pathname; if (search !== null) { url2.query = query; url2.search = search; } return url2; } function fresh(url2, parsedUrl) { return typeof parsedUrl === "object" && parsedUrl !== null && (Url === undefined || parsedUrl instanceof Url) && parsedUrl._raw === url2; } }); // node_modules/finalhandler/index.js var require_finalhandler = __commonJS((exports, module) => { /*! * finalhandler * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ var debug = require_src()("finalhandler"); var encodeUrl = require_encodeurl(); var escapeHtml = require_escape_html(); var onFinished = require_on_finished(); var parseUrl = require_parseurl(); var statuses = require_statuses(); var unpipe = require_unpipe(); var DOUBLE_SPACE_REGEXP = /\x20{2}/g; var NEWLINE_REGEXP = /\n/g; var defer = typeof setImmediate === "function" ? setImmediate : function(fn) { process.nextTick(fn.bind.apply(fn, arguments)); }; var isFinished = onFinished.isFinished; function createHtmlDocument(message) { var body = escapeHtml(message).replace(NEWLINE_REGEXP, "
").replace(DOUBLE_SPACE_REGEXP, "  "); return ` ` + ` ` + ` ` + ` ` + `Error ` + ` ` + ` ` + "
" + body + `
` + ` ` + ` `; } module.exports = finalhandler; function finalhandler(req, res, options) { var opts = options || {}; var env = opts.env || "development"; var onerror = opts.onerror; return function(err) { var headers; var msg; var status; if (!err && headersSent(res)) { debug("cannot 404 after headers sent"); return; } if (err) { status = getErrorStatusCode(err); if (status === undefined) { status = getResponseStatusCode(res); } else { headers = getErrorHeaders(err); } msg = getErrorMessage(err, status, env); } else { status = 404; msg = "Cannot " + req.method + " " + encodeUrl(getResourceName(req)); } debug("default %s", status); if (err && onerror) { defer(onerror, err, req, res); } if (headersSent(res)) { debug("cannot %d after headers sent", status); if (req.socket) { req.socket.destroy(); } return; } send(req, res, status, headers, msg); }; } function getErrorHeaders(err) { if (!err.headers || typeof err.headers !== "object") { return; } var headers = Object.create(null); var keys = Object.keys(err.headers); for (var i = 0;i < keys.length; i++) { var key = keys[i]; headers[key] = err.headers[key]; } return headers; } function getErrorMessage(err, status, env) { var msg; if (env !== "production") { msg = err.stack; if (!msg && typeof err.toString === "function") { msg = err.toString(); } } return msg || statuses.message[status]; } function getErrorStatusCode(err) { if (typeof err.status === "number" && err.status >= 400 && err.status < 600) { return err.status; } if (typeof err.statusCode === "number" && err.statusCode >= 400 && err.statusCode < 600) { return err.statusCode; } return; } function getResourceName(req) { try { return parseUrl.original(req).pathname; } catch (e) { return "resource"; } } function getResponseStatusCode(res) { var status = res.statusCode; if (typeof status !== "number" || status < 400 || status > 599) { status = 500; } return status; } function headersSent(res) { return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent; } function send(req, res, status, headers, message) { function write() { var body = createHtmlDocument(message); res.statusCode = status; if (req.httpVersionMajor < 2) { res.statusMessage = statuses.message[status]; } res.removeHeader("Content-Encoding"); res.removeHeader("Content-Language"); res.removeHeader("Content-Range"); setHeaders(res, headers); res.setHeader("Content-Security-Policy", "default-src 'none'"); res.setHeader("X-Content-Type-Options", "nosniff"); res.setHeader("Content-Type", "text/html; charset=utf-8"); res.setHeader("Content-Length", Buffer.byteLength(body, "utf8")); if (req.method === "HEAD") { res.end(); return; } res.end(body, "utf8"); } if (isFinished(req)) { write(); return; } unpipe(req); onFinished(req, write); req.resume(); } function setHeaders(res, headers) { if (!headers) { return; } var keys = Object.keys(headers); for (var i = 0;i < keys.length; i++) { var key = keys[i]; res.setHeader(key, headers[key]); } } }); // node_modules/array-flatten/array-flatten.js var require_array_flatten = __commonJS((exports, module) => { module.exports = arrayFlatten; function flattenWithDepth(array3, result, depth) { for (var i = 0;i < array3.length; i++) { var value = array3[i]; if (depth > 0 && Array.isArray(value)) { flattenWithDepth(value, result, depth - 1); } else { result.push(value); } } return result; } function flattenForever(array3, result) { for (var i = 0;i < array3.length; i++) { var value = array3[i]; if (Array.isArray(value)) { flattenForever(value, result); } else { result.push(value); } } return result; } function arrayFlatten(array3, depth) { if (depth == null) { return flattenForever(array3, []); } return flattenWithDepth(array3, [], depth); } }); // node_modules/path-to-regexp/index.js var require_path_to_regexp = __commonJS((exports, module) => { module.exports = pathToRegexp; var MATCHING_GROUP_REGEXP = /\\.|\((?:\?<(.*?)>)?(?!\?)/g; function pathToRegexp(path8, keys, options) { options = options || {}; keys = keys || []; var strict = options.strict; var end = options.end !== false; var flags = options.sensitive ? "" : "i"; var lookahead = options.lookahead !== false; var extraOffset = 0; var keysOffset = keys.length; var i = 0; var name = 0; var pos = 0; var backtrack = ""; var m; if (path8 instanceof RegExp) { while (m = MATCHING_GROUP_REGEXP.exec(path8.source)) { if (m[0][0] === "\\") continue; keys.push({ name: m[1] || name++, optional: false, offset: m.index }); } return path8; } if (Array.isArray(path8)) { path8 = path8.map(function(value) { return pathToRegexp(value, keys, options).source; }); return new RegExp(path8.join("|"), flags); } if (typeof path8 !== "string") { throw new TypeError("path must be a string, array of strings, or regular expression"); } path8 = path8.replace(/\\.|(\/)?(\.)?:(\w+)(\(.*?\))?(\*)?(\?)?|[.*]|\/\(/g, function(match, slash, format, key, capture, star, optional3, offset) { if (match[0] === "\\") { backtrack += match; pos += 2; return match; } if (match === ".") { backtrack += "\\."; extraOffset += 1; pos += 1; return "\\."; } if (slash || format) { backtrack = ""; } else { backtrack += path8.slice(pos, offset); } pos = offset + match.length; if (match === "*") { extraOffset += 3; return "(.*)"; } if (match === "/(") { backtrack += "/"; extraOffset += 2; return "/(?:"; } slash = slash || ""; format = format ? "\\." : ""; optional3 = optional3 || ""; capture = capture ? capture.replace(/\\.|\*/, function(m2) { return m2 === "*" ? "(.*)" : m2; }) : backtrack ? "((?:(?!/|" + backtrack + ").)+?)" : "([^/" + format + "]+?)"; keys.push({ name: key, optional: !!optional3, offset: offset + extraOffset }); var result = "(?:" + format + slash + capture + (star ? "((?:[/" + format + "].+?)?)" : "") + ")" + optional3; extraOffset += result.length - match.length; return result; }); while (m = MATCHING_GROUP_REGEXP.exec(path8)) { if (m[0][0] === "\\") continue; if (keysOffset + i === keys.length || keys[keysOffset + i].offset > m.index) { keys.splice(keysOffset + i, 0, { name: name++, optional: false, offset: m.index }); } i++; } path8 += strict ? "" : path8[path8.length - 1] === "/" ? "?" : "/?"; if (end) { path8 += "$"; } else if (path8[path8.length - 1] !== "/") { path8 += lookahead ? "(?=/|$)" : "(?:/|$)"; } return new RegExp("^" + path8, flags); } }); // node_modules/express/lib/router/layer.js var require_layer = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var pathRegexp = require_path_to_regexp(); var debug = require_src()("express:router:layer"); var hasOwnProperty = Object.prototype.hasOwnProperty; module.exports = Layer; function Layer(path8, options, fn) { if (!(this instanceof Layer)) { return new Layer(path8, options, fn); } debug("new %o", path8); var opts = options || {}; this.handle = fn; this.name = fn.name || ""; this.params = undefined; this.path = undefined; this.regexp = pathRegexp(path8, this.keys = [], opts); this.regexp.fast_star = path8 === "*"; this.regexp.fast_slash = path8 === "/" && opts.end === false; } Layer.prototype.handle_error = function handle_error(error2, req, res, next) { var fn = this.handle; if (fn.length !== 4) { return next(error2); } try { fn(error2, req, res, next); } catch (err) { next(err); } }; Layer.prototype.handle_request = function handle(req, res, next) { var fn = this.handle; if (fn.length > 3) { return next(); } try { fn(req, res, next); } catch (err) { next(err); } }; Layer.prototype.match = function match(path8) { var match2; if (path8 != null) { if (this.regexp.fast_slash) { this.params = {}; this.path = ""; return true; } if (this.regexp.fast_star) { this.params = { "0": decode_param(path8) }; this.path = path8; return true; } match2 = this.regexp.exec(path8); } if (!match2) { this.params = undefined; this.path = undefined; return false; } this.params = {}; this.path = match2[0]; var keys = this.keys; var params = this.params; for (var i = 1;i < match2.length; i++) { var key = keys[i - 1]; var prop = key.name; var val = decode_param(match2[i]); if (val !== undefined || !hasOwnProperty.call(params, prop)) { params[prop] = val; } } return true; }; function decode_param(val) { if (typeof val !== "string" || val.length === 0) { return val; } try { return decodeURIComponent(val); } catch (err) { if (err instanceof URIError) { err.message = "Failed to decode param '" + val + "'"; err.status = err.statusCode = 400; } throw err; } } }); // node_modules/methods/index.js var require_methods = __commonJS((exports, module) => { /*! * methods * Copyright(c) 2013-2014 TJ Holowaychuk * Copyright(c) 2015-2016 Douglas Christopher Wilson * MIT Licensed */ var http = __require("http"); module.exports = getCurrentNodeMethods() || getBasicNodeMethods(); function getCurrentNodeMethods() { return http.METHODS && http.METHODS.map(function lowerCaseMethod(method) { return method.toLowerCase(); }); } function getBasicNodeMethods() { return [ "get", "post", "put", "head", "delete", "options", "trace", "copy", "lock", "mkcol", "move", "purge", "propfind", "proppatch", "unlock", "report", "mkactivity", "checkout", "merge", "m-search", "notify", "subscribe", "unsubscribe", "patch", "search", "connect" ]; } }); // node_modules/express/lib/router/route.js var require_route = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var debug = require_src()("express:router:route"); var flatten = require_array_flatten(); var Layer = require_layer(); var methods = require_methods(); var slice = Array.prototype.slice; var toString = Object.prototype.toString; module.exports = Route; function Route(path8) { this.path = path8; this.stack = []; debug("new %o", path8); this.methods = {}; } Route.prototype._handles_method = function _handles_method(method) { if (this.methods._all) { return true; } var name = typeof method === "string" ? method.toLowerCase() : method; if (name === "head" && !this.methods["head"]) { name = "get"; } return Boolean(this.methods[name]); }; Route.prototype._options = function _options() { var methods2 = Object.keys(this.methods); if (this.methods.get && !this.methods.head) { methods2.push("head"); } for (var i = 0;i < methods2.length; i++) { methods2[i] = methods2[i].toUpperCase(); } return methods2; }; Route.prototype.dispatch = function dispatch(req, res, done) { var idx = 0; var stack = this.stack; var sync = 0; if (stack.length === 0) { return done(); } var method = typeof req.method === "string" ? req.method.toLowerCase() : req.method; if (method === "head" && !this.methods["head"]) { method = "get"; } req.route = this; next(); function next(err) { if (err && err === "route") { return done(); } if (err && err === "router") { return done(err); } if (++sync > 100) { return setImmediate(next, err); } var layer = stack[idx++]; if (!layer) { return done(err); } if (layer.method && layer.method !== method) { next(err); } else if (err) { layer.handle_error(err, req, res, next); } else { layer.handle_request(req, res, next); } sync = 0; } }; Route.prototype.all = function all() { var handles = flatten(slice.call(arguments)); for (var i = 0;i < handles.length; i++) { var handle = handles[i]; if (typeof handle !== "function") { var type = toString.call(handle); var msg = "Route.all() requires a callback function but got a " + type; throw new TypeError(msg); } var layer = Layer("/", {}, handle); layer.method = undefined; this.methods._all = true; this.stack.push(layer); } return this; }; methods.forEach(function(method) { Route.prototype[method] = function() { var handles = flatten(slice.call(arguments)); for (var i = 0;i < handles.length; i++) { var handle = handles[i]; if (typeof handle !== "function") { var type = toString.call(handle); var msg = "Route." + method + "() requires a callback function but got a " + type; throw new Error(msg); } debug("%s %o", method, this.path); var layer = Layer("/", {}, handle); layer.method = method; this.methods[method] = true; this.stack.push(layer); } return this; }; }); }); // node_modules/utils-merge/index.js var require_utils_merge = __commonJS((exports, module) => { exports = module.exports = function(a, b) { if (a && b) { for (var key in b) { a[key] = b[key]; } } return a; }; }); // node_modules/express/lib/router/index.js var require_router = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var Route = require_route(); var Layer = require_layer(); var methods = require_methods(); var mixin = require_utils_merge(); var debug = require_src()("express:router"); var deprecate = require_depd()("express"); var flatten = require_array_flatten(); var parseUrl = require_parseurl(); var setPrototypeOf = require_setprototypeof(); var objectRegExp = /^\[object (\S+)\]$/; var slice = Array.prototype.slice; var toString = Object.prototype.toString; var proto = module.exports = function(options) { var opts = options || {}; function router(req, res, next) { router.handle(req, res, next); } setPrototypeOf(router, proto); router.params = {}; router._params = []; router.caseSensitive = opts.caseSensitive; router.mergeParams = opts.mergeParams; router.strict = opts.strict; router.stack = []; return router; }; proto.param = function param(name, fn) { if (typeof name === "function") { deprecate("router.param(fn): Refactor to use path params"); this._params.push(name); return; } var params = this._params; var len = params.length; var ret; if (name[0] === ":") { deprecate("router.param(" + JSON.stringify(name) + ", fn): Use router.param(" + JSON.stringify(name.slice(1)) + ", fn) instead"); name = name.slice(1); } for (var i = 0;i < len; ++i) { if (ret = params[i](name, fn)) { fn = ret; } } if (typeof fn !== "function") { throw new Error("invalid param() call for " + name + ", got " + fn); } (this.params[name] = this.params[name] || []).push(fn); return this; }; proto.handle = function handle(req, res, out) { var self2 = this; debug("dispatching %s %s", req.method, req.url); var idx = 0; var protohost = getProtohost(req.url) || ""; var removed = ""; var slashAdded = false; var sync = 0; var paramcalled = {}; var options = []; var stack = self2.stack; var parentParams = req.params; var parentUrl = req.baseUrl || ""; var done = restore(out, req, "baseUrl", "next", "params"); req.next = next; if (req.method === "OPTIONS") { done = wrap(done, function(old, err) { if (err || options.length === 0) return old(err); sendOptionsResponse(res, options, old); }); } req.baseUrl = parentUrl; req.originalUrl = req.originalUrl || req.url; next(); function next(err) { var layerError = err === "route" ? null : err; if (slashAdded) { req.url = req.url.slice(1); slashAdded = false; } if (removed.length !== 0) { req.baseUrl = parentUrl; req.url = protohost + removed + req.url.slice(protohost.length); removed = ""; } if (layerError === "router") { setImmediate(done, null); return; } if (idx >= stack.length) { setImmediate(done, layerError); return; } if (++sync > 100) { return setImmediate(next, err); } var path8 = getPathname(req); if (path8 == null) { return done(layerError); } var layer; var match; var route; while (match !== true && idx < stack.length) { layer = stack[idx++]; match = matchLayer(layer, path8); route = layer.route; if (typeof match !== "boolean") { layerError = layerError || match; } if (match !== true) { continue; } if (!route) { continue; } if (layerError) { match = false; continue; } var method = req.method; var has_method = route._handles_method(method); if (!has_method && method === "OPTIONS") { appendMethods(options, route._options()); } if (!has_method && method !== "HEAD") { match = false; } } if (match !== true) { return done(layerError); } if (route) { req.route = route; } req.params = self2.mergeParams ? mergeParams(layer.params, parentParams) : layer.params; var layerPath = layer.path; self2.process_params(layer, paramcalled, req, res, function(err2) { if (err2) { next(layerError || err2); } else if (route) { layer.handle_request(req, res, next); } else { trim_prefix(layer, layerError, layerPath, path8); } sync = 0; }); } function trim_prefix(layer, layerError, layerPath, path8) { if (layerPath.length !== 0) { if (layerPath !== path8.slice(0, layerPath.length)) { next(layerError); return; } var c = path8[layerPath.length]; if (c && c !== "/" && c !== ".") return next(layerError); debug("trim prefix (%s) from url %s", layerPath, req.url); removed = layerPath; req.url = protohost + req.url.slice(protohost.length + removed.length); if (!protohost && req.url[0] !== "/") { req.url = "/" + req.url; slashAdded = true; } req.baseUrl = parentUrl + (removed[removed.length - 1] === "/" ? removed.substring(0, removed.length - 1) : removed); } debug("%s %s : %s", layer.name, layerPath, req.originalUrl); if (layerError) { layer.handle_error(layerError, req, res, next); } else { layer.handle_request(req, res, next); } } }; proto.process_params = function process_params(layer, called, req, res, done) { var params = this.params; var keys = layer.keys; if (!keys || keys.length === 0) { return done(); } var i = 0; var name; var paramIndex = 0; var key; var paramVal; var paramCallbacks; var paramCalled; function param(err) { if (err) { return done(err); } if (i >= keys.length) { return done(); } paramIndex = 0; key = keys[i++]; name = key.name; paramVal = req.params[name]; paramCallbacks = params[name]; paramCalled = called[name]; if (paramVal === undefined || !paramCallbacks) { return param(); } if (paramCalled && (paramCalled.match === paramVal || paramCalled.error && paramCalled.error !== "route")) { req.params[name] = paramCalled.value; return param(paramCalled.error); } called[name] = paramCalled = { error: null, match: paramVal, value: paramVal }; paramCallback(); } function paramCallback(err) { var fn = paramCallbacks[paramIndex++]; paramCalled.value = req.params[key.name]; if (err) { paramCalled.error = err; param(err); return; } if (!fn) return param(); try { fn(req, res, paramCallback, paramVal, key.name); } catch (e) { paramCallback(e); } } param(); }; proto.use = function use(fn) { var offset = 0; var path8 = "/"; if (typeof fn !== "function") { var arg = fn; while (Array.isArray(arg) && arg.length !== 0) { arg = arg[0]; } if (typeof arg !== "function") { offset = 1; path8 = fn; } } var callbacks = flatten(slice.call(arguments, offset)); if (callbacks.length === 0) { throw new TypeError("Router.use() requires a middleware function"); } for (var i = 0;i < callbacks.length; i++) { var fn = callbacks[i]; if (typeof fn !== "function") { throw new TypeError("Router.use() requires a middleware function but got a " + gettype(fn)); } debug("use %o %s", path8, fn.name || ""); var layer = new Layer(path8, { sensitive: this.caseSensitive, strict: false, end: false }, fn); layer.route = undefined; this.stack.push(layer); } return this; }; proto.route = function route(path8) { var route2 = new Route(path8); var layer = new Layer(path8, { sensitive: this.caseSensitive, strict: this.strict, end: true }, route2.dispatch.bind(route2)); layer.route = route2; this.stack.push(layer); return route2; }; methods.concat("all").forEach(function(method) { proto[method] = function(path8) { var route = this.route(path8); route[method].apply(route, slice.call(arguments, 1)); return this; }; }); function appendMethods(list, addition) { for (var i = 0;i < addition.length; i++) { var method = addition[i]; if (list.indexOf(method) === -1) { list.push(method); } } } function getPathname(req) { try { return parseUrl(req).pathname; } catch (err) { return; } } function getProtohost(url) { if (typeof url !== "string" || url.length === 0 || url[0] === "/") { return; } var searchIndex = url.indexOf("?"); var pathLength = searchIndex !== -1 ? searchIndex : url.length; var fqdnIndex = url.slice(0, pathLength).indexOf("://"); return fqdnIndex !== -1 ? url.substring(0, url.indexOf("/", 3 + fqdnIndex)) : undefined; } function gettype(obj) { var type = typeof obj; if (type !== "object") { return type; } return toString.call(obj).replace(objectRegExp, "$1"); } function matchLayer(layer, path8) { try { return layer.match(path8); } catch (err) { return err; } } function mergeParams(params, parent) { if (typeof parent !== "object" || !parent) { return params; } var obj = mixin({}, parent); if (!(0 in params) || !(0 in parent)) { return mixin(obj, params); } var i = 0; var o = 0; while (i in params) { i++; } while (o in parent) { o++; } for (i--;i >= 0; i--) { params[i + o] = params[i]; if (i < o) { delete params[i]; } } return mixin(obj, params); } function restore(fn, obj) { var props = new Array(arguments.length - 2); var vals = new Array(arguments.length - 2); for (var i = 0;i < props.length; i++) { props[i] = arguments[i + 2]; vals[i] = obj[props[i]]; } return function() { for (var i2 = 0;i2 < props.length; i2++) { obj[props[i2]] = vals[i2]; } return fn.apply(this, arguments); }; } function sendOptionsResponse(res, options, next) { try { var body = options.join(","); res.set("Allow", body); res.send(body); } catch (err) { next(err); } } function wrap(old, fn) { return function proxy() { var args = new Array(arguments.length + 1); args[0] = old; for (var i = 0, len = arguments.length;i < len; i++) { args[i + 1] = arguments[i]; } fn.apply(this, args); }; } }); // node_modules/express/lib/middleware/init.js var require_init = __commonJS((exports) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var setPrototypeOf = require_setprototypeof(); exports.init = function(app) { return function expressInit(req, res, next) { if (app.enabled("x-powered-by")) res.setHeader("X-Powered-By", "Express"); req.res = res; res.req = req; req.next = next; setPrototypeOf(req, app.request); setPrototypeOf(res, app.response); res.locals = res.locals || Object.create(null); next(); }; }; }); // node_modules/express/lib/middleware/query.js var require_query = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var merge2 = require_utils_merge(); var parseUrl = require_parseurl(); var qs = require_lib2(); module.exports = function query(options) { var opts = merge2({}, options); var queryparse = qs.parse; if (typeof options === "function") { queryparse = options; opts = undefined; } if (opts !== undefined && opts.allowPrototypes === undefined) { opts.allowPrototypes = true; } return function query2(req, res, next) { if (!req.query) { var val = parseUrl(req).query; req.query = queryparse(val, opts); } next(); }; }; }); // node_modules/express/lib/view.js var require_view = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var debug = require_src()("express:view"); var path8 = __require("path"); var fs2 = __require("fs"); var dirname4 = path8.dirname; var basename2 = path8.basename; var extname = path8.extname; var join6 = path8.join; var resolve = path8.resolve; module.exports = View; function View(name, options) { var opts = options || {}; this.defaultEngine = opts.defaultEngine; this.ext = extname(name); this.name = name; this.root = opts.root; if (!this.ext && !this.defaultEngine) { throw new Error("No default engine was specified and no extension was provided."); } var fileName = name; if (!this.ext) { this.ext = this.defaultEngine[0] !== "." ? "." + this.defaultEngine : this.defaultEngine; fileName += this.ext; } if (!opts.engines[this.ext]) { var mod = this.ext.slice(1); debug('require "%s"', mod); var fn = __require(mod).__express; if (typeof fn !== "function") { throw new Error('Module "' + mod + '" does not provide a view engine.'); } opts.engines[this.ext] = fn; } this.engine = opts.engines[this.ext]; this.path = this.lookup(fileName); } View.prototype.lookup = function lookup(name) { var path9; var roots = [].concat(this.root); debug('lookup "%s"', name); for (var i = 0;i < roots.length && !path9; i++) { var root = roots[i]; var loc = resolve(root, name); var dir = dirname4(loc); var file = basename2(loc); path9 = this.resolve(dir, file); } return path9; }; View.prototype.render = function render(options, callback) { debug('render "%s"', this.path); this.engine(this.path, options, callback); }; View.prototype.resolve = function resolve2(dir, file) { var ext = this.ext; var path9 = join6(dir, file); var stat = tryStat(path9); if (stat && stat.isFile()) { return path9; } path9 = join6(dir, basename2(file, ext), "index" + ext); stat = tryStat(path9); if (stat && stat.isFile()) { return path9; } }; function tryStat(path9) { debug('stat "%s"', path9); try { return fs2.statSync(path9); } catch (e) { return; } } }); // node_modules/safe-buffer/index.js var require_safe_buffer = __commonJS((exports, module) => { /*! safe-buffer. MIT License. Feross Aboukhadijeh */ var buffer = __require("buffer"); var Buffer2 = buffer.Buffer; function copyProps(src, dst) { for (var key in src) { dst[key] = src[key]; } } if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) { module.exports = buffer; } else { copyProps(buffer, exports); exports.Buffer = SafeBuffer; } function SafeBuffer(arg, encodingOrOffset, length) { return Buffer2(arg, encodingOrOffset, length); } SafeBuffer.prototype = Object.create(Buffer2.prototype); copyProps(Buffer2, SafeBuffer); SafeBuffer.from = function(arg, encodingOrOffset, length) { if (typeof arg === "number") { throw new TypeError("Argument must not be a number"); } return Buffer2(arg, encodingOrOffset, length); }; SafeBuffer.alloc = function(size, fill, encoding) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } var buf = Buffer2(size); if (fill !== undefined) { if (typeof encoding === "string") { buf.fill(fill, encoding); } else { buf.fill(fill); } } else { buf.fill(0); } return buf; }; SafeBuffer.allocUnsafe = function(size) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } return Buffer2(size); }; SafeBuffer.allocUnsafeSlow = function(size) { if (typeof size !== "number") { throw new TypeError("Argument must be a number"); } return buffer.SlowBuffer(size); }; }); // node_modules/content-disposition/index.js var require_content_disposition = __commonJS((exports, module) => { /*! * content-disposition * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ module.exports = contentDisposition; module.exports.parse = parse5; var basename2 = __require("path").basename; var Buffer2 = require_safe_buffer().Buffer; var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g; var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/; var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g; var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g; var QESC_REGEXP = /\\([\u0000-\u007f])/g; var QUOTE_REGEXP = /([\\"])/g; var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g; var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/; var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/; var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/; var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/; function contentDisposition(filename, options) { var opts = options || {}; var type = opts.type || "attachment"; var params = createparams(filename, opts.fallback); return format(new ContentDisposition(type, params)); } function createparams(filename, fallback) { if (filename === undefined) { return; } var params = {}; if (typeof filename !== "string") { throw new TypeError("filename must be a string"); } if (fallback === undefined) { fallback = true; } if (typeof fallback !== "string" && typeof fallback !== "boolean") { throw new TypeError("fallback must be a string or boolean"); } if (typeof fallback === "string" && NON_LATIN1_REGEXP.test(fallback)) { throw new TypeError("fallback must be ISO-8859-1 string"); } var name = basename2(filename); var isQuotedString = TEXT_REGEXP.test(name); var fallbackName = typeof fallback !== "string" ? fallback && getlatin1(name) : basename2(fallback); var hasFallback = typeof fallbackName === "string" && fallbackName !== name; if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { params["filename*"] = name; } if (isQuotedString || hasFallback) { params.filename = hasFallback ? fallbackName : name; } return params; } function format(obj) { var parameters = obj.parameters; var type = obj.type; if (!type || typeof type !== "string" || !TOKEN_REGEXP.test(type)) { throw new TypeError("invalid type"); } var string4 = String(type).toLowerCase(); if (parameters && typeof parameters === "object") { var param; var params = Object.keys(parameters).sort(); for (var i = 0;i < params.length; i++) { param = params[i]; var val = param.substr(-1) === "*" ? ustring(parameters[param]) : qstring(parameters[param]); string4 += "; " + param + "=" + val; } } return string4; } function decodefield(str) { var match = EXT_VALUE_REGEXP.exec(str); if (!match) { throw new TypeError("invalid extended field value"); } var charset = match[1].toLowerCase(); var encoded = match[2]; var value; var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode); switch (charset) { case "iso-8859-1": value = getlatin1(binary); break; case "utf-8": value = Buffer2.from(binary, "binary").toString("utf8"); break; default: throw new TypeError("unsupported charset in extended field"); } return value; } function getlatin1(val) { return String(val).replace(NON_LATIN1_REGEXP, "?"); } function parse5(string4) { if (!string4 || typeof string4 !== "string") { throw new TypeError("argument string is required"); } var match = DISPOSITION_TYPE_REGEXP.exec(string4); if (!match) { throw new TypeError("invalid type format"); } var index = match[0].length; var type = match[1].toLowerCase(); var key; var names = []; var params = {}; var value; index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ";" ? index - 1 : index; while (match = PARAM_REGEXP.exec(string4)) { if (match.index !== index) { throw new TypeError("invalid parameter format"); } index += match[0].length; key = match[1].toLowerCase(); value = match[2]; if (names.indexOf(key) !== -1) { throw new TypeError("invalid duplicate parameter"); } names.push(key); if (key.indexOf("*") + 1 === key.length) { key = key.slice(0, -1); value = decodefield(value); params[key] = value; continue; } if (typeof params[key] === "string") { continue; } if (value[0] === '"') { value = value.substr(1, value.length - 2).replace(QESC_REGEXP, "$1"); } params[key] = value; } if (index !== -1 && index !== string4.length) { throw new TypeError("invalid parameter format"); } return new ContentDisposition(type, params); } function pdecode(str, hex) { return String.fromCharCode(parseInt(hex, 16)); } function pencode(char) { return "%" + String(char).charCodeAt(0).toString(16).toUpperCase(); } function qstring(val) { var str = String(val); return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"'; } function ustring(val) { var str = String(val); var encoded = encodeURIComponent(str).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode); return "UTF-8''" + encoded; } function ContentDisposition(type, parameters) { this.type = type; this.parameters = parameters; } }); // node_modules/etag/index.js var require_etag = __commonJS((exports, module) => { /*! * etag * Copyright(c) 2014-2016 Douglas Christopher Wilson * MIT Licensed */ module.exports = etag; var crypto = __require("crypto"); var Stats = __require("fs").Stats; var toString = Object.prototype.toString; function entitytag(entity) { if (entity.length === 0) { return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"'; } var hash = crypto.createHash("sha1").update(entity, "utf8").digest("base64").substring(0, 27); var len = typeof entity === "string" ? Buffer.byteLength(entity, "utf8") : entity.length; return '"' + len.toString(16) + "-" + hash + '"'; } function etag(entity, options) { if (entity == null) { throw new TypeError("argument entity is required"); } var isStats = isstats(entity); var weak = options && typeof options.weak === "boolean" ? options.weak : isStats; if (!isStats && typeof entity !== "string" && !Buffer.isBuffer(entity)) { throw new TypeError("argument entity must be string, Buffer, or fs.Stats"); } var tag = isStats ? stattag(entity) : entitytag(entity); return weak ? "W/" + tag : tag; } function isstats(obj) { if (typeof Stats === "function" && obj instanceof Stats) { return true; } return obj && typeof obj === "object" && "ctime" in obj && toString.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number"; } function stattag(stat) { var mtime = stat.mtime.getTime().toString(16); var size = stat.size.toString(16); return '"' + size + "-" + mtime + '"'; } }); // node_modules/fresh/index.js var require_fresh = __commonJS((exports, module) => { /*! * fresh * Copyright(c) 2012 TJ Holowaychuk * Copyright(c) 2016-2017 Douglas Christopher Wilson * MIT Licensed */ var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/; module.exports = fresh; function fresh(reqHeaders, resHeaders) { var modifiedSince = reqHeaders["if-modified-since"]; var noneMatch = reqHeaders["if-none-match"]; if (!modifiedSince && !noneMatch) { return false; } var cacheControl = reqHeaders["cache-control"]; if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) { return false; } if (noneMatch && noneMatch !== "*") { var etag = resHeaders["etag"]; if (!etag) { return false; } var etagStale = true; var matches = parseTokenList(noneMatch); for (var i = 0;i < matches.length; i++) { var match = matches[i]; if (match === etag || match === "W/" + etag || "W/" + match === etag) { etagStale = false; break; } } if (etagStale) { return false; } } if (modifiedSince) { var lastModified = resHeaders["last-modified"]; var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince)); if (modifiedStale) { return false; } } return true; } function parseHttpDate(date4) { var timestamp = date4 && Date.parse(date4); return typeof timestamp === "number" ? timestamp : NaN; } function parseTokenList(str) { var end = 0; var list = []; var start = 0; for (var i = 0, len = str.length;i < len; i++) { switch (str.charCodeAt(i)) { case 32: if (start === end) { start = end = i + 1; } break; case 44: list.push(str.substring(start, end)); start = end = i + 1; break; default: end = i + 1; break; } } list.push(str.substring(start, end)); return list; } }); // node_modules/mime/types.json var require_types2 = __commonJS((exports, module) => { module.exports = { "application/andrew-inset": ["ez"], "application/applixware": ["aw"], "application/atom+xml": ["atom"], "application/atomcat+xml": ["atomcat"], "application/atomsvc+xml": ["atomsvc"], "application/bdoc": ["bdoc"], "application/ccxml+xml": ["ccxml"], "application/cdmi-capability": ["cdmia"], "application/cdmi-container": ["cdmic"], "application/cdmi-domain": ["cdmid"], "application/cdmi-object": ["cdmio"], "application/cdmi-queue": ["cdmiq"], "application/cu-seeme": ["cu"], "application/dash+xml": ["mpd"], "application/davmount+xml": ["davmount"], "application/docbook+xml": ["dbk"], "application/dssc+der": ["dssc"], "application/dssc+xml": ["xdssc"], "application/ecmascript": ["ecma"], "application/emma+xml": ["emma"], "application/epub+zip": ["epub"], "application/exi": ["exi"], "application/font-tdpfr": ["pfr"], "application/font-woff": [], "application/font-woff2": [], "application/geo+json": ["geojson"], "application/gml+xml": ["gml"], "application/gpx+xml": ["gpx"], "application/gxf": ["gxf"], "application/gzip": ["gz"], "application/hyperstudio": ["stk"], "application/inkml+xml": ["ink", "inkml"], "application/ipfix": ["ipfix"], "application/java-archive": ["jar", "war", "ear"], "application/java-serialized-object": ["ser"], "application/java-vm": ["class"], "application/javascript": ["js", "mjs"], "application/json": ["json", "map"], "application/json5": ["json5"], "application/jsonml+json": ["jsonml"], "application/ld+json": ["jsonld"], "application/lost+xml": ["lostxml"], "application/mac-binhex40": ["hqx"], "application/mac-compactpro": ["cpt"], "application/mads+xml": ["mads"], "application/manifest+json": ["webmanifest"], "application/marc": ["mrc"], "application/marcxml+xml": ["mrcx"], "application/mathematica": ["ma", "nb", "mb"], "application/mathml+xml": ["mathml"], "application/mbox": ["mbox"], "application/mediaservercontrol+xml": ["mscml"], "application/metalink+xml": ["metalink"], "application/metalink4+xml": ["meta4"], "application/mets+xml": ["mets"], "application/mods+xml": ["mods"], "application/mp21": ["m21", "mp21"], "application/mp4": ["mp4s", "m4p"], "application/msword": ["doc", "dot"], "application/mxf": ["mxf"], "application/octet-stream": ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"], "application/oda": ["oda"], "application/oebps-package+xml": ["opf"], "application/ogg": ["ogx"], "application/omdoc+xml": ["omdoc"], "application/onenote": ["onetoc", "onetoc2", "onetmp", "onepkg"], "application/oxps": ["oxps"], "application/patch-ops-error+xml": ["xer"], "application/pdf": ["pdf"], "application/pgp-encrypted": ["pgp"], "application/pgp-signature": ["asc", "sig"], "application/pics-rules": ["prf"], "application/pkcs10": ["p10"], "application/pkcs7-mime": ["p7m", "p7c"], "application/pkcs7-signature": ["p7s"], "application/pkcs8": ["p8"], "application/pkix-attr-cert": ["ac"], "application/pkix-cert": ["cer"], "application/pkix-crl": ["crl"], "application/pkix-pkipath": ["pkipath"], "application/pkixcmp": ["pki"], "application/pls+xml": ["pls"], "application/postscript": ["ai", "eps", "ps"], "application/prs.cww": ["cww"], "application/pskc+xml": ["pskcxml"], "application/raml+yaml": ["raml"], "application/rdf+xml": ["rdf"], "application/reginfo+xml": ["rif"], "application/relax-ng-compact-syntax": ["rnc"], "application/resource-lists+xml": ["rl"], "application/resource-lists-diff+xml": ["rld"], "application/rls-services+xml": ["rs"], "application/rpki-ghostbusters": ["gbr"], "application/rpki-manifest": ["mft"], "application/rpki-roa": ["roa"], "application/rsd+xml": ["rsd"], "application/rss+xml": ["rss"], "application/rtf": ["rtf"], "application/sbml+xml": ["sbml"], "application/scvp-cv-request": ["scq"], "application/scvp-cv-response": ["scs"], "application/scvp-vp-request": ["spq"], "application/scvp-vp-response": ["spp"], "application/sdp": ["sdp"], "application/set-payment-initiation": ["setpay"], "application/set-registration-initiation": ["setreg"], "application/shf+xml": ["shf"], "application/smil+xml": ["smi", "smil"], "application/sparql-query": ["rq"], "application/sparql-results+xml": ["srx"], "application/srgs": ["gram"], "application/srgs+xml": ["grxml"], "application/sru+xml": ["sru"], "application/ssdl+xml": ["ssdl"], "application/ssml+xml": ["ssml"], "application/tei+xml": ["tei", "teicorpus"], "application/thraud+xml": ["tfi"], "application/timestamped-data": ["tsd"], "application/vnd.3gpp.pic-bw-large": ["plb"], "application/vnd.3gpp.pic-bw-small": ["psb"], "application/vnd.3gpp.pic-bw-var": ["pvb"], "application/vnd.3gpp2.tcap": ["tcap"], "application/vnd.3m.post-it-notes": ["pwn"], "application/vnd.accpac.simply.aso": ["aso"], "application/vnd.accpac.simply.imp": ["imp"], "application/vnd.acucobol": ["acu"], "application/vnd.acucorp": ["atc", "acutc"], "application/vnd.adobe.air-application-installer-package+zip": ["air"], "application/vnd.adobe.formscentral.fcdt": ["fcdt"], "application/vnd.adobe.fxp": ["fxp", "fxpl"], "application/vnd.adobe.xdp+xml": ["xdp"], "application/vnd.adobe.xfdf": ["xfdf"], "application/vnd.ahead.space": ["ahead"], "application/vnd.airzip.filesecure.azf": ["azf"], "application/vnd.airzip.filesecure.azs": ["azs"], "application/vnd.amazon.ebook": ["azw"], "application/vnd.americandynamics.acc": ["acc"], "application/vnd.amiga.ami": ["ami"], "application/vnd.android.package-archive": ["apk"], "application/vnd.anser-web-certificate-issue-initiation": ["cii"], "application/vnd.anser-web-funds-transfer-initiation": ["fti"], "application/vnd.antix.game-component": ["atx"], "application/vnd.apple.installer+xml": ["mpkg"], "application/vnd.apple.mpegurl": ["m3u8"], "application/vnd.apple.pkpass": ["pkpass"], "application/vnd.aristanetworks.swi": ["swi"], "application/vnd.astraea-software.iota": ["iota"], "application/vnd.audiograph": ["aep"], "application/vnd.blueice.multipass": ["mpm"], "application/vnd.bmi": ["bmi"], "application/vnd.businessobjects": ["rep"], "application/vnd.chemdraw+xml": ["cdxml"], "application/vnd.chipnuts.karaoke-mmd": ["mmd"], "application/vnd.cinderella": ["cdy"], "application/vnd.claymore": ["cla"], "application/vnd.cloanto.rp9": ["rp9"], "application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"], "application/vnd.cluetrust.cartomobile-config": ["c11amc"], "application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"], "application/vnd.commonspace": ["csp"], "application/vnd.contact.cmsg": ["cdbcmsg"], "application/vnd.cosmocaller": ["cmc"], "application/vnd.crick.clicker": ["clkx"], "application/vnd.crick.clicker.keyboard": ["clkk"], "application/vnd.crick.clicker.palette": ["clkp"], "application/vnd.crick.clicker.template": ["clkt"], "application/vnd.crick.clicker.wordbank": ["clkw"], "application/vnd.criticaltools.wbs+xml": ["wbs"], "application/vnd.ctc-posml": ["pml"], "application/vnd.cups-ppd": ["ppd"], "application/vnd.curl.car": ["car"], "application/vnd.curl.pcurl": ["pcurl"], "application/vnd.dart": ["dart"], "application/vnd.data-vision.rdz": ["rdz"], "application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"], "application/vnd.dece.ttml+xml": ["uvt", "uvvt"], "application/vnd.dece.unspecified": ["uvx", "uvvx"], "application/vnd.dece.zip": ["uvz", "uvvz"], "application/vnd.denovo.fcselayout-link": ["fe_launch"], "application/vnd.dna": ["dna"], "application/vnd.dolby.mlp": ["mlp"], "application/vnd.dpgraph": ["dpg"], "application/vnd.dreamfactory": ["dfac"], "application/vnd.ds-keypoint": ["kpxx"], "application/vnd.dvb.ait": ["ait"], "application/vnd.dvb.service": ["svc"], "application/vnd.dynageo": ["geo"], "application/vnd.ecowin.chart": ["mag"], "application/vnd.enliven": ["nml"], "application/vnd.epson.esf": ["esf"], "application/vnd.epson.msf": ["msf"], "application/vnd.epson.quickanime": ["qam"], "application/vnd.epson.salt": ["slt"], "application/vnd.epson.ssf": ["ssf"], "application/vnd.eszigno3+xml": ["es3", "et3"], "application/vnd.ezpix-album": ["ez2"], "application/vnd.ezpix-package": ["ez3"], "application/vnd.fdf": ["fdf"], "application/vnd.fdsn.mseed": ["mseed"], "application/vnd.fdsn.seed": ["seed", "dataless"], "application/vnd.flographit": ["gph"], "application/vnd.fluxtime.clip": ["ftc"], "application/vnd.framemaker": ["fm", "frame", "maker", "book"], "application/vnd.frogans.fnc": ["fnc"], "application/vnd.frogans.ltf": ["ltf"], "application/vnd.fsc.weblaunch": ["fsc"], "application/vnd.fujitsu.oasys": ["oas"], "application/vnd.fujitsu.oasys2": ["oa2"], "application/vnd.fujitsu.oasys3": ["oa3"], "application/vnd.fujitsu.oasysgp": ["fg5"], "application/vnd.fujitsu.oasysprs": ["bh2"], "application/vnd.fujixerox.ddd": ["ddd"], "application/vnd.fujixerox.docuworks": ["xdw"], "application/vnd.fujixerox.docuworks.binder": ["xbd"], "application/vnd.fuzzysheet": ["fzs"], "application/vnd.genomatix.tuxedo": ["txd"], "application/vnd.geogebra.file": ["ggb"], "application/vnd.geogebra.tool": ["ggt"], "application/vnd.geometry-explorer": ["gex", "gre"], "application/vnd.geonext": ["gxt"], "application/vnd.geoplan": ["g2w"], "application/vnd.geospace": ["g3w"], "application/vnd.gmx": ["gmx"], "application/vnd.google-apps.document": ["gdoc"], "application/vnd.google-apps.presentation": ["gslides"], "application/vnd.google-apps.spreadsheet": ["gsheet"], "application/vnd.google-earth.kml+xml": ["kml"], "application/vnd.google-earth.kmz": ["kmz"], "application/vnd.grafeq": ["gqf", "gqs"], "application/vnd.groove-account": ["gac"], "application/vnd.groove-help": ["ghf"], "application/vnd.groove-identity-message": ["gim"], "application/vnd.groove-injector": ["grv"], "application/vnd.groove-tool-message": ["gtm"], "application/vnd.groove-tool-template": ["tpl"], "application/vnd.groove-vcard": ["vcg"], "application/vnd.hal+xml": ["hal"], "application/vnd.handheld-entertainment+xml": ["zmm"], "application/vnd.hbci": ["hbci"], "application/vnd.hhe.lesson-player": ["les"], "application/vnd.hp-hpgl": ["hpgl"], "application/vnd.hp-hpid": ["hpid"], "application/vnd.hp-hps": ["hps"], "application/vnd.hp-jlyt": ["jlt"], "application/vnd.hp-pcl": ["pcl"], "application/vnd.hp-pclxl": ["pclxl"], "application/vnd.hydrostatix.sof-data": ["sfd-hdstx"], "application/vnd.ibm.minipay": ["mpy"], "application/vnd.ibm.modcap": ["afp", "listafp", "list3820"], "application/vnd.ibm.rights-management": ["irm"], "application/vnd.ibm.secure-container": ["sc"], "application/vnd.iccprofile": ["icc", "icm"], "application/vnd.igloader": ["igl"], "application/vnd.immervision-ivp": ["ivp"], "application/vnd.immervision-ivu": ["ivu"], "application/vnd.insors.igm": ["igm"], "application/vnd.intercon.formnet": ["xpw", "xpx"], "application/vnd.intergeo": ["i2g"], "application/vnd.intu.qbo": ["qbo"], "application/vnd.intu.qfx": ["qfx"], "application/vnd.ipunplugged.rcprofile": ["rcprofile"], "application/vnd.irepository.package+xml": ["irp"], "application/vnd.is-xpr": ["xpr"], "application/vnd.isac.fcs": ["fcs"], "application/vnd.jam": ["jam"], "application/vnd.jcp.javame.midlet-rms": ["rms"], "application/vnd.jisp": ["jisp"], "application/vnd.joost.joda-archive": ["joda"], "application/vnd.kahootz": ["ktz", "ktr"], "application/vnd.kde.karbon": ["karbon"], "application/vnd.kde.kchart": ["chrt"], "application/vnd.kde.kformula": ["kfo"], "application/vnd.kde.kivio": ["flw"], "application/vnd.kde.kontour": ["kon"], "application/vnd.kde.kpresenter": ["kpr", "kpt"], "application/vnd.kde.kspread": ["ksp"], "application/vnd.kde.kword": ["kwd", "kwt"], "application/vnd.kenameaapp": ["htke"], "application/vnd.kidspiration": ["kia"], "application/vnd.kinar": ["kne", "knp"], "application/vnd.koan": ["skp", "skd", "skt", "skm"], "application/vnd.kodak-descriptor": ["sse"], "application/vnd.las.las+xml": ["lasxml"], "application/vnd.llamagraphics.life-balance.desktop": ["lbd"], "application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"], "application/vnd.lotus-1-2-3": ["123"], "application/vnd.lotus-approach": ["apr"], "application/vnd.lotus-freelance": ["pre"], "application/vnd.lotus-notes": ["nsf"], "application/vnd.lotus-organizer": ["org"], "application/vnd.lotus-screencam": ["scm"], "application/vnd.lotus-wordpro": ["lwp"], "application/vnd.macports.portpkg": ["portpkg"], "application/vnd.mcd": ["mcd"], "application/vnd.medcalcdata": ["mc1"], "application/vnd.mediastation.cdkey": ["cdkey"], "application/vnd.mfer": ["mwf"], "application/vnd.mfmp": ["mfm"], "application/vnd.micrografx.flo": ["flo"], "application/vnd.micrografx.igx": ["igx"], "application/vnd.mif": ["mif"], "application/vnd.mobius.daf": ["daf"], "application/vnd.mobius.dis": ["dis"], "application/vnd.mobius.mbk": ["mbk"], "application/vnd.mobius.mqy": ["mqy"], "application/vnd.mobius.msl": ["msl"], "application/vnd.mobius.plc": ["plc"], "application/vnd.mobius.txf": ["txf"], "application/vnd.mophun.application": ["mpn"], "application/vnd.mophun.certificate": ["mpc"], "application/vnd.mozilla.xul+xml": ["xul"], "application/vnd.ms-artgalry": ["cil"], "application/vnd.ms-cab-compressed": ["cab"], "application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], "application/vnd.ms-excel.addin.macroenabled.12": ["xlam"], "application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"], "application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"], "application/vnd.ms-excel.template.macroenabled.12": ["xltm"], "application/vnd.ms-fontobject": ["eot"], "application/vnd.ms-htmlhelp": ["chm"], "application/vnd.ms-ims": ["ims"], "application/vnd.ms-lrm": ["lrm"], "application/vnd.ms-officetheme": ["thmx"], "application/vnd.ms-outlook": ["msg"], "application/vnd.ms-pki.seccat": ["cat"], "application/vnd.ms-pki.stl": ["stl"], "application/vnd.ms-powerpoint": ["ppt", "pps", "pot"], "application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"], "application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"], "application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"], "application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"], "application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"], "application/vnd.ms-project": ["mpp", "mpt"], "application/vnd.ms-word.document.macroenabled.12": ["docm"], "application/vnd.ms-word.template.macroenabled.12": ["dotm"], "application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"], "application/vnd.ms-wpl": ["wpl"], "application/vnd.ms-xpsdocument": ["xps"], "application/vnd.mseq": ["mseq"], "application/vnd.musician": ["mus"], "application/vnd.muvee.style": ["msty"], "application/vnd.mynfc": ["taglet"], "application/vnd.neurolanguage.nlu": ["nlu"], "application/vnd.nitf": ["ntf", "nitf"], "application/vnd.noblenet-directory": ["nnd"], "application/vnd.noblenet-sealer": ["nns"], "application/vnd.noblenet-web": ["nnw"], "application/vnd.nokia.n-gage.data": ["ngdat"], "application/vnd.nokia.n-gage.symbian.install": ["n-gage"], "application/vnd.nokia.radio-preset": ["rpst"], "application/vnd.nokia.radio-presets": ["rpss"], "application/vnd.novadigm.edm": ["edm"], "application/vnd.novadigm.edx": ["edx"], "application/vnd.novadigm.ext": ["ext"], "application/vnd.oasis.opendocument.chart": ["odc"], "application/vnd.oasis.opendocument.chart-template": ["otc"], "application/vnd.oasis.opendocument.database": ["odb"], "application/vnd.oasis.opendocument.formula": ["odf"], "application/vnd.oasis.opendocument.formula-template": ["odft"], "application/vnd.oasis.opendocument.graphics": ["odg"], "application/vnd.oasis.opendocument.graphics-template": ["otg"], "application/vnd.oasis.opendocument.image": ["odi"], "application/vnd.oasis.opendocument.image-template": ["oti"], "application/vnd.oasis.opendocument.presentation": ["odp"], "application/vnd.oasis.opendocument.presentation-template": ["otp"], "application/vnd.oasis.opendocument.spreadsheet": ["ods"], "application/vnd.oasis.opendocument.spreadsheet-template": ["ots"], "application/vnd.oasis.opendocument.text": ["odt"], "application/vnd.oasis.opendocument.text-master": ["odm"], "application/vnd.oasis.opendocument.text-template": ["ott"], "application/vnd.oasis.opendocument.text-web": ["oth"], "application/vnd.olpc-sugar": ["xo"], "application/vnd.oma.dd2+xml": ["dd2"], "application/vnd.openofficeorg.extension": ["oxt"], "application/vnd.openxmlformats-officedocument.presentationml.presentation": ["pptx"], "application/vnd.openxmlformats-officedocument.presentationml.slide": ["sldx"], "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ["ppsx"], "application/vnd.openxmlformats-officedocument.presentationml.template": ["potx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.template": ["xltx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ["docx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.template": ["dotx"], "application/vnd.osgeo.mapguide.package": ["mgp"], "application/vnd.osgi.dp": ["dp"], "application/vnd.osgi.subsystem": ["esa"], "application/vnd.palm": ["pdb", "pqa", "oprc"], "application/vnd.pawaafile": ["paw"], "application/vnd.pg.format": ["str"], "application/vnd.pg.osasli": ["ei6"], "application/vnd.picsel": ["efif"], "application/vnd.pmi.widget": ["wg"], "application/vnd.pocketlearn": ["plf"], "application/vnd.powerbuilder6": ["pbd"], "application/vnd.previewsystems.box": ["box"], "application/vnd.proteus.magazine": ["mgz"], "application/vnd.publishare-delta-tree": ["qps"], "application/vnd.pvi.ptid1": ["ptid"], "application/vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], "application/vnd.realvnc.bed": ["bed"], "application/vnd.recordare.musicxml": ["mxl"], "application/vnd.recordare.musicxml+xml": ["musicxml"], "application/vnd.rig.cryptonote": ["cryptonote"], "application/vnd.rim.cod": ["cod"], "application/vnd.rn-realmedia": ["rm"], "application/vnd.rn-realmedia-vbr": ["rmvb"], "application/vnd.route66.link66+xml": ["link66"], "application/vnd.sailingtracker.track": ["st"], "application/vnd.seemail": ["see"], "application/vnd.sema": ["sema"], "application/vnd.semd": ["semd"], "application/vnd.semf": ["semf"], "application/vnd.shana.informed.formdata": ["ifm"], "application/vnd.shana.informed.formtemplate": ["itp"], "application/vnd.shana.informed.interchange": ["iif"], "application/vnd.shana.informed.package": ["ipk"], "application/vnd.simtech-mindmapper": ["twd", "twds"], "application/vnd.smaf": ["mmf"], "application/vnd.smart.teacher": ["teacher"], "application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"], "application/vnd.spotfire.dxp": ["dxp"], "application/vnd.spotfire.sfs": ["sfs"], "application/vnd.stardivision.calc": ["sdc"], "application/vnd.stardivision.draw": ["sda"], "application/vnd.stardivision.impress": ["sdd"], "application/vnd.stardivision.math": ["smf"], "application/vnd.stardivision.writer": ["sdw", "vor"], "application/vnd.stardivision.writer-global": ["sgl"], "application/vnd.stepmania.package": ["smzip"], "application/vnd.stepmania.stepchart": ["sm"], "application/vnd.sun.wadl+xml": ["wadl"], "application/vnd.sun.xml.calc": ["sxc"], "application/vnd.sun.xml.calc.template": ["stc"], "application/vnd.sun.xml.draw": ["sxd"], "application/vnd.sun.xml.draw.template": ["std"], "application/vnd.sun.xml.impress": ["sxi"], "application/vnd.sun.xml.impress.template": ["sti"], "application/vnd.sun.xml.math": ["sxm"], "application/vnd.sun.xml.writer": ["sxw"], "application/vnd.sun.xml.writer.global": ["sxg"], "application/vnd.sun.xml.writer.template": ["stw"], "application/vnd.sus-calendar": ["sus", "susp"], "application/vnd.svd": ["svd"], "application/vnd.symbian.install": ["sis", "sisx"], "application/vnd.syncml+xml": ["xsm"], "application/vnd.syncml.dm+wbxml": ["bdm"], "application/vnd.syncml.dm+xml": ["xdm"], "application/vnd.tao.intent-module-archive": ["tao"], "application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"], "application/vnd.tmobile-livetv": ["tmo"], "application/vnd.trid.tpt": ["tpt"], "application/vnd.triscape.mxs": ["mxs"], "application/vnd.trueapp": ["tra"], "application/vnd.ufdl": ["ufd", "ufdl"], "application/vnd.uiq.theme": ["utz"], "application/vnd.umajin": ["umj"], "application/vnd.unity": ["unityweb"], "application/vnd.uoml+xml": ["uoml"], "application/vnd.vcx": ["vcx"], "application/vnd.visio": ["vsd", "vst", "vss", "vsw"], "application/vnd.visionary": ["vis"], "application/vnd.vsf": ["vsf"], "application/vnd.wap.wbxml": ["wbxml"], "application/vnd.wap.wmlc": ["wmlc"], "application/vnd.wap.wmlscriptc": ["wmlsc"], "application/vnd.webturbo": ["wtb"], "application/vnd.wolfram.player": ["nbp"], "application/vnd.wordperfect": ["wpd"], "application/vnd.wqd": ["wqd"], "application/vnd.wt.stf": ["stf"], "application/vnd.xara": ["xar"], "application/vnd.xfdl": ["xfdl"], "application/vnd.yamaha.hv-dic": ["hvd"], "application/vnd.yamaha.hv-script": ["hvs"], "application/vnd.yamaha.hv-voice": ["hvp"], "application/vnd.yamaha.openscoreformat": ["osf"], "application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"], "application/vnd.yamaha.smaf-audio": ["saf"], "application/vnd.yamaha.smaf-phrase": ["spf"], "application/vnd.yellowriver-custom-menu": ["cmp"], "application/vnd.zul": ["zir", "zirz"], "application/vnd.zzazz.deck+xml": ["zaz"], "application/voicexml+xml": ["vxml"], "application/wasm": ["wasm"], "application/widget": ["wgt"], "application/winhlp": ["hlp"], "application/wsdl+xml": ["wsdl"], "application/wspolicy+xml": ["wspolicy"], "application/x-7z-compressed": ["7z"], "application/x-abiword": ["abw"], "application/x-ace-compressed": ["ace"], "application/x-apple-diskimage": [], "application/x-arj": ["arj"], "application/x-authorware-bin": ["aab", "x32", "u32", "vox"], "application/x-authorware-map": ["aam"], "application/x-authorware-seg": ["aas"], "application/x-bcpio": ["bcpio"], "application/x-bdoc": [], "application/x-bittorrent": ["torrent"], "application/x-blorb": ["blb", "blorb"], "application/x-bzip": ["bz"], "application/x-bzip2": ["bz2", "boz"], "application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"], "application/x-cdlink": ["vcd"], "application/x-cfs-compressed": ["cfs"], "application/x-chat": ["chat"], "application/x-chess-pgn": ["pgn"], "application/x-chrome-extension": ["crx"], "application/x-cocoa": ["cco"], "application/x-conference": ["nsc"], "application/x-cpio": ["cpio"], "application/x-csh": ["csh"], "application/x-debian-package": ["udeb"], "application/x-dgc-compressed": ["dgc"], "application/x-director": ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"], "application/x-doom": ["wad"], "application/x-dtbncx+xml": ["ncx"], "application/x-dtbook+xml": ["dtb"], "application/x-dtbresource+xml": ["res"], "application/x-dvi": ["dvi"], "application/x-envoy": ["evy"], "application/x-eva": ["eva"], "application/x-font-bdf": ["bdf"], "application/x-font-ghostscript": ["gsf"], "application/x-font-linux-psf": ["psf"], "application/x-font-pcf": ["pcf"], "application/x-font-snf": ["snf"], "application/x-font-type1": ["pfa", "pfb", "pfm", "afm"], "application/x-freearc": ["arc"], "application/x-futuresplash": ["spl"], "application/x-gca-compressed": ["gca"], "application/x-glulx": ["ulx"], "application/x-gnumeric": ["gnumeric"], "application/x-gramps-xml": ["gramps"], "application/x-gtar": ["gtar"], "application/x-hdf": ["hdf"], "application/x-httpd-php": ["php"], "application/x-install-instructions": ["install"], "application/x-iso9660-image": [], "application/x-java-archive-diff": ["jardiff"], "application/x-java-jnlp-file": ["jnlp"], "application/x-latex": ["latex"], "application/x-lua-bytecode": ["luac"], "application/x-lzh-compressed": ["lzh", "lha"], "application/x-makeself": ["run"], "application/x-mie": ["mie"], "application/x-mobipocket-ebook": ["prc", "mobi"], "application/x-ms-application": ["application"], "application/x-ms-shortcut": ["lnk"], "application/x-ms-wmd": ["wmd"], "application/x-ms-wmz": ["wmz"], "application/x-ms-xbap": ["xbap"], "application/x-msaccess": ["mdb"], "application/x-msbinder": ["obd"], "application/x-mscardfile": ["crd"], "application/x-msclip": ["clp"], "application/x-msdos-program": [], "application/x-msdownload": ["com", "bat"], "application/x-msmediaview": ["mvb", "m13", "m14"], "application/x-msmetafile": ["wmf", "emf", "emz"], "application/x-msmoney": ["mny"], "application/x-mspublisher": ["pub"], "application/x-msschedule": ["scd"], "application/x-msterminal": ["trm"], "application/x-mswrite": ["wri"], "application/x-netcdf": ["nc", "cdf"], "application/x-ns-proxy-autoconfig": ["pac"], "application/x-nzb": ["nzb"], "application/x-perl": ["pl", "pm"], "application/x-pilot": [], "application/x-pkcs12": ["p12", "pfx"], "application/x-pkcs7-certificates": ["p7b", "spc"], "application/x-pkcs7-certreqresp": ["p7r"], "application/x-rar-compressed": ["rar"], "application/x-redhat-package-manager": ["rpm"], "application/x-research-info-systems": ["ris"], "application/x-sea": ["sea"], "application/x-sh": ["sh"], "application/x-shar": ["shar"], "application/x-shockwave-flash": ["swf"], "application/x-silverlight-app": ["xap"], "application/x-sql": ["sql"], "application/x-stuffit": ["sit"], "application/x-stuffitx": ["sitx"], "application/x-subrip": ["srt"], "application/x-sv4cpio": ["sv4cpio"], "application/x-sv4crc": ["sv4crc"], "application/x-t3vm-image": ["t3"], "application/x-tads": ["gam"], "application/x-tar": ["tar"], "application/x-tcl": ["tcl", "tk"], "application/x-tex": ["tex"], "application/x-tex-tfm": ["tfm"], "application/x-texinfo": ["texinfo", "texi"], "application/x-tgif": ["obj"], "application/x-ustar": ["ustar"], "application/x-virtualbox-hdd": ["hdd"], "application/x-virtualbox-ova": ["ova"], "application/x-virtualbox-ovf": ["ovf"], "application/x-virtualbox-vbox": ["vbox"], "application/x-virtualbox-vbox-extpack": ["vbox-extpack"], "application/x-virtualbox-vdi": ["vdi"], "application/x-virtualbox-vhd": ["vhd"], "application/x-virtualbox-vmdk": ["vmdk"], "application/x-wais-source": ["src"], "application/x-web-app-manifest+json": ["webapp"], "application/x-x509-ca-cert": ["der", "crt", "pem"], "application/x-xfig": ["fig"], "application/x-xliff+xml": ["xlf"], "application/x-xpinstall": ["xpi"], "application/x-xz": ["xz"], "application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], "application/xaml+xml": ["xaml"], "application/xcap-diff+xml": ["xdf"], "application/xenc+xml": ["xenc"], "application/xhtml+xml": ["xhtml", "xht"], "application/xml": ["xml", "xsl", "xsd", "rng"], "application/xml-dtd": ["dtd"], "application/xop+xml": ["xop"], "application/xproc+xml": ["xpl"], "application/xslt+xml": ["xslt"], "application/xspf+xml": ["xspf"], "application/xv+xml": ["mxml", "xhvml", "xvml", "xvm"], "application/yang": ["yang"], "application/yin+xml": ["yin"], "application/zip": ["zip"], "audio/3gpp": [], "audio/adpcm": ["adp"], "audio/basic": ["au", "snd"], "audio/midi": ["mid", "midi", "kar", "rmi"], "audio/mp3": [], "audio/mp4": ["m4a", "mp4a"], "audio/mpeg": ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"], "audio/ogg": ["oga", "ogg", "spx"], "audio/s3m": ["s3m"], "audio/silk": ["sil"], "audio/vnd.dece.audio": ["uva", "uvva"], "audio/vnd.digital-winds": ["eol"], "audio/vnd.dra": ["dra"], "audio/vnd.dts": ["dts"], "audio/vnd.dts.hd": ["dtshd"], "audio/vnd.lucent.voice": ["lvp"], "audio/vnd.ms-playready.media.pya": ["pya"], "audio/vnd.nuera.ecelp4800": ["ecelp4800"], "audio/vnd.nuera.ecelp7470": ["ecelp7470"], "audio/vnd.nuera.ecelp9600": ["ecelp9600"], "audio/vnd.rip": ["rip"], "audio/wav": ["wav"], "audio/wave": [], "audio/webm": ["weba"], "audio/x-aac": ["aac"], "audio/x-aiff": ["aif", "aiff", "aifc"], "audio/x-caf": ["caf"], "audio/x-flac": ["flac"], "audio/x-m4a": [], "audio/x-matroska": ["mka"], "audio/x-mpegurl": ["m3u"], "audio/x-ms-wax": ["wax"], "audio/x-ms-wma": ["wma"], "audio/x-pn-realaudio": ["ram", "ra"], "audio/x-pn-realaudio-plugin": ["rmp"], "audio/x-realaudio": [], "audio/x-wav": [], "audio/xm": ["xm"], "chemical/x-cdx": ["cdx"], "chemical/x-cif": ["cif"], "chemical/x-cmdf": ["cmdf"], "chemical/x-cml": ["cml"], "chemical/x-csml": ["csml"], "chemical/x-xyz": ["xyz"], "font/collection": ["ttc"], "font/otf": ["otf"], "font/ttf": ["ttf"], "font/woff": ["woff"], "font/woff2": ["woff2"], "image/apng": ["apng"], "image/bmp": ["bmp"], "image/cgm": ["cgm"], "image/g3fax": ["g3"], "image/gif": ["gif"], "image/ief": ["ief"], "image/jp2": ["jp2", "jpg2"], "image/jpeg": ["jpeg", "jpg", "jpe"], "image/jpm": ["jpm"], "image/jpx": ["jpx", "jpf"], "image/ktx": ["ktx"], "image/png": ["png"], "image/prs.btif": ["btif"], "image/sgi": ["sgi"], "image/svg+xml": ["svg", "svgz"], "image/tiff": ["tiff", "tif"], "image/vnd.adobe.photoshop": ["psd"], "image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"], "image/vnd.djvu": ["djvu", "djv"], "image/vnd.dvb.subtitle": [], "image/vnd.dwg": ["dwg"], "image/vnd.dxf": ["dxf"], "image/vnd.fastbidsheet": ["fbs"], "image/vnd.fpx": ["fpx"], "image/vnd.fst": ["fst"], "image/vnd.fujixerox.edmics-mmr": ["mmr"], "image/vnd.fujixerox.edmics-rlc": ["rlc"], "image/vnd.ms-modi": ["mdi"], "image/vnd.ms-photo": ["wdp"], "image/vnd.net-fpx": ["npx"], "image/vnd.wap.wbmp": ["wbmp"], "image/vnd.xiff": ["xif"], "image/webp": ["webp"], "image/x-3ds": ["3ds"], "image/x-cmu-raster": ["ras"], "image/x-cmx": ["cmx"], "image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"], "image/x-icon": ["ico"], "image/x-jng": ["jng"], "image/x-mrsid-image": ["sid"], "image/x-ms-bmp": [], "image/x-pcx": ["pcx"], "image/x-pict": ["pic", "pct"], "image/x-portable-anymap": ["pnm"], "image/x-portable-bitmap": ["pbm"], "image/x-portable-graymap": ["pgm"], "image/x-portable-pixmap": ["ppm"], "image/x-rgb": ["rgb"], "image/x-tga": ["tga"], "image/x-xbitmap": ["xbm"], "image/x-xpixmap": ["xpm"], "image/x-xwindowdump": ["xwd"], "message/rfc822": ["eml", "mime"], "model/gltf+json": ["gltf"], "model/gltf-binary": ["glb"], "model/iges": ["igs", "iges"], "model/mesh": ["msh", "mesh", "silo"], "model/vnd.collada+xml": ["dae"], "model/vnd.dwf": ["dwf"], "model/vnd.gdl": ["gdl"], "model/vnd.gtw": ["gtw"], "model/vnd.mts": ["mts"], "model/vnd.vtu": ["vtu"], "model/vrml": ["wrl", "vrml"], "model/x3d+binary": ["x3db", "x3dbz"], "model/x3d+vrml": ["x3dv", "x3dvz"], "model/x3d+xml": ["x3d", "x3dz"], "text/cache-manifest": ["appcache", "manifest"], "text/calendar": ["ics", "ifb"], "text/coffeescript": ["coffee", "litcoffee"], "text/css": ["css"], "text/csv": ["csv"], "text/hjson": ["hjson"], "text/html": ["html", "htm", "shtml"], "text/jade": ["jade"], "text/jsx": ["jsx"], "text/less": ["less"], "text/markdown": ["markdown", "md"], "text/mathml": ["mml"], "text/n3": ["n3"], "text/plain": ["txt", "text", "conf", "def", "list", "log", "in", "ini"], "text/prs.lines.tag": ["dsc"], "text/richtext": ["rtx"], "text/rtf": [], "text/sgml": ["sgml", "sgm"], "text/slim": ["slim", "slm"], "text/stylus": ["stylus", "styl"], "text/tab-separated-values": ["tsv"], "text/troff": ["t", "tr", "roff", "man", "me", "ms"], "text/turtle": ["ttl"], "text/uri-list": ["uri", "uris", "urls"], "text/vcard": ["vcard"], "text/vnd.curl": ["curl"], "text/vnd.curl.dcurl": ["dcurl"], "text/vnd.curl.mcurl": ["mcurl"], "text/vnd.curl.scurl": ["scurl"], "text/vnd.dvb.subtitle": ["sub"], "text/vnd.fly": ["fly"], "text/vnd.fmi.flexstor": ["flx"], "text/vnd.graphviz": ["gv"], "text/vnd.in3d.3dml": ["3dml"], "text/vnd.in3d.spot": ["spot"], "text/vnd.sun.j2me.app-descriptor": ["jad"], "text/vnd.wap.wml": ["wml"], "text/vnd.wap.wmlscript": ["wmls"], "text/vtt": ["vtt"], "text/x-asm": ["s", "asm"], "text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], "text/x-component": ["htc"], "text/x-fortran": ["f", "for", "f77", "f90"], "text/x-handlebars-template": ["hbs"], "text/x-java-source": ["java"], "text/x-lua": ["lua"], "text/x-markdown": ["mkd"], "text/x-nfo": ["nfo"], "text/x-opml": ["opml"], "text/x-org": [], "text/x-pascal": ["p", "pas"], "text/x-processing": ["pde"], "text/x-sass": ["sass"], "text/x-scss": ["scss"], "text/x-setext": ["etx"], "text/x-sfv": ["sfv"], "text/x-suse-ymp": ["ymp"], "text/x-uuencode": ["uu"], "text/x-vcalendar": ["vcs"], "text/x-vcard": ["vcf"], "text/xml": [], "text/yaml": ["yaml", "yml"], "video/3gpp": ["3gp", "3gpp"], "video/3gpp2": ["3g2"], "video/h261": ["h261"], "video/h263": ["h263"], "video/h264": ["h264"], "video/jpeg": ["jpgv"], "video/jpm": ["jpgm"], "video/mj2": ["mj2", "mjp2"], "video/mp2t": ["ts"], "video/mp4": ["mp4", "mp4v", "mpg4"], "video/mpeg": ["mpeg", "mpg", "mpe", "m1v", "m2v"], "video/ogg": ["ogv"], "video/quicktime": ["qt", "mov"], "video/vnd.dece.hd": ["uvh", "uvvh"], "video/vnd.dece.mobile": ["uvm", "uvvm"], "video/vnd.dece.pd": ["uvp", "uvvp"], "video/vnd.dece.sd": ["uvs", "uvvs"], "video/vnd.dece.video": ["uvv", "uvvv"], "video/vnd.dvb.file": ["dvb"], "video/vnd.fvt": ["fvt"], "video/vnd.mpegurl": ["mxu", "m4u"], "video/vnd.ms-playready.media.pyv": ["pyv"], "video/vnd.uvvu.mp4": ["uvu", "uvvu"], "video/vnd.vivo": ["viv"], "video/webm": ["webm"], "video/x-f4v": ["f4v"], "video/x-fli": ["fli"], "video/x-flv": ["flv"], "video/x-m4v": ["m4v"], "video/x-matroska": ["mkv", "mk3d", "mks"], "video/x-mng": ["mng"], "video/x-ms-asf": ["asf", "asx"], "video/x-ms-vob": ["vob"], "video/x-ms-wm": ["wm"], "video/x-ms-wmv": ["wmv"], "video/x-ms-wmx": ["wmx"], "video/x-ms-wvx": ["wvx"], "video/x-msvideo": ["avi"], "video/x-sgi-movie": ["movie"], "video/x-smv": ["smv"], "x-conference/x-cooltalk": ["ice"] }; }); // node_modules/mime/mime.js var require_mime = __commonJS((exports, module) => { var path8 = __require("path"); var fs2 = __require("fs"); function Mime() { this.types = Object.create(null); this.extensions = Object.create(null); } Mime.prototype.define = function(map2) { for (var type in map2) { var exts = map2[type]; for (var i = 0;i < exts.length; i++) { if (process.env.DEBUG_MIME && this.types[exts[i]]) { console.warn((this._loading || "define()").replace(/.*\//, ""), 'changes "' + exts[i] + '" extension type from ' + this.types[exts[i]] + " to " + type); } this.types[exts[i]] = type; } if (!this.extensions[type]) { this.extensions[type] = exts[0]; } } }; Mime.prototype.load = function(file) { this._loading = file; var map2 = {}, content = fs2.readFileSync(file, "ascii"), lines = content.split(/[\r\n]+/); lines.forEach(function(line) { var fields = line.replace(/\s*#.*|^\s*|\s*$/g, "").split(/\s+/); map2[fields.shift()] = fields; }); this.define(map2); this._loading = null; }; Mime.prototype.lookup = function(path9, fallback) { var ext = path9.replace(/^.*[\.\/\\]/, "").toLowerCase(); return this.types[ext] || fallback || this.default_type; }; Mime.prototype.extension = function(mimeType) { var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); return this.extensions[type]; }; var mime = new Mime; mime.define(require_types2()); mime.default_type = mime.lookup("bin"); mime.Mime = Mime; mime.charsets = { lookup: function(mimeType, fallback) { return /^text\/|^application\/(javascript|json)/.test(mimeType) ? "UTF-8" : fallback; } }; module.exports = mime; }); // node_modules/send/node_modules/ms/index.js var require_ms2 = __commonJS((exports, module) => { var s = 1000; var m = s * 60; var h = m * 60; var d = h * 24; var w = d * 7; var y = d * 365.25; module.exports = function(val, options) { options = options || {}; var type = typeof val; if (type === "string" && val.length > 0) { return parse5(val); } else if (type === "number" && isFinite(val)) { return options.long ? fmtLong(val) : fmtShort(val); } throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val)); }; function parse5(str) { str = String(str); if (str.length > 100) { return; } var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str); if (!match) { return; } var n = parseFloat(match[1]); var type = (match[2] || "ms").toLowerCase(); switch (type) { case "years": case "year": case "yrs": case "yr": case "y": return n * y; case "weeks": case "week": case "w": return n * w; case "days": case "day": case "d": return n * d; case "hours": case "hour": case "hrs": case "hr": case "h": return n * h; case "minutes": case "minute": case "mins": case "min": case "m": return n * m; case "seconds": case "second": case "secs": case "sec": case "s": return n * s; case "milliseconds": case "millisecond": case "msecs": case "msec": case "ms": return n; default: return; } } function fmtShort(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return Math.round(ms / d) + "d"; } if (msAbs >= h) { return Math.round(ms / h) + "h"; } if (msAbs >= m) { return Math.round(ms / m) + "m"; } if (msAbs >= s) { return Math.round(ms / s) + "s"; } return ms + "ms"; } function fmtLong(ms) { var msAbs = Math.abs(ms); if (msAbs >= d) { return plural(ms, msAbs, d, "day"); } if (msAbs >= h) { return plural(ms, msAbs, h, "hour"); } if (msAbs >= m) { return plural(ms, msAbs, m, "minute"); } if (msAbs >= s) { return plural(ms, msAbs, s, "second"); } return ms + " ms"; } function plural(ms, msAbs, n, name) { var isPlural = msAbs >= n * 1.5; return Math.round(ms / n) + " " + name + (isPlural ? "s" : ""); } }); // node_modules/range-parser/index.js var require_range_parser = __commonJS((exports, module) => { /*! * range-parser * Copyright(c) 2012-2014 TJ Holowaychuk * Copyright(c) 2015-2016 Douglas Christopher Wilson * MIT Licensed */ module.exports = rangeParser; function rangeParser(size, str, options) { if (typeof str !== "string") { throw new TypeError("argument str must be a string"); } var index = str.indexOf("="); if (index === -1) { return -2; } var arr = str.slice(index + 1).split(","); var ranges = []; ranges.type = str.slice(0, index); for (var i = 0;i < arr.length; i++) { var range = arr[i].split("-"); var start = parseInt(range[0], 10); var end = parseInt(range[1], 10); if (isNaN(start)) { start = size - end; end = size - 1; } else if (isNaN(end)) { end = size - 1; } if (end > size - 1) { end = size - 1; } if (isNaN(start) || isNaN(end) || start > end || start < 0) { continue; } ranges.push({ start, end }); } if (ranges.length < 1) { return -1; } return options && options.combine ? combineRanges(ranges) : ranges; } function combineRanges(ranges) { var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart); for (var j = 0, i = 1;i < ordered.length; i++) { var range = ordered[i]; var current = ordered[j]; if (range.start > current.end + 1) { ordered[++j] = range; } else if (range.end > current.end) { current.end = range.end; current.index = Math.min(current.index, range.index); } } ordered.length = j + 1; var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex); combined.type = ranges.type; return combined; } function mapWithIndex(range, index) { return { start: range.start, end: range.end, index }; } function mapWithoutIndex(range) { return { start: range.start, end: range.end }; } function sortByRangeIndex(a, b) { return a.index - b.index; } function sortByRangeStart(a, b) { return a.start - b.start; } }); // node_modules/send/index.js var require_send = __commonJS((exports, module) => { /*! * send * Copyright(c) 2012 TJ Holowaychuk * Copyright(c) 2014-2022 Douglas Christopher Wilson * MIT Licensed */ var createError = require_http_errors(); var debug = require_src()("send"); var deprecate = require_depd()("send"); var destroy = require_destroy(); var encodeUrl = require_encodeurl(); var escapeHtml = require_escape_html(); var etag = require_etag(); var fresh = require_fresh(); var fs2 = __require("fs"); var mime = require_mime(); var ms = require_ms2(); var onFinished = require_on_finished(); var parseRange = require_range_parser(); var path8 = __require("path"); var statuses = require_statuses(); var Stream = __require("stream"); var util = __require("util"); var extname = path8.extname; var join6 = path8.join; var normalize = path8.normalize; var resolve = path8.resolve; var sep2 = path8.sep; var BYTES_RANGE_REGEXP = /^ *bytes=/; var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000; var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/; module.exports = send; module.exports.mime = mime; function send(req, path9, options) { return new SendStream(req, path9, options); } function SendStream(req, path9, options) { Stream.call(this); var opts = options || {}; this.options = opts; this.path = path9; this.req = req; this._acceptRanges = opts.acceptRanges !== undefined ? Boolean(opts.acceptRanges) : true; this._cacheControl = opts.cacheControl !== undefined ? Boolean(opts.cacheControl) : true; this._etag = opts.etag !== undefined ? Boolean(opts.etag) : true; this._dotfiles = opts.dotfiles !== undefined ? opts.dotfiles : "ignore"; if (this._dotfiles !== "ignore" && this._dotfiles !== "allow" && this._dotfiles !== "deny") { throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"'); } this._hidden = Boolean(opts.hidden); if (opts.hidden !== undefined) { deprecate("hidden: use dotfiles: '" + (this._hidden ? "allow" : "ignore") + "' instead"); } if (opts.dotfiles === undefined) { this._dotfiles = undefined; } this._extensions = opts.extensions !== undefined ? normalizeList(opts.extensions, "extensions option") : []; this._immutable = opts.immutable !== undefined ? Boolean(opts.immutable) : false; this._index = opts.index !== undefined ? normalizeList(opts.index, "index option") : ["index.html"]; this._lastModified = opts.lastModified !== undefined ? Boolean(opts.lastModified) : true; this._maxage = opts.maxAge || opts.maxage; this._maxage = typeof this._maxage === "string" ? ms(this._maxage) : Number(this._maxage); this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0; this._root = opts.root ? resolve(opts.root) : null; if (!this._root && opts.from) { this.from(opts.from); } } util.inherits(SendStream, Stream); SendStream.prototype.etag = deprecate.function(function etag2(val) { this._etag = Boolean(val); debug("etag %s", this._etag); return this; }, "send.etag: pass etag as option"); SendStream.prototype.hidden = deprecate.function(function hidden(val) { this._hidden = Boolean(val); this._dotfiles = undefined; debug("hidden %s", this._hidden); return this; }, "send.hidden: use dotfiles option"); SendStream.prototype.index = deprecate.function(function index(paths) { var index2 = !paths ? [] : normalizeList(paths, "paths argument"); debug("index %o", paths); this._index = index2; return this; }, "send.index: pass index as option"); SendStream.prototype.root = function root(path9) { this._root = resolve(String(path9)); debug("root %s", this._root); return this; }; SendStream.prototype.from = deprecate.function(SendStream.prototype.root, "send.from: pass root as option"); SendStream.prototype.root = deprecate.function(SendStream.prototype.root, "send.root: pass root as option"); SendStream.prototype.maxage = deprecate.function(function maxage(maxAge) { this._maxage = typeof maxAge === "string" ? ms(maxAge) : Number(maxAge); this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0; debug("max-age %d", this._maxage); return this; }, "send.maxage: pass maxAge as option"); SendStream.prototype.error = function error2(status, err) { if (hasListeners(this, "error")) { return this.emit("error", createHttpError(status, err)); } var res = this.res; var msg = statuses.message[status] || String(status); var doc2 = createHtmlDocument("Error", escapeHtml(msg)); clearHeaders(res); if (err && err.headers) { setHeaders(res, err.headers); } res.statusCode = status; res.setHeader("Content-Type", "text/html; charset=UTF-8"); res.setHeader("Content-Length", Buffer.byteLength(doc2)); res.setHeader("Content-Security-Policy", "default-src 'none'"); res.setHeader("X-Content-Type-Options", "nosniff"); res.end(doc2); }; SendStream.prototype.hasTrailingSlash = function hasTrailingSlash() { return this.path[this.path.length - 1] === "/"; }; SendStream.prototype.isConditionalGET = function isConditionalGET() { return this.req.headers["if-match"] || this.req.headers["if-unmodified-since"] || this.req.headers["if-none-match"] || this.req.headers["if-modified-since"]; }; SendStream.prototype.isPreconditionFailure = function isPreconditionFailure() { var req = this.req; var res = this.res; var match = req.headers["if-match"]; if (match) { var etag2 = res.getHeader("ETag"); return !etag2 || match !== "*" && parseTokenList(match).every(function(match2) { return match2 !== etag2 && match2 !== "W/" + etag2 && "W/" + match2 !== etag2; }); } var unmodifiedSince = parseHttpDate(req.headers["if-unmodified-since"]); if (!isNaN(unmodifiedSince)) { var lastModified = parseHttpDate(res.getHeader("Last-Modified")); return isNaN(lastModified) || lastModified > unmodifiedSince; } return false; }; SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields() { var res = this.res; res.removeHeader("Content-Encoding"); res.removeHeader("Content-Language"); res.removeHeader("Content-Length"); res.removeHeader("Content-Range"); res.removeHeader("Content-Type"); }; SendStream.prototype.notModified = function notModified() { var res = this.res; debug("not modified"); this.removeContentHeaderFields(); res.statusCode = 304; res.end(); }; SendStream.prototype.headersAlreadySent = function headersAlreadySent() { var err = new Error("Can't set headers after they are sent."); debug("headers already sent"); this.error(500, err); }; SendStream.prototype.isCachable = function isCachable() { var statusCode = this.res.statusCode; return statusCode >= 200 && statusCode < 300 || statusCode === 304; }; SendStream.prototype.onStatError = function onStatError(error2) { switch (error2.code) { case "ENAMETOOLONG": case "ENOENT": case "ENOTDIR": this.error(404, error2); break; default: this.error(500, error2); break; } }; SendStream.prototype.isFresh = function isFresh() { return fresh(this.req.headers, { etag: this.res.getHeader("ETag"), "last-modified": this.res.getHeader("Last-Modified") }); }; SendStream.prototype.isRangeFresh = function isRangeFresh() { var ifRange = this.req.headers["if-range"]; if (!ifRange) { return true; } if (ifRange.indexOf('"') !== -1) { var etag2 = this.res.getHeader("ETag"); return Boolean(etag2 && ifRange.indexOf(etag2) !== -1); } var lastModified = this.res.getHeader("Last-Modified"); return parseHttpDate(lastModified) <= parseHttpDate(ifRange); }; SendStream.prototype.redirect = function redirect(path9) { var res = this.res; if (hasListeners(this, "directory")) { this.emit("directory", res, path9); return; } if (this.hasTrailingSlash()) { this.error(403); return; } var loc = encodeUrl(collapseLeadingSlashes(this.path + "/")); var doc2 = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc)); res.statusCode = 301; res.setHeader("Content-Type", "text/html; charset=UTF-8"); res.setHeader("Content-Length", Buffer.byteLength(doc2)); res.setHeader("Content-Security-Policy", "default-src 'none'"); res.setHeader("X-Content-Type-Options", "nosniff"); res.setHeader("Location", loc); res.end(doc2); }; SendStream.prototype.pipe = function pipe2(res) { var root = this._root; this.res = res; var path9 = decode3(this.path); if (path9 === -1) { this.error(400); return res; } if (~path9.indexOf("\x00")) { this.error(400); return res; } var parts; if (root !== null) { if (path9) { path9 = normalize("." + sep2 + path9); } if (UP_PATH_REGEXP.test(path9)) { debug('malicious path "%s"', path9); this.error(403); return res; } parts = path9.split(sep2); path9 = normalize(join6(root, path9)); } else { if (UP_PATH_REGEXP.test(path9)) { debug('malicious path "%s"', path9); this.error(403); return res; } parts = normalize(path9).split(sep2); path9 = resolve(path9); } if (containsDotFile(parts)) { var access = this._dotfiles; if (access === undefined) { access = parts[parts.length - 1][0] === "." ? this._hidden ? "allow" : "ignore" : "allow"; } debug('%s dotfile "%s"', access, path9); switch (access) { case "allow": break; case "deny": this.error(403); return res; case "ignore": default: this.error(404); return res; } } if (this._index.length && this.hasTrailingSlash()) { this.sendIndex(path9); return res; } this.sendFile(path9); return res; }; SendStream.prototype.send = function send2(path9, stat) { var len = stat.size; var options = this.options; var opts = {}; var res = this.res; var req = this.req; var ranges = req.headers.range; var offset = options.start || 0; if (headersSent(res)) { this.headersAlreadySent(); return; } debug('pipe "%s"', path9); this.setHeader(path9, stat); this.type(path9); if (this.isConditionalGET()) { if (this.isPreconditionFailure()) { this.error(412); return; } if (this.isCachable() && this.isFresh()) { this.notModified(); return; } } len = Math.max(0, len - offset); if (options.end !== undefined) { var bytes = options.end - offset + 1; if (len > bytes) len = bytes; } if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) { ranges = parseRange(len, ranges, { combine: true }); if (!this.isRangeFresh()) { debug("range stale"); ranges = -2; } if (ranges === -1) { debug("range unsatisfiable"); res.setHeader("Content-Range", contentRange("bytes", len)); return this.error(416, { headers: { "Content-Range": res.getHeader("Content-Range") } }); } if (ranges !== -2 && ranges.length === 1) { debug("range %j", ranges); res.statusCode = 206; res.setHeader("Content-Range", contentRange("bytes", len, ranges[0])); offset += ranges[0].start; len = ranges[0].end - ranges[0].start + 1; } } for (var prop in options) { opts[prop] = options[prop]; } opts.start = offset; opts.end = Math.max(offset, offset + len - 1); res.setHeader("Content-Length", len); if (req.method === "HEAD") { res.end(); return; } this.stream(path9, opts); }; SendStream.prototype.sendFile = function sendFile(path9) { var i = 0; var self2 = this; debug('stat "%s"', path9); fs2.stat(path9, function onstat(err, stat) { if (err && err.code === "ENOENT" && !extname(path9) && path9[path9.length - 1] !== sep2) { return next(err); } if (err) return self2.onStatError(err); if (stat.isDirectory()) return self2.redirect(path9); self2.emit("file", path9, stat); self2.send(path9, stat); }); function next(err) { if (self2._extensions.length <= i) { return err ? self2.onStatError(err) : self2.error(404); } var p = path9 + "." + self2._extensions[i++]; debug('stat "%s"', p); fs2.stat(p, function(err2, stat) { if (err2) return next(err2); if (stat.isDirectory()) return next(); self2.emit("file", p, stat); self2.send(p, stat); }); } }; SendStream.prototype.sendIndex = function sendIndex(path9) { var i = -1; var self2 = this; function next(err) { if (++i >= self2._index.length) { if (err) return self2.onStatError(err); return self2.error(404); } var p = join6(path9, self2._index[i]); debug('stat "%s"', p); fs2.stat(p, function(err2, stat) { if (err2) return next(err2); if (stat.isDirectory()) return next(); self2.emit("file", p, stat); self2.send(p, stat); }); } next(); }; SendStream.prototype.stream = function stream(path9, options) { var self2 = this; var res = this.res; var stream2 = fs2.createReadStream(path9, options); this.emit("stream", stream2); stream2.pipe(res); function cleanup() { destroy(stream2, true); } onFinished(res, cleanup); stream2.on("error", function onerror(err) { cleanup(); self2.onStatError(err); }); stream2.on("end", function onend() { self2.emit("end"); }); }; SendStream.prototype.type = function type(path9) { var res = this.res; if (res.getHeader("Content-Type")) return; var type2 = mime.lookup(path9); if (!type2) { debug("no content-type"); return; } var charset = mime.charsets.lookup(type2); debug("content-type %s", type2); res.setHeader("Content-Type", type2 + (charset ? "; charset=" + charset : "")); }; SendStream.prototype.setHeader = function setHeader(path9, stat) { var res = this.res; this.emit("headers", res, path9, stat); if (this._acceptRanges && !res.getHeader("Accept-Ranges")) { debug("accept ranges"); res.setHeader("Accept-Ranges", "bytes"); } if (this._cacheControl && !res.getHeader("Cache-Control")) { var cacheControl = "public, max-age=" + Math.floor(this._maxage / 1000); if (this._immutable) { cacheControl += ", immutable"; } debug("cache-control %s", cacheControl); res.setHeader("Cache-Control", cacheControl); } if (this._lastModified && !res.getHeader("Last-Modified")) { var modified = stat.mtime.toUTCString(); debug("modified %s", modified); res.setHeader("Last-Modified", modified); } if (this._etag && !res.getHeader("ETag")) { var val = etag(stat); debug("etag %s", val); res.setHeader("ETag", val); } }; function clearHeaders(res) { var headers = getHeaderNames(res); for (var i = 0;i < headers.length; i++) { res.removeHeader(headers[i]); } } function collapseLeadingSlashes(str) { for (var i = 0;i < str.length; i++) { if (str[i] !== "/") { break; } } return i > 1 ? "/" + str.substr(i) : str; } function containsDotFile(parts) { for (var i = 0;i < parts.length; i++) { var part = parts[i]; if (part.length > 1 && part[0] === ".") { return true; } } return false; } function contentRange(type, size, range) { return type + " " + (range ? range.start + "-" + range.end : "*") + "/" + size; } function createHtmlDocument(title, body) { return ` ` + ` ` + ` ` + ` ` + "" + title + ` ` + ` ` + ` ` + "
" + body + `
` + ` ` + ` `; } function createHttpError(status, err) { if (!err) { return createError(status); } return err instanceof Error ? createError(status, err, { expose: false }) : createError(status, err); } function decode3(path9) { try { return decodeURIComponent(path9); } catch (err) { return -1; } } function getHeaderNames(res) { return typeof res.getHeaderNames !== "function" ? Object.keys(res._headers || {}) : res.getHeaderNames(); } function hasListeners(emitter, type) { var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type); return count > 0; } function headersSent(res) { return typeof res.headersSent !== "boolean" ? Boolean(res._header) : res.headersSent; } function normalizeList(val, name) { var list = [].concat(val || []); for (var i = 0;i < list.length; i++) { if (typeof list[i] !== "string") { throw new TypeError(name + " must be array of strings or false"); } } return list; } function parseHttpDate(date4) { var timestamp = date4 && Date.parse(date4); return typeof timestamp === "number" ? timestamp : NaN; } function parseTokenList(str) { var end = 0; var list = []; var start = 0; for (var i = 0, len = str.length;i < len; i++) { switch (str.charCodeAt(i)) { case 32: if (start === end) { start = end = i + 1; } break; case 44: if (start !== end) { list.push(str.substring(start, end)); } start = end = i + 1; break; default: end = i + 1; break; } } if (start !== end) { list.push(str.substring(start, end)); } return list; } function setHeaders(res, headers) { var keys = Object.keys(headers); for (var i = 0;i < keys.length; i++) { var key = keys[i]; res.setHeader(key, headers[key]); } } }); // node_modules/forwarded/index.js var require_forwarded = __commonJS((exports, module) => { /*! * forwarded * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ module.exports = forwarded; function forwarded(req) { if (!req) { throw new TypeError("argument req is required"); } var proxyAddrs = parse5(req.headers["x-forwarded-for"] || ""); var socketAddr = getSocketAddr(req); var addrs = [socketAddr].concat(proxyAddrs); return addrs; } function getSocketAddr(req) { return req.socket ? req.socket.remoteAddress : req.connection.remoteAddress; } function parse5(header) { var end = header.length; var list = []; var start = header.length; for (var i = header.length - 1;i >= 0; i--) { switch (header.charCodeAt(i)) { case 32: if (start === end) { start = end = i; } break; case 44: if (start !== end) { list.push(header.substring(start, end)); } start = end = i; break; default: start = i; break; } } if (start !== end) { list.push(header.substring(start, end)); } return list; } }); // node_modules/ipaddr.js/lib/ipaddr.js var require_ipaddr = __commonJS((exports, module) => { (function() { var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root, zoneIndex; ipaddr = {}; root = this; if (typeof module !== "undefined" && module !== null && module.exports) { module.exports = ipaddr; } else { root["ipaddr"] = ipaddr; } matchCIDR = function(first, second, partSize, cidrBits) { var part, shift; if (first.length !== second.length) { throw new Error("ipaddr: cannot match CIDR for objects with different lengths"); } part = 0; while (cidrBits > 0) { shift = partSize - cidrBits; if (shift < 0) { shift = 0; } if (first[part] >> shift !== second[part] >> shift) { return false; } cidrBits -= partSize; part += 1; } return true; }; ipaddr.subnetMatch = function(address, rangeList, defaultName) { var k, len, rangeName, rangeSubnets, subnet; if (defaultName == null) { defaultName = "unicast"; } for (rangeName in rangeList) { rangeSubnets = rangeList[rangeName]; if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) { rangeSubnets = [rangeSubnets]; } for (k = 0, len = rangeSubnets.length;k < len; k++) { subnet = rangeSubnets[k]; if (address.kind() === subnet[0].kind()) { if (address.match.apply(address, subnet)) { return rangeName; } } } } return defaultName; }; ipaddr.IPv4 = function() { function IPv4(octets) { var k, len, octet; if (octets.length !== 4) { throw new Error("ipaddr: ipv4 octet count should be 4"); } for (k = 0, len = octets.length;k < len; k++) { octet = octets[k]; if (!(0 <= octet && octet <= 255)) { throw new Error("ipaddr: ipv4 octet should fit in 8 bits"); } } this.octets = octets; } IPv4.prototype.kind = function() { return "ipv4"; }; IPv4.prototype.toString = function() { return this.octets.join("."); }; IPv4.prototype.toNormalizedString = function() { return this.toString(); }; IPv4.prototype.toByteArray = function() { return this.octets.slice(0); }; IPv4.prototype.match = function(other, cidrRange) { var ref; if (cidrRange === undefined) { ref = other, other = ref[0], cidrRange = ref[1]; } if (other.kind() !== "ipv4") { throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one"); } return matchCIDR(this.octets, other.octets, 8, cidrRange); }; IPv4.prototype.SpecialRanges = { unspecified: [[new IPv4([0, 0, 0, 0]), 8]], broadcast: [[new IPv4([255, 255, 255, 255]), 32]], multicast: [[new IPv4([224, 0, 0, 0]), 4]], linkLocal: [[new IPv4([169, 254, 0, 0]), 16]], loopback: [[new IPv4([127, 0, 0, 0]), 8]], carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]], private: [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]], reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]] }; IPv4.prototype.range = function() { return ipaddr.subnetMatch(this, this.SpecialRanges); }; IPv4.prototype.toIPv4MappedAddress = function() { return ipaddr.IPv6.parse("::ffff:" + this.toString()); }; IPv4.prototype.prefixLengthFromSubnetMask = function() { var cidr, i, k, octet, stop, zeros, zerotable; zerotable = { 0: 8, 128: 7, 192: 6, 224: 5, 240: 4, 248: 3, 252: 2, 254: 1, 255: 0 }; cidr = 0; stop = false; for (i = k = 3;k >= 0; i = k += -1) { octet = this.octets[i]; if (octet in zerotable) { zeros = zerotable[octet]; if (stop && zeros !== 0) { return null; } if (zeros !== 8) { stop = true; } cidr += zeros; } else { return null; } } return 32 - cidr; }; return IPv4; }(); ipv4Part = "(0?\\d+|0x[a-f0-9]+)"; ipv4Regexes = { fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", "i"), longValue: new RegExp("^" + ipv4Part + "$", "i") }; ipaddr.IPv4.parser = function(string4) { var match, parseIntAuto, part, shift, value; parseIntAuto = function(string5) { if (string5[0] === "0" && string5[1] !== "x") { return parseInt(string5, 8); } else { return parseInt(string5); } }; if (match = string4.match(ipv4Regexes.fourOctet)) { return function() { var k, len, ref, results; ref = match.slice(1, 6); results = []; for (k = 0, len = ref.length;k < len; k++) { part = ref[k]; results.push(parseIntAuto(part)); } return results; }(); } else if (match = string4.match(ipv4Regexes.longValue)) { value = parseIntAuto(match[1]); if (value > 4294967295 || value < 0) { throw new Error("ipaddr: address outside defined range"); } return function() { var k, results; results = []; for (shift = k = 0;k <= 24; shift = k += 8) { results.push(value >> shift & 255); } return results; }().reverse(); } else { return null; } }; ipaddr.IPv6 = function() { function IPv6(parts, zoneId) { var i, k, l, len, part, ref; if (parts.length === 16) { this.parts = []; for (i = k = 0;k <= 14; i = k += 2) { this.parts.push(parts[i] << 8 | parts[i + 1]); } } else if (parts.length === 8) { this.parts = parts; } else { throw new Error("ipaddr: ipv6 part count should be 8 or 16"); } ref = this.parts; for (l = 0, len = ref.length;l < len; l++) { part = ref[l]; if (!(0 <= part && part <= 65535)) { throw new Error("ipaddr: ipv6 part should fit in 16 bits"); } } if (zoneId) { this.zoneId = zoneId; } } IPv6.prototype.kind = function() { return "ipv6"; }; IPv6.prototype.toString = function() { return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, "::"); }; IPv6.prototype.toRFC5952String = function() { var bestMatchIndex, bestMatchLength, match, regex, string4; regex = /((^|:)(0(:|$)){2,})/g; string4 = this.toNormalizedString(); bestMatchIndex = 0; bestMatchLength = -1; while (match = regex.exec(string4)) { if (match[0].length > bestMatchLength) { bestMatchIndex = match.index; bestMatchLength = match[0].length; } } if (bestMatchLength < 0) { return string4; } return string4.substring(0, bestMatchIndex) + "::" + string4.substring(bestMatchIndex + bestMatchLength); }; IPv6.prototype.toByteArray = function() { var bytes, k, len, part, ref; bytes = []; ref = this.parts; for (k = 0, len = ref.length;k < len; k++) { part = ref[k]; bytes.push(part >> 8); bytes.push(part & 255); } return bytes; }; IPv6.prototype.toNormalizedString = function() { var addr, part, suffix; addr = function() { var k, len, ref, results; ref = this.parts; results = []; for (k = 0, len = ref.length;k < len; k++) { part = ref[k]; results.push(part.toString(16)); } return results; }.call(this).join(":"); suffix = ""; if (this.zoneId) { suffix = "%" + this.zoneId; } return addr + suffix; }; IPv6.prototype.toFixedLengthString = function() { var addr, part, suffix; addr = function() { var k, len, ref, results; ref = this.parts; results = []; for (k = 0, len = ref.length;k < len; k++) { part = ref[k]; results.push(part.toString(16).padStart(4, "0")); } return results; }.call(this).join(":"); suffix = ""; if (this.zoneId) { suffix = "%" + this.zoneId; } return addr + suffix; }; IPv6.prototype.match = function(other, cidrRange) { var ref; if (cidrRange === undefined) { ref = other, other = ref[0], cidrRange = ref[1]; } if (other.kind() !== "ipv6") { throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one"); } return matchCIDR(this.parts, other.parts, 16, cidrRange); }; IPv6.prototype.SpecialRanges = { unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128], linkLocal: [new IPv6([65152, 0, 0, 0, 0, 0, 0, 0]), 10], multicast: [new IPv6([65280, 0, 0, 0, 0, 0, 0, 0]), 8], loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128], uniqueLocal: [new IPv6([64512, 0, 0, 0, 0, 0, 0, 0]), 7], ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 65535, 0, 0]), 96], rfc6145: [new IPv6([0, 0, 0, 0, 65535, 0, 0, 0]), 96], rfc6052: [new IPv6([100, 65435, 0, 0, 0, 0, 0, 0]), 96], "6to4": [new IPv6([8194, 0, 0, 0, 0, 0, 0, 0]), 16], teredo: [new IPv6([8193, 0, 0, 0, 0, 0, 0, 0]), 32], reserved: [[new IPv6([8193, 3512, 0, 0, 0, 0, 0, 0]), 32]] }; IPv6.prototype.range = function() { return ipaddr.subnetMatch(this, this.SpecialRanges); }; IPv6.prototype.isIPv4MappedAddress = function() { return this.range() === "ipv4Mapped"; }; IPv6.prototype.toIPv4Address = function() { var high, low, ref; if (!this.isIPv4MappedAddress()) { throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4"); } ref = this.parts.slice(-2), high = ref[0], low = ref[1]; return new ipaddr.IPv4([high >> 8, high & 255, low >> 8, low & 255]); }; IPv6.prototype.prefixLengthFromSubnetMask = function() { var cidr, i, k, part, stop, zeros, zerotable; zerotable = { 0: 16, 32768: 15, 49152: 14, 57344: 13, 61440: 12, 63488: 11, 64512: 10, 65024: 9, 65280: 8, 65408: 7, 65472: 6, 65504: 5, 65520: 4, 65528: 3, 65532: 2, 65534: 1, 65535: 0 }; cidr = 0; stop = false; for (i = k = 7;k >= 0; i = k += -1) { part = this.parts[i]; if (part in zerotable) { zeros = zerotable[part]; if (stop && zeros !== 0) { return null; } if (zeros !== 16) { stop = true; } cidr += zeros; } else { return null; } } return 128 - cidr; }; return IPv6; }(); ipv6Part = "(?:[0-9a-f]+::?)+"; zoneIndex = "%[0-9a-z]{1,}"; ipv6Regexes = { zoneIndex: new RegExp(zoneIndex, "i"), native: new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", "i"), transitional: new RegExp("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)" + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), "i") }; expandIPv6 = function(string4, parts) { var colonCount, lastColon, part, replacement, replacementCount, zoneId; if (string4.indexOf("::") !== string4.lastIndexOf("::")) { return null; } zoneId = (string4.match(ipv6Regexes["zoneIndex"]) || [])[0]; if (zoneId) { zoneId = zoneId.substring(1); string4 = string4.replace(/%.+$/, ""); } colonCount = 0; lastColon = -1; while ((lastColon = string4.indexOf(":", lastColon + 1)) >= 0) { colonCount++; } if (string4.substr(0, 2) === "::") { colonCount--; } if (string4.substr(-2, 2) === "::") { colonCount--; } if (colonCount > parts) { return null; } replacementCount = parts - colonCount; replacement = ":"; while (replacementCount--) { replacement += "0:"; } string4 = string4.replace("::", replacement); if (string4[0] === ":") { string4 = string4.slice(1); } if (string4[string4.length - 1] === ":") { string4 = string4.slice(0, -1); } parts = function() { var k, len, ref, results; ref = string4.split(":"); results = []; for (k = 0, len = ref.length;k < len; k++) { part = ref[k]; results.push(parseInt(part, 16)); } return results; }(); return { parts, zoneId }; }; ipaddr.IPv6.parser = function(string4) { var addr, k, len, match, octet, octets, zoneId; if (ipv6Regexes["native"].test(string4)) { return expandIPv6(string4, 8); } else if (match = string4.match(ipv6Regexes["transitional"])) { zoneId = match[6] || ""; addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6); if (addr.parts) { octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])]; for (k = 0, len = octets.length;k < len; k++) { octet = octets[k]; if (!(0 <= octet && octet <= 255)) { return null; } } addr.parts.push(octets[0] << 8 | octets[1]); addr.parts.push(octets[2] << 8 | octets[3]); return { parts: addr.parts, zoneId: addr.zoneId }; } } return null; }; ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string4) { return this.parser(string4) !== null; }; ipaddr.IPv4.isValid = function(string4) { var e; try { new this(this.parser(string4)); return true; } catch (error1) { e = error1; return false; } }; ipaddr.IPv4.isValidFourPartDecimal = function(string4) { if (ipaddr.IPv4.isValid(string4) && string4.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) { return true; } else { return false; } }; ipaddr.IPv6.isValid = function(string4) { var addr, e; if (typeof string4 === "string" && string4.indexOf(":") === -1) { return false; } try { addr = this.parser(string4); new this(addr.parts, addr.zoneId); return true; } catch (error1) { e = error1; return false; } }; ipaddr.IPv4.parse = function(string4) { var parts; parts = this.parser(string4); if (parts === null) { throw new Error("ipaddr: string is not formatted like ip address"); } return new this(parts); }; ipaddr.IPv6.parse = function(string4) { var addr; addr = this.parser(string4); if (addr.parts === null) { throw new Error("ipaddr: string is not formatted like ip address"); } return new this(addr.parts, addr.zoneId); }; ipaddr.IPv4.parseCIDR = function(string4) { var maskLength, match, parsed; if (match = string4.match(/^(.+)\/(\d+)$/)) { maskLength = parseInt(match[2]); if (maskLength >= 0 && maskLength <= 32) { parsed = [this.parse(match[1]), maskLength]; Object.defineProperty(parsed, "toString", { value: function() { return this.join("/"); } }); return parsed; } } throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range"); }; ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) { var filledOctetCount, j, octets; prefix = parseInt(prefix); if (prefix < 0 || prefix > 32) { throw new Error("ipaddr: invalid IPv4 prefix length"); } octets = [0, 0, 0, 0]; j = 0; filledOctetCount = Math.floor(prefix / 8); while (j < filledOctetCount) { octets[j] = 255; j++; } if (filledOctetCount < 4) { octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - prefix % 8; } return new this(octets); }; ipaddr.IPv4.broadcastAddressFromCIDR = function(string4) { var cidr, error2, i, ipInterfaceOctets, octets, subnetMaskOctets; try { cidr = this.parseCIDR(string4); ipInterfaceOctets = cidr[0].toByteArray(); subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); octets = []; i = 0; while (i < 4) { octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255); i++; } return new this(octets); } catch (error1) { error2 = error1; throw new Error("ipaddr: the address does not have IPv4 CIDR format"); } }; ipaddr.IPv4.networkAddressFromCIDR = function(string4) { var cidr, error2, i, ipInterfaceOctets, octets, subnetMaskOctets; try { cidr = this.parseCIDR(string4); ipInterfaceOctets = cidr[0].toByteArray(); subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray(); octets = []; i = 0; while (i < 4) { octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10)); i++; } return new this(octets); } catch (error1) { error2 = error1; throw new Error("ipaddr: the address does not have IPv4 CIDR format"); } }; ipaddr.IPv6.parseCIDR = function(string4) { var maskLength, match, parsed; if (match = string4.match(/^(.+)\/(\d+)$/)) { maskLength = parseInt(match[2]); if (maskLength >= 0 && maskLength <= 128) { parsed = [this.parse(match[1]), maskLength]; Object.defineProperty(parsed, "toString", { value: function() { return this.join("/"); } }); return parsed; } } throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range"); }; ipaddr.isValid = function(string4) { return ipaddr.IPv6.isValid(string4) || ipaddr.IPv4.isValid(string4); }; ipaddr.parse = function(string4) { if (ipaddr.IPv6.isValid(string4)) { return ipaddr.IPv6.parse(string4); } else if (ipaddr.IPv4.isValid(string4)) { return ipaddr.IPv4.parse(string4); } else { throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format"); } }; ipaddr.parseCIDR = function(string4) { var e; try { return ipaddr.IPv6.parseCIDR(string4); } catch (error1) { e = error1; try { return ipaddr.IPv4.parseCIDR(string4); } catch (error12) { e = error12; throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format"); } } }; ipaddr.fromByteArray = function(bytes) { var length; length = bytes.length; if (length === 4) { return new ipaddr.IPv4(bytes); } else if (length === 16) { return new ipaddr.IPv6(bytes); } else { throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address"); } }; ipaddr.process = function(string4) { var addr; addr = this.parse(string4); if (addr.kind() === "ipv6" && addr.isIPv4MappedAddress()) { return addr.toIPv4Address(); } else { return addr; } }; }).call(exports); }); // node_modules/proxy-addr/index.js var require_proxy_addr = __commonJS((exports, module) => { /*! * proxy-addr * Copyright(c) 2014-2016 Douglas Christopher Wilson * MIT Licensed */ module.exports = proxyaddr; module.exports.all = alladdrs; module.exports.compile = compile; var forwarded = require_forwarded(); var ipaddr = require_ipaddr(); var DIGIT_REGEXP = /^[0-9]+$/; var isip = ipaddr.isValid; var parseip = ipaddr.parse; var IP_RANGES = { linklocal: ["169.254.0.0/16", "fe80::/10"], loopback: ["127.0.0.1/8", "::1/128"], uniquelocal: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fc00::/7"] }; function alladdrs(req, trust) { var addrs = forwarded(req); if (!trust) { return addrs; } if (typeof trust !== "function") { trust = compile(trust); } for (var i = 0;i < addrs.length - 1; i++) { if (trust(addrs[i], i)) continue; addrs.length = i + 1; } return addrs; } function compile(val) { if (!val) { throw new TypeError("argument is required"); } var trust; if (typeof val === "string") { trust = [val]; } else if (Array.isArray(val)) { trust = val.slice(); } else { throw new TypeError("unsupported trust argument"); } for (var i = 0;i < trust.length; i++) { val = trust[i]; if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val)) { continue; } val = IP_RANGES[val]; trust.splice.apply(trust, [i, 1].concat(val)); i += val.length - 1; } return compileTrust(compileRangeSubnets(trust)); } function compileRangeSubnets(arr) { var rangeSubnets = new Array(arr.length); for (var i = 0;i < arr.length; i++) { rangeSubnets[i] = parseipNotation(arr[i]); } return rangeSubnets; } function compileTrust(rangeSubnets) { var len = rangeSubnets.length; return len === 0 ? trustNone : len === 1 ? trustSingle(rangeSubnets[0]) : trustMulti(rangeSubnets); } function parseipNotation(note) { var pos = note.lastIndexOf("/"); var str = pos !== -1 ? note.substring(0, pos) : note; if (!isip(str)) { throw new TypeError("invalid IP address: " + str); } var ip = parseip(str); if (pos === -1 && ip.kind() === "ipv6" && ip.isIPv4MappedAddress()) { ip = ip.toIPv4Address(); } var max = ip.kind() === "ipv6" ? 128 : 32; var range = pos !== -1 ? note.substring(pos + 1, note.length) : null; if (range === null) { range = max; } else if (DIGIT_REGEXP.test(range)) { range = parseInt(range, 10); } else if (ip.kind() === "ipv4" && isip(range)) { range = parseNetmask(range); } else { range = null; } if (range <= 0 || range > max) { throw new TypeError("invalid range on address: " + note); } return [ip, range]; } function parseNetmask(netmask) { var ip = parseip(netmask); var kind = ip.kind(); return kind === "ipv4" ? ip.prefixLengthFromSubnetMask() : null; } function proxyaddr(req, trust) { if (!req) { throw new TypeError("req argument is required"); } if (!trust) { throw new TypeError("trust argument is required"); } var addrs = alladdrs(req, trust); var addr = addrs[addrs.length - 1]; return addr; } function trustNone() { return false; } function trustMulti(subnets) { return function trust(addr) { if (!isip(addr)) return false; var ip = parseip(addr); var ipconv; var kind = ip.kind(); for (var i = 0;i < subnets.length; i++) { var subnet = subnets[i]; var subnetip = subnet[0]; var subnetkind = subnetip.kind(); var subnetrange = subnet[1]; var trusted = ip; if (kind !== subnetkind) { if (subnetkind === "ipv4" && !ip.isIPv4MappedAddress()) { continue; } if (!ipconv) { ipconv = subnetkind === "ipv4" ? ip.toIPv4Address() : ip.toIPv4MappedAddress(); } trusted = ipconv; } if (trusted.match(subnetip, subnetrange)) { return true; } } return false; }; } function trustSingle(subnet) { var subnetip = subnet[0]; var subnetkind = subnetip.kind(); var subnetisipv4 = subnetkind === "ipv4"; var subnetrange = subnet[1]; return function trust(addr) { if (!isip(addr)) return false; var ip = parseip(addr); var kind = ip.kind(); if (kind !== subnetkind) { if (subnetisipv4 && !ip.isIPv4MappedAddress()) { return false; } ip = subnetisipv4 ? ip.toIPv4Address() : ip.toIPv4MappedAddress(); } return ip.match(subnetip, subnetrange); }; } }); // node_modules/express/lib/utils.js var require_utils3 = __commonJS((exports) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var Buffer2 = require_safe_buffer().Buffer; var contentDisposition = require_content_disposition(); var contentType = require_content_type(); var deprecate = require_depd()("express"); var flatten = require_array_flatten(); var mime = require_send().mime; var etag = require_etag(); var proxyaddr = require_proxy_addr(); var qs = require_lib2(); var querystring = __require("querystring"); exports.etag = createETagGenerator({ weak: false }); exports.wetag = createETagGenerator({ weak: true }); exports.isAbsolute = function(path8) { if (path8[0] === "/") return true; if (path8[1] === ":" && (path8[2] === "\\" || path8[2] === "/")) return true; if (path8.substring(0, 2) === "\\\\") return true; }; exports.flatten = deprecate.function(flatten, "utils.flatten: use array-flatten npm module instead"); exports.normalizeType = function(type) { return ~type.indexOf("/") ? acceptParams(type) : { value: mime.lookup(type), params: {} }; }; exports.normalizeTypes = function(types) { var ret = []; for (var i = 0;i < types.length; ++i) { ret.push(exports.normalizeType(types[i])); } return ret; }; exports.contentDisposition = deprecate.function(contentDisposition, "utils.contentDisposition: use content-disposition npm module instead"); function acceptParams(str) { var parts = str.split(/ *; */); var ret = { value: parts[0], quality: 1, params: {} }; for (var i = 1;i < parts.length; ++i) { var pms = parts[i].split(/ *= */); if (pms[0] === "q") { ret.quality = parseFloat(pms[1]); } else { ret.params[pms[0]] = pms[1]; } } return ret; } exports.compileETag = function(val) { var fn; if (typeof val === "function") { return val; } switch (val) { case true: case "weak": fn = exports.wetag; break; case false: break; case "strong": fn = exports.etag; break; default: throw new TypeError("unknown value for etag function: " + val); } return fn; }; exports.compileQueryParser = function compileQueryParser(val) { var fn; if (typeof val === "function") { return val; } switch (val) { case true: case "simple": fn = querystring.parse; break; case false: fn = newObject; break; case "extended": fn = parseExtendedQueryString; break; default: throw new TypeError("unknown value for query parser function: " + val); } return fn; }; exports.compileTrust = function(val) { if (typeof val === "function") return val; if (val === true) { return function() { return true; }; } if (typeof val === "number") { return function(a, i) { return i < val; }; } if (typeof val === "string") { val = val.split(",").map(function(v) { return v.trim(); }); } return proxyaddr.compile(val || []); }; exports.setCharset = function setCharset(type, charset) { if (!type || !charset) { return type; } var parsed = contentType.parse(type); parsed.parameters.charset = charset; return contentType.format(parsed); }; function createETagGenerator(options) { return function generateETag(body, encoding) { var buf = !Buffer2.isBuffer(body) ? Buffer2.from(body, encoding) : body; return etag(buf, options); }; } function parseExtendedQueryString(str) { return qs.parse(str, { allowPrototypes: true }); } function newObject() { return {}; } }); // node_modules/express/lib/application.js var require_application = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var finalhandler = require_finalhandler(); var Router = require_router(); var methods = require_methods(); var middleware = require_init(); var query = require_query(); var debug = require_src()("express:application"); var View = require_view(); var http = __require("http"); var compileETag = require_utils3().compileETag; var compileQueryParser = require_utils3().compileQueryParser; var compileTrust = require_utils3().compileTrust; var deprecate = require_depd()("express"); var flatten = require_array_flatten(); var merge2 = require_utils_merge(); var resolve = __require("path").resolve; var setPrototypeOf = require_setprototypeof(); var hasOwnProperty = Object.prototype.hasOwnProperty; var slice = Array.prototype.slice; var app = exports = module.exports = {}; var trustProxyDefaultSymbol = "@@symbol:trust_proxy_default"; app.init = function init() { this.cache = {}; this.engines = {}; this.settings = {}; this.defaultConfiguration(); }; app.defaultConfiguration = function defaultConfiguration() { var env = "development"; this.enable("x-powered-by"); this.set("etag", "weak"); this.set("env", env); this.set("query parser", "extended"); this.set("subdomain offset", 2); this.set("trust proxy", false); Object.defineProperty(this.settings, trustProxyDefaultSymbol, { configurable: true, value: true }); debug("booting in %s mode", env); this.on("mount", function onmount(parent) { if (this.settings[trustProxyDefaultSymbol] === true && typeof parent.settings["trust proxy fn"] === "function") { delete this.settings["trust proxy"]; delete this.settings["trust proxy fn"]; } setPrototypeOf(this.request, parent.request); setPrototypeOf(this.response, parent.response); setPrototypeOf(this.engines, parent.engines); setPrototypeOf(this.settings, parent.settings); }); this.locals = Object.create(null); this.mountpath = "/"; this.locals.settings = this.settings; this.set("view", View); this.set("views", resolve("views")); this.set("jsonp callback name", "callback"); if (env === "production") { this.enable("view cache"); } Object.defineProperty(this, "router", { get: function() { throw new Error(`'app.router' is deprecated! Please see the 3.x to 4.x migration guide for details on how to update your app.`); } }); }; app.lazyrouter = function lazyrouter() { if (!this._router) { this._router = new Router({ caseSensitive: this.enabled("case sensitive routing"), strict: this.enabled("strict routing") }); this._router.use(query(this.get("query parser fn"))); this._router.use(middleware.init(this)); } }; app.handle = function handle(req, res, callback) { var router = this._router; var done = callback || finalhandler(req, res, { env: this.get("env"), onerror: logerror.bind(this) }); if (!router) { debug("no routes defined on app"); done(); return; } router.handle(req, res, done); }; app.use = function use(fn) { var offset = 0; var path8 = "/"; if (typeof fn !== "function") { var arg = fn; while (Array.isArray(arg) && arg.length !== 0) { arg = arg[0]; } if (typeof arg !== "function") { offset = 1; path8 = fn; } } var fns = flatten(slice.call(arguments, offset)); if (fns.length === 0) { throw new TypeError("app.use() requires a middleware function"); } this.lazyrouter(); var router = this._router; fns.forEach(function(fn2) { if (!fn2 || !fn2.handle || !fn2.set) { return router.use(path8, fn2); } debug(".use app under %s", path8); fn2.mountpath = path8; fn2.parent = this; router.use(path8, function mounted_app(req, res, next) { var orig = req.app; fn2.handle(req, res, function(err) { setPrototypeOf(req, orig.request); setPrototypeOf(res, orig.response); next(err); }); }); fn2.emit("mount", this); }, this); return this; }; app.route = function route(path8) { this.lazyrouter(); return this._router.route(path8); }; app.engine = function engine(ext, fn) { if (typeof fn !== "function") { throw new Error("callback function required"); } var extension = ext[0] !== "." ? "." + ext : ext; this.engines[extension] = fn; return this; }; app.param = function param(name, fn) { this.lazyrouter(); if (Array.isArray(name)) { for (var i = 0;i < name.length; i++) { this.param(name[i], fn); } return this; } this._router.param(name, fn); return this; }; app.set = function set2(setting, val) { if (arguments.length === 1) { var settings = this.settings; while (settings && settings !== Object.prototype) { if (hasOwnProperty.call(settings, setting)) { return settings[setting]; } settings = Object.getPrototypeOf(settings); } return; } debug('set "%s" to %o', setting, val); this.settings[setting] = val; switch (setting) { case "etag": this.set("etag fn", compileETag(val)); break; case "query parser": this.set("query parser fn", compileQueryParser(val)); break; case "trust proxy": this.set("trust proxy fn", compileTrust(val)); Object.defineProperty(this.settings, trustProxyDefaultSymbol, { configurable: true, value: false }); break; } return this; }; app.path = function path8() { return this.parent ? this.parent.path() + this.mountpath : ""; }; app.enabled = function enabled(setting) { return Boolean(this.set(setting)); }; app.disabled = function disabled(setting) { return !this.set(setting); }; app.enable = function enable(setting) { return this.set(setting, true); }; app.disable = function disable(setting) { return this.set(setting, false); }; methods.forEach(function(method) { app[method] = function(path8) { if (method === "get" && arguments.length === 1) { return this.set(path8); } this.lazyrouter(); var route = this._router.route(path8); route[method].apply(route, slice.call(arguments, 1)); return this; }; }); app.all = function all(path8) { this.lazyrouter(); var route = this._router.route(path8); var args = slice.call(arguments, 1); for (var i = 0;i < methods.length; i++) { route[methods[i]].apply(route, args); } return this; }; app.del = deprecate.function(app.delete, "app.del: Use app.delete instead"); app.render = function render(name, options, callback) { var cache = this.cache; var done = callback; var engines = this.engines; var opts = options; var renderOptions = {}; var view; if (typeof options === "function") { done = options; opts = {}; } merge2(renderOptions, this.locals); if (opts._locals) { merge2(renderOptions, opts._locals); } merge2(renderOptions, opts); if (renderOptions.cache == null) { renderOptions.cache = this.enabled("view cache"); } if (renderOptions.cache) { view = cache[name]; } if (!view) { var View2 = this.get("view"); view = new View2(name, { defaultEngine: this.get("view engine"), root: this.get("views"), engines }); if (!view.path) { var dirs = Array.isArray(view.root) && view.root.length > 1 ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' : 'directory "' + view.root + '"'; var err = new Error('Failed to lookup view "' + name + '" in views ' + dirs); err.view = view; return done(err); } if (renderOptions.cache) { cache[name] = view; } } tryRender(view, renderOptions, done); }; app.listen = function listen() { var server = http.createServer(this); return server.listen.apply(server, arguments); }; function logerror(err) { if (this.get("env") !== "test") console.error(err.stack || err.toString()); } function tryRender(view, options, callback) { try { view.render(options, callback); } catch (err) { callback(err); } } }); // node_modules/negotiator/lib/charset.js var require_charset = __commonJS((exports, module) => { module.exports = preferredCharsets; module.exports.preferredCharsets = preferredCharsets; var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; function parseAcceptCharset(accept) { var accepts = accept.split(","); for (var i = 0, j = 0;i < accepts.length; i++) { var charset = parseCharset(accepts[i].trim(), i); if (charset) { accepts[j++] = charset; } } accepts.length = j; return accepts; } function parseCharset(str, i) { var match = simpleCharsetRegExp.exec(str); if (!match) return null; var charset = match[1]; var q = 1; if (match[2]) { var params = match[2].split(";"); for (var j = 0;j < params.length; j++) { var p = params[j].trim().split("="); if (p[0] === "q") { q = parseFloat(p[1]); break; } } } return { charset, q, i }; } function getCharsetPriority(charset, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0;i < accepted.length; i++) { var spec = specify(charset, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(charset, spec, index) { var s = 0; if (spec.charset.toLowerCase() === charset.toLowerCase()) { s |= 1; } else if (spec.charset !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredCharsets(accept, provided) { var accepts = parseAcceptCharset(accept === undefined ? "*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset); } var priorities = provided.map(function getPriority(type, index) { return getCharsetPriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullCharset(spec) { return spec.charset; } function isQuality(spec) { return spec.q > 0; } }); // node_modules/negotiator/lib/encoding.js var require_encoding = __commonJS((exports, module) => { module.exports = preferredEncodings; module.exports.preferredEncodings = preferredEncodings; var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; function parseAcceptEncoding(accept) { var accepts = accept.split(","); var hasIdentity = false; var minQuality = 1; for (var i = 0, j = 0;i < accepts.length; i++) { var encoding = parseEncoding(accepts[i].trim(), i); if (encoding) { accepts[j++] = encoding; hasIdentity = hasIdentity || specify("identity", encoding); minQuality = Math.min(minQuality, encoding.q || 1); } } if (!hasIdentity) { accepts[j++] = { encoding: "identity", q: minQuality, i }; } accepts.length = j; return accepts; } function parseEncoding(str, i) { var match = simpleEncodingRegExp.exec(str); if (!match) return null; var encoding = match[1]; var q = 1; if (match[2]) { var params = match[2].split(";"); for (var j = 0;j < params.length; j++) { var p = params[j].trim().split("="); if (p[0] === "q") { q = parseFloat(p[1]); break; } } } return { encoding, q, i }; } function getEncodingPriority(encoding, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0;i < accepted.length; i++) { var spec = specify(encoding, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(encoding, spec, index) { var s = 0; if (spec.encoding.toLowerCase() === encoding.toLowerCase()) { s |= 1; } else if (spec.encoding !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredEncodings(accept, provided) { var accepts = parseAcceptEncoding(accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullEncoding); } var priorities = provided.map(function getPriority(type, index) { return getEncodingPriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullEncoding(spec) { return spec.encoding; } function isQuality(spec) { return spec.q > 0; } }); // node_modules/negotiator/lib/language.js var require_language = __commonJS((exports, module) => { module.exports = preferredLanguages; module.exports.preferredLanguages = preferredLanguages; var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; function parseAcceptLanguage(accept) { var accepts = accept.split(","); for (var i = 0, j = 0;i < accepts.length; i++) { var language = parseLanguage(accepts[i].trim(), i); if (language) { accepts[j++] = language; } } accepts.length = j; return accepts; } function parseLanguage(str, i) { var match = simpleLanguageRegExp.exec(str); if (!match) return null; var prefix = match[1]; var suffix = match[2]; var full = prefix; if (suffix) full += "-" + suffix; var q = 1; if (match[3]) { var params = match[3].split(";"); for (var j = 0;j < params.length; j++) { var p = params[j].split("="); if (p[0] === "q") q = parseFloat(p[1]); } } return { prefix, suffix, q, i, full }; } function getLanguagePriority(language, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0;i < accepted.length; i++) { var spec = specify(language, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(language, spec, index) { var p = parseLanguage(language); if (!p) return null; var s = 0; if (spec.full.toLowerCase() === p.full.toLowerCase()) { s |= 4; } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { s |= 2; } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { s |= 1; } else if (spec.full !== "*") { return null; } return { i: index, o: spec.i, q: spec.q, s }; } function preferredLanguages(accept, provided) { var accepts = parseAcceptLanguage(accept === undefined ? "*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage); } var priorities = provided.map(function getPriority(type, index) { return getLanguagePriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullLanguage(spec) { return spec.full; } function isQuality(spec) { return spec.q > 0; } }); // node_modules/negotiator/lib/mediaType.js var require_mediaType = __commonJS((exports, module) => { module.exports = preferredMediaTypes; module.exports.preferredMediaTypes = preferredMediaTypes; var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; function parseAccept(accept) { var accepts = splitMediaTypes(accept); for (var i = 0, j = 0;i < accepts.length; i++) { var mediaType = parseMediaType(accepts[i].trim(), i); if (mediaType) { accepts[j++] = mediaType; } } accepts.length = j; return accepts; } function parseMediaType(str, i) { var match = simpleMediaTypeRegExp.exec(str); if (!match) return null; var params = Object.create(null); var q = 1; var subtype = match[2]; var type = match[1]; if (match[3]) { var kvps = splitParameters(match[3]).map(splitKeyValuePair); for (var j = 0;j < kvps.length; j++) { var pair = kvps[j]; var key = pair[0].toLowerCase(); var val = pair[1]; var value = val && val[0] === '"' && val[val.length - 1] === '"' ? val.substr(1, val.length - 2) : val; if (key === "q") { q = parseFloat(value); break; } params[key] = value; } } return { type, subtype, params, q, i }; } function getMediaTypePriority(type, accepted, index) { var priority = { o: -1, q: 0, s: 0 }; for (var i = 0;i < accepted.length; i++) { var spec = specify(type, accepted[i], index); if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { priority = spec; } } return priority; } function specify(type, spec, index) { var p = parseMediaType(type); var s = 0; if (!p) { return null; } if (spec.type.toLowerCase() == p.type.toLowerCase()) { s |= 4; } else if (spec.type != "*") { return null; } if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { s |= 2; } else if (spec.subtype != "*") { return null; } var keys = Object.keys(spec.params); if (keys.length > 0) { if (keys.every(function(k) { return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase(); })) { s |= 1; } else { return null; } } return { i: index, o: spec.i, q: spec.q, s }; } function preferredMediaTypes(accept, provided) { var accepts = parseAccept(accept === undefined ? "*/*" : accept || ""); if (!provided) { return accepts.filter(isQuality).sort(compareSpecs).map(getFullType); } var priorities = provided.map(function getPriority(type, index) { return getMediaTypePriority(type, accepts, index); }); return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { return provided[priorities.indexOf(priority)]; }); } function compareSpecs(a, b) { return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0; } function getFullType(spec) { return spec.type + "/" + spec.subtype; } function isQuality(spec) { return spec.q > 0; } function quoteCount(string4) { var count = 0; var index = 0; while ((index = string4.indexOf('"', index)) !== -1) { count++; index++; } return count; } function splitKeyValuePair(str) { var index = str.indexOf("="); var key; var val; if (index === -1) { key = str; } else { key = str.substr(0, index); val = str.substr(index + 1); } return [key, val]; } function splitMediaTypes(accept) { var accepts = accept.split(","); for (var i = 1, j = 0;i < accepts.length; i++) { if (quoteCount(accepts[j]) % 2 == 0) { accepts[++j] = accepts[i]; } else { accepts[j] += "," + accepts[i]; } } accepts.length = j + 1; return accepts; } function splitParameters(str) { var parameters = str.split(";"); for (var i = 1, j = 0;i < parameters.length; i++) { if (quoteCount(parameters[j]) % 2 == 0) { parameters[++j] = parameters[i]; } else { parameters[j] += ";" + parameters[i]; } } parameters.length = j + 1; for (var i = 0;i < parameters.length; i++) { parameters[i] = parameters[i].trim(); } return parameters; } }); // node_modules/negotiator/index.js var require_negotiator = __commonJS((exports, module) => { /*! * negotiator * Copyright(c) 2012 Federico Romero * Copyright(c) 2012-2014 Isaac Z. Schlueter * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ var preferredCharsets = require_charset(); var preferredEncodings = require_encoding(); var preferredLanguages = require_language(); var preferredMediaTypes = require_mediaType(); module.exports = Negotiator; module.exports.Negotiator = Negotiator; function Negotiator(request) { if (!(this instanceof Negotiator)) { return new Negotiator(request); } this.request = request; } Negotiator.prototype.charset = function charset(available) { var set2 = this.charsets(available); return set2 && set2[0]; }; Negotiator.prototype.charsets = function charsets(available) { return preferredCharsets(this.request.headers["accept-charset"], available); }; Negotiator.prototype.encoding = function encoding(available) { var set2 = this.encodings(available); return set2 && set2[0]; }; Negotiator.prototype.encodings = function encodings(available) { return preferredEncodings(this.request.headers["accept-encoding"], available); }; Negotiator.prototype.language = function language(available) { var set2 = this.languages(available); return set2 && set2[0]; }; Negotiator.prototype.languages = function languages(available) { return preferredLanguages(this.request.headers["accept-language"], available); }; Negotiator.prototype.mediaType = function mediaType(available) { var set2 = this.mediaTypes(available); return set2 && set2[0]; }; Negotiator.prototype.mediaTypes = function mediaTypes(available) { return preferredMediaTypes(this.request.headers.accept, available); }; Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; }); // node_modules/accepts/index.js var require_accepts = __commonJS((exports, module) => { /*! * accepts * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ var Negotiator = require_negotiator(); var mime = require_mime_types(); module.exports = Accepts; function Accepts(req) { if (!(this instanceof Accepts)) { return new Accepts(req); } this.headers = req.headers; this.negotiator = new Negotiator(req); } Accepts.prototype.type = Accepts.prototype.types = function(types_) { var types = types_; if (types && !Array.isArray(types)) { types = new Array(arguments.length); for (var i = 0;i < types.length; i++) { types[i] = arguments[i]; } } if (!types || types.length === 0) { return this.negotiator.mediaTypes(); } if (!this.headers.accept) { return types[0]; } var mimes = types.map(extToMime); var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)); var first = accepts[0]; return first ? types[mimes.indexOf(first)] : false; }; Accepts.prototype.encoding = Accepts.prototype.encodings = function(encodings_) { var encodings = encodings_; if (encodings && !Array.isArray(encodings)) { encodings = new Array(arguments.length); for (var i = 0;i < encodings.length; i++) { encodings[i] = arguments[i]; } } if (!encodings || encodings.length === 0) { return this.negotiator.encodings(); } return this.negotiator.encodings(encodings)[0] || false; }; Accepts.prototype.charset = Accepts.prototype.charsets = function(charsets_) { var charsets = charsets_; if (charsets && !Array.isArray(charsets)) { charsets = new Array(arguments.length); for (var i = 0;i < charsets.length; i++) { charsets[i] = arguments[i]; } } if (!charsets || charsets.length === 0) { return this.negotiator.charsets(); } return this.negotiator.charsets(charsets)[0] || false; }; Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function(languages_) { var languages = languages_; if (languages && !Array.isArray(languages)) { languages = new Array(arguments.length); for (var i = 0;i < languages.length; i++) { languages[i] = arguments[i]; } } if (!languages || languages.length === 0) { return this.negotiator.languages(); } return this.negotiator.languages(languages)[0] || false; }; function extToMime(type) { return type.indexOf("/") === -1 ? mime.lookup(type) : type; } function validMime(type) { return typeof type === "string"; } }); // node_modules/express/lib/request.js var require_request = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var accepts = require_accepts(); var deprecate = require_depd()("express"); var isIP = __require("net").isIP; var typeis = require_type_is(); var http = __require("http"); var fresh = require_fresh(); var parseRange = require_range_parser(); var parse5 = require_parseurl(); var proxyaddr = require_proxy_addr(); var req = Object.create(http.IncomingMessage.prototype); module.exports = req; req.get = req.header = function header(name) { if (!name) { throw new TypeError("name argument is required to req.get"); } if (typeof name !== "string") { throw new TypeError("name must be a string to req.get"); } var lc = name.toLowerCase(); switch (lc) { case "referer": case "referrer": return this.headers.referrer || this.headers.referer; default: return this.headers[lc]; } }; req.accepts = function() { var accept = accepts(this); return accept.types.apply(accept, arguments); }; req.acceptsEncodings = function() { var accept = accepts(this); return accept.encodings.apply(accept, arguments); }; req.acceptsEncoding = deprecate.function(req.acceptsEncodings, "req.acceptsEncoding: Use acceptsEncodings instead"); req.acceptsCharsets = function() { var accept = accepts(this); return accept.charsets.apply(accept, arguments); }; req.acceptsCharset = deprecate.function(req.acceptsCharsets, "req.acceptsCharset: Use acceptsCharsets instead"); req.acceptsLanguages = function() { var accept = accepts(this); return accept.languages.apply(accept, arguments); }; req.acceptsLanguage = deprecate.function(req.acceptsLanguages, "req.acceptsLanguage: Use acceptsLanguages instead"); req.range = function range(size, options) { var range2 = this.get("Range"); if (!range2) return; return parseRange(size, range2, options); }; req.param = function param(name, defaultValue) { var params = this.params || {}; var body = this.body || {}; var query = this.query || {}; var args = arguments.length === 1 ? "name" : "name, default"; deprecate("req.param(" + args + "): Use req.params, req.body, or req.query instead"); if (params[name] != null && params.hasOwnProperty(name)) return params[name]; if (body[name] != null) return body[name]; if (query[name] != null) return query[name]; return defaultValue; }; req.is = function is(types) { var arr = types; if (!Array.isArray(types)) { arr = new Array(arguments.length); for (var i = 0;i < arr.length; i++) { arr[i] = arguments[i]; } } return typeis(this, arr); }; defineGetter(req, "protocol", function protocol() { var proto = this.connection.encrypted ? "https" : "http"; var trust = this.app.get("trust proxy fn"); if (!trust(this.connection.remoteAddress, 0)) { return proto; } var header = this.get("X-Forwarded-Proto") || proto; var index = header.indexOf(","); return index !== -1 ? header.substring(0, index).trim() : header.trim(); }); defineGetter(req, "secure", function secure() { return this.protocol === "https"; }); defineGetter(req, "ip", function ip() { var trust = this.app.get("trust proxy fn"); return proxyaddr(this, trust); }); defineGetter(req, "ips", function ips() { var trust = this.app.get("trust proxy fn"); var addrs = proxyaddr.all(this, trust); addrs.reverse().pop(); return addrs; }); defineGetter(req, "subdomains", function subdomains() { var hostname = this.hostname; if (!hostname) return []; var offset = this.app.get("subdomain offset"); var subdomains2 = !isIP(hostname) ? hostname.split(".").reverse() : [hostname]; return subdomains2.slice(offset); }); defineGetter(req, "path", function path8() { return parse5(this).pathname; }); defineGetter(req, "hostname", function hostname() { var trust = this.app.get("trust proxy fn"); var host = this.get("X-Forwarded-Host"); if (!host || !trust(this.connection.remoteAddress, 0)) { host = this.get("Host"); } else if (host.indexOf(",") !== -1) { host = host.substring(0, host.indexOf(",")).trimRight(); } if (!host) return; var offset = host[0] === "[" ? host.indexOf("]") + 1 : 0; var index = host.indexOf(":", offset); return index !== -1 ? host.substring(0, index) : host; }); defineGetter(req, "host", deprecate.function(function host() { return this.hostname; }, "req.host: Use req.hostname instead")); defineGetter(req, "fresh", function() { var method = this.method; var res = this.res; var status = res.statusCode; if (method !== "GET" && method !== "HEAD") return false; if (status >= 200 && status < 300 || status === 304) { return fresh(this.headers, { etag: res.get("ETag"), "last-modified": res.get("Last-Modified") }); } return false; }); defineGetter(req, "stale", function stale() { return !this.fresh; }); defineGetter(req, "xhr", function xhr() { var val = this.get("X-Requested-With") || ""; return val.toLowerCase() === "xmlhttprequest"; }); function defineGetter(obj, name, getter) { Object.defineProperty(obj, name, { configurable: true, enumerable: true, get: getter }); } }); // node_modules/cookie-signature/index.js var require_cookie_signature = __commonJS((exports) => { var crypto = __require("crypto"); exports.sign = function(val, secret) { if (typeof val !== "string") throw new TypeError("Cookie value must be provided as a string."); if (secret == null) throw new TypeError("Secret key must be provided."); return val + "." + crypto.createHmac("sha256", secret).update(val).digest("base64").replace(/\=+$/, ""); }; exports.unsign = function(val, secret) { if (typeof val !== "string") throw new TypeError("Signed cookie string must be provided."); if (secret == null) throw new TypeError("Secret key must be provided."); var str = val.slice(0, val.lastIndexOf(".")), mac2 = exports.sign(str, secret); return sha1(mac2) == sha1(val) ? str : false; }; function sha1(str) { return crypto.createHash("sha1").update(str).digest("hex"); } }); // node_modules/cookie/index.js var require_cookie = __commonJS((exports) => { /*! * cookie * Copyright(c) 2012-2014 Roman Shtylman * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ exports.parse = parse5; exports.serialize = serialize; var __toString = Object.prototype.toString; var __hasOwnProperty = Object.prototype.hasOwnProperty; var cookieNameRegExp = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; var cookieValueRegExp = /^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/; var domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i; var pathValueRegExp = /^[\u0020-\u003A\u003D-\u007E]*$/; function parse5(str, opt) { if (typeof str !== "string") { throw new TypeError("argument str must be a string"); } var obj = {}; var len = str.length; if (len < 2) return obj; var dec = opt && opt.decode || decode3; var index = 0; var eqIdx = 0; var endIdx = 0; do { eqIdx = str.indexOf("=", index); if (eqIdx === -1) break; endIdx = str.indexOf(";", index); if (endIdx === -1) { endIdx = len; } else if (eqIdx > endIdx) { index = str.lastIndexOf(";", eqIdx - 1) + 1; continue; } var keyStartIdx = startIndex(str, index, eqIdx); var keyEndIdx = endIndex(str, eqIdx, keyStartIdx); var key = str.slice(keyStartIdx, keyEndIdx); if (!__hasOwnProperty.call(obj, key)) { var valStartIdx = startIndex(str, eqIdx + 1, endIdx); var valEndIdx = endIndex(str, endIdx, valStartIdx); if (str.charCodeAt(valStartIdx) === 34 && str.charCodeAt(valEndIdx - 1) === 34) { valStartIdx++; valEndIdx--; } var val = str.slice(valStartIdx, valEndIdx); obj[key] = tryDecode(val, dec); } index = endIdx + 1; } while (index < len); return obj; } function startIndex(str, index, max) { do { var code = str.charCodeAt(index); if (code !== 32 && code !== 9) return index; } while (++index < max); return max; } function endIndex(str, index, min) { while (index > min) { var code = str.charCodeAt(--index); if (code !== 32 && code !== 9) return index + 1; } return min; } function serialize(name, val, opt) { var enc = opt && opt.encode || encodeURIComponent; if (typeof enc !== "function") { throw new TypeError("option encode is invalid"); } if (!cookieNameRegExp.test(name)) { throw new TypeError("argument name is invalid"); } var value = enc(val); if (!cookieValueRegExp.test(value)) { throw new TypeError("argument val is invalid"); } var str = name + "=" + value; if (!opt) return str; if (opt.maxAge != null) { var maxAge = Math.floor(opt.maxAge); if (!isFinite(maxAge)) { throw new TypeError("option maxAge is invalid"); } str += "; Max-Age=" + maxAge; } if (opt.domain) { if (!domainValueRegExp.test(opt.domain)) { throw new TypeError("option domain is invalid"); } str += "; Domain=" + opt.domain; } if (opt.path) { if (!pathValueRegExp.test(opt.path)) { throw new TypeError("option path is invalid"); } str += "; Path=" + opt.path; } if (opt.expires) { var expires = opt.expires; if (!isDate(expires) || isNaN(expires.valueOf())) { throw new TypeError("option expires is invalid"); } str += "; Expires=" + expires.toUTCString(); } if (opt.httpOnly) { str += "; HttpOnly"; } if (opt.secure) { str += "; Secure"; } if (opt.partitioned) { str += "; Partitioned"; } if (opt.priority) { var priority = typeof opt.priority === "string" ? opt.priority.toLowerCase() : opt.priority; switch (priority) { case "low": str += "; Priority=Low"; break; case "medium": str += "; Priority=Medium"; break; case "high": str += "; Priority=High"; break; default: throw new TypeError("option priority is invalid"); } } if (opt.sameSite) { var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite; switch (sameSite) { case true: str += "; SameSite=Strict"; break; case "lax": str += "; SameSite=Lax"; break; case "strict": str += "; SameSite=Strict"; break; case "none": str += "; SameSite=None"; break; default: throw new TypeError("option sameSite is invalid"); } } return str; } function decode3(str) { return str.indexOf("%") !== -1 ? decodeURIComponent(str) : str; } function isDate(val) { return __toString.call(val) === "[object Date]"; } function tryDecode(str, decode4) { try { return decode4(str); } catch (e) { return str; } } }); // node_modules/vary/index.js var require_vary = __commonJS((exports, module) => { /*! * vary * Copyright(c) 2014-2017 Douglas Christopher Wilson * MIT Licensed */ module.exports = vary; module.exports.append = append; var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; function append(header, field) { if (typeof header !== "string") { throw new TypeError("header argument is required"); } if (!field) { throw new TypeError("field argument is required"); } var fields = !Array.isArray(field) ? parse5(String(field)) : field; for (var j = 0;j < fields.length; j++) { if (!FIELD_NAME_REGEXP.test(fields[j])) { throw new TypeError("field argument contains an invalid header name"); } } if (header === "*") { return header; } var val = header; var vals = parse5(header.toLowerCase()); if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) { return "*"; } for (var i = 0;i < fields.length; i++) { var fld = fields[i].toLowerCase(); if (vals.indexOf(fld) === -1) { vals.push(fld); val = val ? val + ", " + fields[i] : fields[i]; } } return val; } function parse5(header) { var end = 0; var list = []; var start = 0; for (var i = 0, len = header.length;i < len; i++) { switch (header.charCodeAt(i)) { case 32: if (start === end) { start = end = i + 1; } break; case 44: list.push(header.substring(start, end)); start = end = i + 1; break; default: end = i + 1; break; } } list.push(header.substring(start, end)); return list; } function vary(res, field) { if (!res || !res.getHeader || !res.setHeader) { throw new TypeError("res argument is required"); } var val = res.getHeader("Vary") || ""; var header = Array.isArray(val) ? val.join(", ") : String(val); if (val = append(header, field)) { res.setHeader("Vary", val); } } }); // node_modules/express/lib/response.js var require_response = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var Buffer2 = require_safe_buffer().Buffer; var contentDisposition = require_content_disposition(); var createError = require_http_errors(); var deprecate = require_depd()("express"); var encodeUrl = require_encodeurl(); var escapeHtml = require_escape_html(); var http = __require("http"); var isAbsolute = require_utils3().isAbsolute; var onFinished = require_on_finished(); var path8 = __require("path"); var statuses = require_statuses(); var merge2 = require_utils_merge(); var sign = require_cookie_signature().sign; var normalizeType = require_utils3().normalizeType; var normalizeTypes = require_utils3().normalizeTypes; var setCharset = require_utils3().setCharset; var cookie = require_cookie(); var send = require_send(); var extname = path8.extname; var mime = send.mime; var resolve = path8.resolve; var vary = require_vary(); var res = Object.create(http.ServerResponse.prototype); module.exports = res; var charsetRegExp = /;\s*charset\s*=/; res.status = function status(code) { if ((typeof code === "string" || Math.floor(code) !== code) && code > 99 && code < 1000) { deprecate("res.status(" + JSON.stringify(code) + "): use res.status(" + Math.floor(code) + ") instead"); } this.statusCode = code; return this; }; res.links = function(links) { var link = this.get("Link") || ""; if (link) link += ", "; return this.set("Link", link + Object.keys(links).map(function(rel) { return "<" + links[rel] + '>; rel="' + rel + '"'; }).join(", ")); }; res.send = function send2(body) { var chunk = body; var encoding; var req = this.req; var type; var app = this.app; if (arguments.length === 2) { if (typeof arguments[0] !== "number" && typeof arguments[1] === "number") { deprecate("res.send(body, status): Use res.status(status).send(body) instead"); this.statusCode = arguments[1]; } else { deprecate("res.send(status, body): Use res.status(status).send(body) instead"); this.statusCode = arguments[0]; chunk = arguments[1]; } } if (typeof chunk === "number" && arguments.length === 1) { if (!this.get("Content-Type")) { this.type("txt"); } deprecate("res.send(status): Use res.sendStatus(status) instead"); this.statusCode = chunk; chunk = statuses.message[chunk]; } switch (typeof chunk) { case "string": if (!this.get("Content-Type")) { this.type("html"); } break; case "boolean": case "number": case "object": if (chunk === null) { chunk = ""; } else if (Buffer2.isBuffer(chunk)) { if (!this.get("Content-Type")) { this.type("bin"); } } else { return this.json(chunk); } break; } if (typeof chunk === "string") { encoding = "utf8"; type = this.get("Content-Type"); if (typeof type === "string") { this.set("Content-Type", setCharset(type, "utf-8")); } } var etagFn = app.get("etag fn"); var generateETag = !this.get("ETag") && typeof etagFn === "function"; var len; if (chunk !== undefined) { if (Buffer2.isBuffer(chunk)) { len = chunk.length; } else if (!generateETag && chunk.length < 1000) { len = Buffer2.byteLength(chunk, encoding); } else { chunk = Buffer2.from(chunk, encoding); encoding = undefined; len = chunk.length; } this.set("Content-Length", len); } var etag; if (generateETag && len !== undefined) { if (etag = etagFn(chunk, encoding)) { this.set("ETag", etag); } } if (req.fresh) this.statusCode = 304; if (this.statusCode === 204 || this.statusCode === 304) { this.removeHeader("Content-Type"); this.removeHeader("Content-Length"); this.removeHeader("Transfer-Encoding"); chunk = ""; } if (this.statusCode === 205) { this.set("Content-Length", "0"); this.removeHeader("Transfer-Encoding"); chunk = ""; } if (req.method === "HEAD") { this.end(); } else { this.end(chunk, encoding); } return this; }; res.json = function json(obj) { var val = obj; if (arguments.length === 2) { if (typeof arguments[1] === "number") { deprecate("res.json(obj, status): Use res.status(status).json(obj) instead"); this.statusCode = arguments[1]; } else { deprecate("res.json(status, obj): Use res.status(status).json(obj) instead"); this.statusCode = arguments[0]; val = arguments[1]; } } var app = this.app; var escape2 = app.get("json escape"); var replacer = app.get("json replacer"); var spaces = app.get("json spaces"); var body = stringify(val, replacer, spaces, escape2); if (!this.get("Content-Type")) { this.set("Content-Type", "application/json"); } return this.send(body); }; res.jsonp = function jsonp(obj) { var val = obj; if (arguments.length === 2) { if (typeof arguments[1] === "number") { deprecate("res.jsonp(obj, status): Use res.status(status).jsonp(obj) instead"); this.statusCode = arguments[1]; } else { deprecate("res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead"); this.statusCode = arguments[0]; val = arguments[1]; } } var app = this.app; var escape2 = app.get("json escape"); var replacer = app.get("json replacer"); var spaces = app.get("json spaces"); var body = stringify(val, replacer, spaces, escape2); var callback = this.req.query[app.get("jsonp callback name")]; if (!this.get("Content-Type")) { this.set("X-Content-Type-Options", "nosniff"); this.set("Content-Type", "application/json"); } if (Array.isArray(callback)) { callback = callback[0]; } if (typeof callback === "string" && callback.length !== 0) { this.set("X-Content-Type-Options", "nosniff"); this.set("Content-Type", "text/javascript"); callback = callback.replace(/[^\[\]\w$.]/g, ""); if (body === undefined) { body = ""; } else if (typeof body === "string") { body = body.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); } body = "/**/ typeof " + callback + " === 'function' && " + callback + "(" + body + ");"; } return this.send(body); }; res.sendStatus = function sendStatus(statusCode) { var body = statuses.message[statusCode] || String(statusCode); this.statusCode = statusCode; this.type("txt"); return this.send(body); }; res.sendFile = function sendFile(path9, options, callback) { var done = callback; var req = this.req; var res2 = this; var next = req.next; var opts = options || {}; if (!path9) { throw new TypeError("path argument is required to res.sendFile"); } if (typeof path9 !== "string") { throw new TypeError("path must be a string to res.sendFile"); } if (typeof options === "function") { done = options; opts = {}; } if (!opts.root && !isAbsolute(path9)) { throw new TypeError("path must be absolute or specify root to res.sendFile"); } var pathname = encodeURI(path9); var file = send(req, pathname, opts); sendfile(res2, file, opts, function(err) { if (done) return done(err); if (err && err.code === "EISDIR") return next(); if (err && err.code !== "ECONNABORTED" && err.syscall !== "write") { next(err); } }); }; res.sendfile = function(path9, options, callback) { var done = callback; var req = this.req; var res2 = this; var next = req.next; var opts = options || {}; if (typeof options === "function") { done = options; opts = {}; } var file = send(req, path9, opts); sendfile(res2, file, opts, function(err) { if (done) return done(err); if (err && err.code === "EISDIR") return next(); if (err && err.code !== "ECONNABORTED" && err.syscall !== "write") { next(err); } }); }; res.sendfile = deprecate.function(res.sendfile, "res.sendfile: Use res.sendFile instead"); res.download = function download(path9, filename, options, callback) { var done = callback; var name = filename; var opts = options || null; if (typeof filename === "function") { done = filename; name = null; opts = null; } else if (typeof options === "function") { done = options; opts = null; } if (typeof filename === "object" && (typeof options === "function" || options === undefined)) { name = null; opts = filename; } var headers = { "Content-Disposition": contentDisposition(name || path9) }; if (opts && opts.headers) { var keys = Object.keys(opts.headers); for (var i = 0;i < keys.length; i++) { var key = keys[i]; if (key.toLowerCase() !== "content-disposition") { headers[key] = opts.headers[key]; } } } opts = Object.create(opts); opts.headers = headers; var fullPath = !opts.root ? resolve(path9) : path9; return this.sendFile(fullPath, opts, done); }; res.contentType = res.type = function contentType(type) { var ct = type.indexOf("/") === -1 ? mime.lookup(type) : type; return this.set("Content-Type", ct); }; res.format = function(obj) { var req = this.req; var next = req.next; var keys = Object.keys(obj).filter(function(v) { return v !== "default"; }); var key = keys.length > 0 ? req.accepts(keys) : false; this.vary("Accept"); if (key) { this.set("Content-Type", normalizeType(key).value); obj[key](req, this, next); } else if (obj.default) { obj.default(req, this, next); } else { next(createError(406, { types: normalizeTypes(keys).map(function(o) { return o.value; }) })); } return this; }; res.attachment = function attachment(filename) { if (filename) { this.type(extname(filename)); } this.set("Content-Disposition", contentDisposition(filename)); return this; }; res.append = function append(field, val) { var prev = this.get(field); var value = val; if (prev) { value = Array.isArray(prev) ? prev.concat(val) : Array.isArray(val) ? [prev].concat(val) : [prev, val]; } return this.set(field, value); }; res.set = res.header = function header(field, val) { if (arguments.length === 2) { var value = Array.isArray(val) ? val.map(String) : String(val); if (field.toLowerCase() === "content-type") { if (Array.isArray(value)) { throw new TypeError("Content-Type cannot be set to an Array"); } if (!charsetRegExp.test(value)) { var charset = mime.charsets.lookup(value.split(";")[0]); if (charset) value += "; charset=" + charset.toLowerCase(); } } this.setHeader(field, value); } else { for (var key in field) { this.set(key, field[key]); } } return this; }; res.get = function(field) { return this.getHeader(field); }; res.clearCookie = function clearCookie(name, options) { if (options) { if (options.maxAge) { deprecate('res.clearCookie: Passing "options.maxAge" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.'); } if (options.expires) { deprecate('res.clearCookie: Passing "options.expires" is deprecated. In v5.0.0 of Express, this option will be ignored, as res.clearCookie will automatically set cookies to expire immediately. Please update your code to omit this option.'); } } var opts = merge2({ expires: new Date(1), path: "/" }, options); return this.cookie(name, "", opts); }; res.cookie = function(name, value, options) { var opts = merge2({}, options); var secret = this.req.secret; var signed = opts.signed; if (signed && !secret) { throw new Error('cookieParser("secret") required for signed cookies'); } var val = typeof value === "object" ? "j:" + JSON.stringify(value) : String(value); if (signed) { val = "s:" + sign(val, secret); } if (opts.maxAge != null) { var maxAge = opts.maxAge - 0; if (!isNaN(maxAge)) { opts.expires = new Date(Date.now() + maxAge); opts.maxAge = Math.floor(maxAge / 1000); } } if (opts.path == null) { opts.path = "/"; } this.append("Set-Cookie", cookie.serialize(name, String(val), opts)); return this; }; res.location = function location(url) { var loc; if (url === "back") { deprecate('res.location("back"): use res.location(req.get("Referrer") || "/") and refer to https://dub.sh/security-redirect for best practices'); loc = this.req.get("Referrer") || "/"; } else { loc = String(url); } return this.set("Location", encodeUrl(loc)); }; res.redirect = function redirect(url) { var address = url; var body; var status = 302; if (arguments.length === 2) { if (typeof arguments[0] === "number") { status = arguments[0]; address = arguments[1]; } else { deprecate("res.redirect(url, status): Use res.redirect(status, url) instead"); status = arguments[1]; } } address = this.location(address).get("Location"); this.format({ text: function() { body = statuses.message[status] + ". Redirecting to " + address; }, html: function() { var u = escapeHtml(address); body = "

" + statuses.message[status] + ". Redirecting to " + u + "

"; }, default: function() { body = ""; } }); this.statusCode = status; this.set("Content-Length", Buffer2.byteLength(body)); if (this.req.method === "HEAD") { this.end(); } else { this.end(body); } }; res.vary = function(field) { if (!field || Array.isArray(field) && !field.length) { deprecate("res.vary(): Provide a field name"); return this; } vary(this, field); return this; }; res.render = function render(view, options, callback) { var app = this.req.app; var done = callback; var opts = options || {}; var req = this.req; var self2 = this; if (typeof options === "function") { done = options; opts = {}; } opts._locals = self2.locals; done = done || function(err, str) { if (err) return req.next(err); self2.send(str); }; app.render(view, opts, done); }; function sendfile(res2, file, options, callback) { var done = false; var streaming; function onaborted() { if (done) return; done = true; var err = new Error("Request aborted"); err.code = "ECONNABORTED"; callback(err); } function ondirectory() { if (done) return; done = true; var err = new Error("EISDIR, read"); err.code = "EISDIR"; callback(err); } function onerror(err) { if (done) return; done = true; callback(err); } function onend() { if (done) return; done = true; callback(); } function onfile() { streaming = false; } function onfinish(err) { if (err && err.code === "ECONNRESET") return onaborted(); if (err) return onerror(err); if (done) return; setImmediate(function() { if (streaming !== false && !done) { onaborted(); return; } if (done) return; done = true; callback(); }); } function onstream() { streaming = true; } file.on("directory", ondirectory); file.on("end", onend); file.on("error", onerror); file.on("file", onfile); file.on("stream", onstream); onFinished(res2, onfinish); if (options.headers) { file.on("headers", function headers(res3) { var obj = options.headers; var keys = Object.keys(obj); for (var i = 0;i < keys.length; i++) { var k = keys[i]; res3.setHeader(k, obj[k]); } }); } file.pipe(res2); } function stringify(value, replacer, spaces, escape2) { var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value); if (escape2 && typeof json === "string") { json = json.replace(/[<>&]/g, function(c) { switch (c.charCodeAt(0)) { case 60: return "\\u003c"; case 62: return "\\u003e"; case 38: return "\\u0026"; default: return c; } }); } return json; } }); // node_modules/serve-static/index.js var require_serve_static = __commonJS((exports, module) => { /*! * serve-static * Copyright(c) 2010 Sencha Inc. * Copyright(c) 2011 TJ Holowaychuk * Copyright(c) 2014-2016 Douglas Christopher Wilson * MIT Licensed */ var encodeUrl = require_encodeurl(); var escapeHtml = require_escape_html(); var parseUrl = require_parseurl(); var resolve = __require("path").resolve; var send = require_send(); var url = __require("url"); module.exports = serveStatic; module.exports.mime = send.mime; function serveStatic(root, options) { if (!root) { throw new TypeError("root path required"); } if (typeof root !== "string") { throw new TypeError("root path must be a string"); } var opts = Object.create(options || null); var fallthrough = opts.fallthrough !== false; var redirect = opts.redirect !== false; var setHeaders = opts.setHeaders; if (setHeaders && typeof setHeaders !== "function") { throw new TypeError("option setHeaders must be function"); } opts.maxage = opts.maxage || opts.maxAge || 0; opts.root = resolve(root); var onDirectory = redirect ? createRedirectDirectoryListener() : createNotFoundDirectoryListener(); return function serveStatic2(req, res, next) { if (req.method !== "GET" && req.method !== "HEAD") { if (fallthrough) { return next(); } res.statusCode = 405; res.setHeader("Allow", "GET, HEAD"); res.setHeader("Content-Length", "0"); res.end(); return; } var forwardError = !fallthrough; var originalUrl = parseUrl.original(req); var path8 = parseUrl(req).pathname; if (path8 === "/" && originalUrl.pathname.substr(-1) !== "/") { path8 = ""; } var stream = send(req, path8, opts); stream.on("directory", onDirectory); if (setHeaders) { stream.on("headers", setHeaders); } if (fallthrough) { stream.on("file", function onFile() { forwardError = true; }); } stream.on("error", function error2(err) { if (forwardError || !(err.statusCode < 500)) { next(err); return; } next(); }); stream.pipe(res); }; } function collapseLeadingSlashes(str) { for (var i = 0;i < str.length; i++) { if (str.charCodeAt(i) !== 47) { break; } } return i > 1 ? "/" + str.substr(i) : str; } function createHtmlDocument(title, body) { return ` ` + ` ` + ` ` + ` ` + "" + title + ` ` + ` ` + ` ` + "
" + body + `
` + ` ` + ` `; } function createNotFoundDirectoryListener() { return function notFound() { this.error(404); }; } function createRedirectDirectoryListener() { return function redirect(res) { if (this.hasTrailingSlash()) { this.error(404); return; } var originalUrl = parseUrl.original(this.req); originalUrl.path = null; originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + "/"); var loc = encodeUrl(url.format(originalUrl)); var doc2 = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc)); res.statusCode = 301; res.setHeader("Content-Type", "text/html; charset=UTF-8"); res.setHeader("Content-Length", Buffer.byteLength(doc2)); res.setHeader("Content-Security-Policy", "default-src 'none'"); res.setHeader("X-Content-Type-Options", "nosniff"); res.setHeader("Location", loc); res.end(doc2); }; } }); // node_modules/express/lib/express.js var require_express = __commonJS((exports, module) => { /*! * express * Copyright(c) 2009-2013 TJ Holowaychuk * Copyright(c) 2013 Roman Shtylman * Copyright(c) 2014-2015 Douglas Christopher Wilson * MIT Licensed */ var bodyParser = require_body_parser(); var EventEmitter = __require("events").EventEmitter; var mixin = require_merge_descriptors(); var proto = require_application(); var Route = require_route(); var Router = require_router(); var req = require_request(); var res = require_response(); exports = module.exports = createApplication; function createApplication() { var app = function(req2, res2, next) { app.handle(req2, res2, next); }; mixin(app, EventEmitter.prototype, false); mixin(app, proto, false); app.request = Object.create(req, { app: { configurable: true, enumerable: true, writable: true, value: app } }); app.response = Object.create(res, { app: { configurable: true, enumerable: true, writable: true, value: app } }); app.init(); return app; } exports.application = proto; exports.request = req; exports.response = res; exports.Route = Route; exports.Router = Router; exports.json = bodyParser.json; exports.query = require_query(); exports.raw = bodyParser.raw; exports.static = require_serve_static(); exports.text = bodyParser.text; exports.urlencoded = bodyParser.urlencoded; var removedMiddlewares = [ "bodyParser", "compress", "cookieSession", "session", "logger", "cookieParser", "favicon", "responseTime", "errorHandler", "timeout", "methodOverride", "vhost", "csrf", "directory", "limit", "multipart", "staticCache" ]; removedMiddlewares.forEach(function(name) { Object.defineProperty(exports, name, { get: function() { throw new Error("Most middleware (like " + name + ") is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware."); }, configurable: true }); }); }); // node_modules/object-assign/index.js var require_object_assign = __commonJS((exports, module) => { var getOwnPropertySymbols = Object.getOwnPropertySymbols; var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { if (val === null || val === undefined) { throw new TypeError("Object.assign cannot be called with null or undefined"); } return Object(val); } function shouldUseNative() { try { if (!Object.assign) { return false; } var test1 = new String("abc"); test1[5] = "de"; if (Object.getOwnPropertyNames(test1)[0] === "5") { return false; } var test2 = {}; for (var i = 0;i < 10; i++) { test2["_" + String.fromCharCode(i)] = i; } var order2 = Object.getOwnPropertyNames(test2).map(function(n) { return test2[n]; }); if (order2.join("") !== "0123456789") { return false; } var test3 = {}; "abcdefghijklmnopqrst".split("").forEach(function(letter) { test3[letter] = letter; }); if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") { return false; } return true; } catch (err) { return false; } } module.exports = shouldUseNative() ? Object.assign : function(target, source) { var from; var to = toObject(target); var symbols; for (var s = 1;s < arguments.length; s++) { from = Object(arguments[s]); for (var key in from) { if (hasOwnProperty.call(from, key)) { to[key] = from[key]; } } if (getOwnPropertySymbols) { symbols = getOwnPropertySymbols(from); for (var i = 0;i < symbols.length; i++) { if (propIsEnumerable.call(from, symbols[i])) { to[symbols[i]] = from[symbols[i]]; } } } } return to; }; }); // node_modules/cors/lib/index.js var require_lib3 = __commonJS((exports, module) => { (function() { var assign = require_object_assign(); var vary = require_vary(); var defaults = { origin: "*", methods: "GET,HEAD,PUT,PATCH,POST,DELETE", preflightContinue: false, optionsSuccessStatus: 204 }; function isString(s) { return typeof s === "string" || s instanceof String; } function isOriginAllowed(origin, allowedOrigin) { if (Array.isArray(allowedOrigin)) { for (var i = 0;i < allowedOrigin.length; ++i) { if (isOriginAllowed(origin, allowedOrigin[i])) { return true; } } return false; } else if (isString(allowedOrigin)) { return origin === allowedOrigin; } else if (allowedOrigin instanceof RegExp) { return allowedOrigin.test(origin); } else { return !!allowedOrigin; } } function configureOrigin(options, req) { var requestOrigin = req.headers.origin, headers = [], isAllowed; if (!options.origin || options.origin === "*") { headers.push([{ key: "Access-Control-Allow-Origin", value: "*" }]); } else if (isString(options.origin)) { headers.push([{ key: "Access-Control-Allow-Origin", value: options.origin }]); headers.push([{ key: "Vary", value: "Origin" }]); } else { isAllowed = isOriginAllowed(requestOrigin, options.origin); headers.push([{ key: "Access-Control-Allow-Origin", value: isAllowed ? requestOrigin : false }]); headers.push([{ key: "Vary", value: "Origin" }]); } return headers; } function configureMethods(options) { var methods = options.methods; if (methods.join) { methods = options.methods.join(","); } return { key: "Access-Control-Allow-Methods", value: methods }; } function configureCredentials(options) { if (options.credentials === true) { return { key: "Access-Control-Allow-Credentials", value: "true" }; } return null; } function configureAllowedHeaders(options, req) { var allowedHeaders = options.allowedHeaders || options.headers; var headers = []; if (!allowedHeaders) { allowedHeaders = req.headers["access-control-request-headers"]; headers.push([{ key: "Vary", value: "Access-Control-Request-Headers" }]); } else if (allowedHeaders.join) { allowedHeaders = allowedHeaders.join(","); } if (allowedHeaders && allowedHeaders.length) { headers.push([{ key: "Access-Control-Allow-Headers", value: allowedHeaders }]); } return headers; } function configureExposedHeaders(options) { var headers = options.exposedHeaders; if (!headers) { return null; } else if (headers.join) { headers = headers.join(","); } if (headers && headers.length) { return { key: "Access-Control-Expose-Headers", value: headers }; } return null; } function configureMaxAge(options) { var maxAge = (typeof options.maxAge === "number" || options.maxAge) && options.maxAge.toString(); if (maxAge && maxAge.length) { return { key: "Access-Control-Max-Age", value: maxAge }; } return null; } function applyHeaders(headers, res) { for (var i = 0, n = headers.length;i < n; i++) { var header = headers[i]; if (header) { if (Array.isArray(header)) { applyHeaders(header, res); } else if (header.key === "Vary" && header.value) { vary(res, header.value); } else if (header.value) { res.setHeader(header.key, header.value); } } } } function cors(options, req, res, next) { var headers = [], method = req.method && req.method.toUpperCase && req.method.toUpperCase(); if (method === "OPTIONS") { headers.push(configureOrigin(options, req)); headers.push(configureCredentials(options)); headers.push(configureMethods(options)); headers.push(configureAllowedHeaders(options, req)); headers.push(configureMaxAge(options)); headers.push(configureExposedHeaders(options)); applyHeaders(headers, res); if (options.preflightContinue) { next(); } else { res.statusCode = options.optionsSuccessStatus; res.setHeader("Content-Length", "0"); res.end(); } } else { headers.push(configureOrigin(options, req)); headers.push(configureCredentials(options)); headers.push(configureExposedHeaders(options)); applyHeaders(headers, res); next(); } } function middlewareWrapper(o) { var optionsCallback = null; if (typeof o === "function") { optionsCallback = o; } else { optionsCallback = function(req, cb) { cb(null, o); }; } return function corsMiddleware(req, res, next) { optionsCallback(req, function(err, options) { if (err) { next(err); } else { var corsOptions = assign({}, defaults, options); var originCallback = null; if (corsOptions.origin && typeof corsOptions.origin === "function") { originCallback = corsOptions.origin; } else if (corsOptions.origin) { originCallback = function(origin, cb) { cb(null, corsOptions.origin); }; } if (originCallback) { originCallback(req.headers.origin, function(err2, origin) { if (err2 || !origin) { next(err2); } else { corsOptions.origin = origin; cors(corsOptions, req, res, next); } }); } else { next(); } } }); }; } module.exports = middlewareWrapper; })(); }); // src/shared/path-utils.ts function normalizePath(p) { return p.replace(/\\/g, "/").replace(/\/+/g, "/").replace(/\/+$/, ""); } function isDirectChild(filePath, folderPath) { const normFile = normalizePath(filePath); const normFolder = normalizePath(folderPath); if (normFile.startsWith(normFolder + "/")) { const remainder = normFile.slice(normFolder.length + 1); return !remainder.includes("/"); } const folderSegments = normFolder.split("/"); const fileSegments = normFile.split("/"); if (fileSegments.length < 2) return false; const fileDir = fileSegments.slice(0, -1).join("/"); const fileName = fileSegments[fileSegments.length - 1]; if (normFolder.endsWith("/" + fileDir) || normFolder === fileDir) { return !fileName.includes("/"); } for (let i = 0;i < folderSegments.length; i++) { const folderSuffix = folderSegments.slice(i).join("/"); if (folderSuffix === fileDir) { return true; } } return false; } // src/services/sqlite/PendingMessageStore.ts var exports_PendingMessageStore = {}; __export(exports_PendingMessageStore, { PendingMessageStore: () => PendingMessageStore }); class PendingMessageStore { db; maxRetries; constructor(db, maxRetries = 3) { this.db = db; this.maxRetries = maxRetries; } enqueue(sessionDbId, contentSessionId, message) { const now = Date.now(); const stmt = this.db.prepare(` INSERT INTO pending_messages ( session_db_id, content_session_id, message_type, tool_name, tool_input, tool_response, cwd, last_assistant_message, prompt_number, status, retry_count, created_at_epoch ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'pending', 0, ?) `); const result = stmt.run(sessionDbId, contentSessionId, message.type, message.tool_name || null, message.tool_input ? JSON.stringify(message.tool_input) : null, message.tool_response ? JSON.stringify(message.tool_response) : null, message.cwd || null, message.last_assistant_message || null, message.prompt_number || null, now); return result.lastInsertRowid; } claimNextMessage(sessionDbId) { const claimTx = this.db.transaction((sessionId) => { const now = Date.now(); const staleCutoff = now - STALE_PROCESSING_THRESHOLD_MS; const resetStmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE session_db_id = ? AND status = 'processing' AND started_processing_at_epoch < ? `); const resetResult = resetStmt.run(sessionId, staleCutoff); if (resetResult.changes > 0) { logger.info("QUEUE", `SELF_HEAL | sessionDbId=${sessionId} | recovered ${resetResult.changes} stale processing message(s)`); } const peekStmt = this.db.prepare(` SELECT * FROM pending_messages WHERE session_db_id = ? AND status = 'pending' ORDER BY id ASC LIMIT 1 `); const msg = peekStmt.get(sessionId); if (msg) { const updateStmt = this.db.prepare(` UPDATE pending_messages SET status = 'processing', started_processing_at_epoch = ? WHERE id = ? `); updateStmt.run(now, msg.id); logger.info("QUEUE", `CLAIMED | sessionDbId=${sessionId} | messageId=${msg.id} | type=${msg.message_type}`, { sessionId }); } return msg; }); return claimTx(sessionDbId); } confirmProcessed(messageId) { const stmt = this.db.prepare("DELETE FROM pending_messages WHERE id = ?"); const result = stmt.run(messageId); if (result.changes > 0) { logger.debug("QUEUE", `CONFIRMED | messageId=${messageId} | deleted from queue`); } } resetStaleProcessingMessages(thresholdMs = 5 * 60 * 1000, sessionDbId) { const cutoff = Date.now() - thresholdMs; let stmt; let result; if (sessionDbId !== undefined) { stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing' AND started_processing_at_epoch < ? AND session_db_id = ? `); result = stmt.run(cutoff, sessionDbId); } else { stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing' AND started_processing_at_epoch < ? `); result = stmt.run(cutoff); } if (result.changes > 0) { logger.info("QUEUE", `RESET_STALE | count=${result.changes} | thresholdMs=${thresholdMs}${sessionDbId !== undefined ? ` | sessionDbId=${sessionDbId}` : ""}`); } return result.changes; } getAllPending(sessionDbId) { const stmt = this.db.prepare(` SELECT * FROM pending_messages WHERE session_db_id = ? AND status = 'pending' ORDER BY id ASC `); return stmt.all(sessionDbId); } getQueueMessages() { const stmt = this.db.prepare(` SELECT pm.*, ss.project FROM pending_messages pm LEFT JOIN sdk_sessions ss ON pm.content_session_id = ss.content_session_id WHERE pm.status IN ('pending', 'processing', 'failed') ORDER BY CASE pm.status WHEN 'failed' THEN 0 WHEN 'processing' THEN 1 WHEN 'pending' THEN 2 END, pm.created_at_epoch ASC `); return stmt.all(); } getStuckCount(thresholdMs) { const cutoff = Date.now() - thresholdMs; const stmt = this.db.prepare(` SELECT COUNT(*) as count FROM pending_messages WHERE status = 'processing' AND started_processing_at_epoch < ? `); const result = stmt.get(cutoff); return result.count; } retryMessage(messageId) { const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE id = ? AND status IN ('pending', 'processing', 'failed') `); const result = stmt.run(messageId); return result.changes > 0; } resetProcessingToPending(sessionDbId) { const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE session_db_id = ? AND status = 'processing' `); const result = stmt.run(sessionDbId); return result.changes; } markSessionMessagesFailed(sessionDbId) { const now = Date.now(); const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'failed', failed_at_epoch = ? WHERE session_db_id = ? AND status = 'processing' `); const result = stmt.run(now, sessionDbId); return result.changes; } markAllSessionMessagesAbandoned(sessionDbId) { const now = Date.now(); const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'failed', failed_at_epoch = ? WHERE session_db_id = ? AND status IN ('pending', 'processing') `); const result = stmt.run(now, sessionDbId); return result.changes; } abortMessage(messageId) { const stmt = this.db.prepare("DELETE FROM pending_messages WHERE id = ?"); const result = stmt.run(messageId); return result.changes > 0; } retryAllStuck(thresholdMs) { const cutoff = Date.now() - thresholdMs; const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing' AND started_processing_at_epoch < ? `); const result = stmt.run(cutoff); return result.changes; } getRecentlyProcessed(limit = 10, withinMinutes = 30) { const cutoff = Date.now() - withinMinutes * 60 * 1000; const stmt = this.db.prepare(` SELECT pm.*, ss.project FROM pending_messages pm LEFT JOIN sdk_sessions ss ON pm.content_session_id = ss.content_session_id WHERE pm.status = 'processed' AND pm.completed_at_epoch > ? ORDER BY pm.completed_at_epoch DESC LIMIT ? `); return stmt.all(cutoff, limit); } markFailed(messageId) { const now = Date.now(); const msg = this.db.prepare("SELECT retry_count FROM pending_messages WHERE id = ?").get(messageId); if (!msg) return; if (msg.retry_count < this.maxRetries) { const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', retry_count = retry_count + 1, started_processing_at_epoch = NULL WHERE id = ? `); stmt.run(messageId); } else { const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'failed', completed_at_epoch = ? WHERE id = ? `); stmt.run(now, messageId); } } resetStuckMessages(thresholdMs) { const cutoff = thresholdMs === 0 ? Date.now() : Date.now() - thresholdMs; const stmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing' AND started_processing_at_epoch < ? `); const result = stmt.run(cutoff); return result.changes; } getPendingCount(sessionDbId) { const stmt = this.db.prepare(` SELECT COUNT(*) as count FROM pending_messages WHERE session_db_id = ? AND status IN ('pending', 'processing') `); const result = stmt.get(sessionDbId); return result.count; } hasAnyPendingWork() { const stuckCutoff = Date.now() - 5 * 60 * 1000; const resetStmt = this.db.prepare(` UPDATE pending_messages SET status = 'pending', started_processing_at_epoch = NULL WHERE status = 'processing' AND started_processing_at_epoch < ? `); const resetResult = resetStmt.run(stuckCutoff); if (resetResult.changes > 0) { logger.info("QUEUE", `STUCK_RESET | hasAnyPendingWork reset ${resetResult.changes} stuck processing message(s) older than 5 minutes`); } const stmt = this.db.prepare(` SELECT COUNT(*) as count FROM pending_messages WHERE status IN ('pending', 'processing') `); const result = stmt.get(); return result.count > 0; } getSessionsWithPendingMessages() { const stmt = this.db.prepare(` SELECT DISTINCT session_db_id FROM pending_messages WHERE status IN ('pending', 'processing') `); const results = stmt.all(); return results.map((r) => r.session_db_id); } getSessionInfoForMessage(messageId) { const stmt = this.db.prepare(` SELECT session_db_id, content_session_id FROM pending_messages WHERE id = ? `); const result = stmt.get(messageId); return result ? { sessionDbId: result.session_db_id, contentSessionId: result.content_session_id } : null; } clearFailed() { const stmt = this.db.prepare(` DELETE FROM pending_messages WHERE status = 'failed' `); const result = stmt.run(); return result.changes; } clearAll() { const stmt = this.db.prepare(` DELETE FROM pending_messages WHERE status IN ('pending', 'processing', 'failed') `); const result = stmt.run(); return result.changes; } toPendingMessage(persistent) { return { type: persistent.message_type, tool_name: persistent.tool_name || undefined, tool_input: persistent.tool_input ? JSON.parse(persistent.tool_input) : undefined, tool_response: persistent.tool_response ? JSON.parse(persistent.tool_response) : undefined, prompt_number: persistent.prompt_number || undefined, cwd: persistent.cwd || undefined, last_assistant_message: persistent.last_assistant_message || undefined }; } } var STALE_PROCESSING_THRESHOLD_MS = 60000; var init_PendingMessageStore = __esm(() => { init_logger(); }); // src/services/domain/ModeManager.ts var exports_ModeManager = {}; __export(exports_ModeManager, { ModeManager: () => ModeManager }); import { readFileSync as readFileSync12, existsSync as existsSync11 } from "fs"; import { join as join7 } from "path"; class ModeManager { static instance = null; activeMode = null; modesDir; constructor() { const packageRoot = getPackageRoot(); const possiblePaths = [ join7(packageRoot, "modes"), join7(packageRoot, "..", "plugin", "modes") ]; const foundPath = possiblePaths.find((p) => existsSync11(p)); this.modesDir = foundPath || possiblePaths[0]; } static getInstance() { if (!ModeManager.instance) { ModeManager.instance = new ModeManager; } return ModeManager.instance; } parseInheritance(modeId) { const parts = modeId.split("--"); if (parts.length === 1) { return { hasParent: false, parentId: "", overrideId: "" }; } if (parts.length > 2) { throw new Error(`Invalid mode inheritance: ${modeId}. Only one level of inheritance supported (parent--override)`); } return { hasParent: true, parentId: parts[0], overrideId: modeId }; } isPlainObject(value) { return value !== null && typeof value === "object" && !Array.isArray(value); } deepMerge(base, override) { const result = { ...base }; for (const key in override) { const overrideValue = override[key]; const baseValue = base[key]; if (this.isPlainObject(overrideValue) && this.isPlainObject(baseValue)) { result[key] = this.deepMerge(baseValue, overrideValue); } else { result[key] = overrideValue; } } return result; } loadModeFile(modeId) { const modePath = join7(this.modesDir, `${modeId}.json`); if (!existsSync11(modePath)) { throw new Error(`Mode file not found: ${modePath}`); } const jsonContent = readFileSync12(modePath, "utf-8"); return JSON.parse(jsonContent); } loadMode(modeId) { const inheritance = this.parseInheritance(modeId); if (!inheritance.hasParent) { try { const mode = this.loadModeFile(modeId); this.activeMode = mode; logger.debug("SYSTEM", `Loaded mode: ${mode.name} (${modeId})`, undefined, { types: mode.observation_types.map((t) => t.id), concepts: mode.observation_concepts.map((c) => c.id) }); return mode; } catch (error2) { logger.warn("SYSTEM", `Mode file not found: ${modeId}, falling back to 'code'`); if (modeId === "code") { throw new Error("Critical: code.json mode file missing"); } return this.loadMode("code"); } } const { parentId, overrideId } = inheritance; let parentMode; try { parentMode = this.loadMode(parentId); } catch (error2) { logger.warn("SYSTEM", `Parent mode '${parentId}' not found for ${modeId}, falling back to 'code'`); parentMode = this.loadMode("code"); } let overrideConfig; try { overrideConfig = this.loadModeFile(overrideId); logger.debug("SYSTEM", `Loaded override file: ${overrideId} for parent ${parentId}`); } catch (error2) { logger.warn("SYSTEM", `Override file '${overrideId}' not found, using parent mode '${parentId}' only`); this.activeMode = parentMode; return parentMode; } if (!overrideConfig) { logger.warn("SYSTEM", `Invalid override file: ${overrideId}, using parent mode '${parentId}' only`); this.activeMode = parentMode; return parentMode; } const mergedMode = this.deepMerge(parentMode, overrideConfig); this.activeMode = mergedMode; logger.debug("SYSTEM", `Loaded mode with inheritance: ${mergedMode.name} (${modeId} = ${parentId} + ${overrideId})`, undefined, { parent: parentId, override: overrideId, types: mergedMode.observation_types.map((t) => t.id), concepts: mergedMode.observation_concepts.map((c) => c.id) }); return mergedMode; } getActiveMode() { if (!this.activeMode) { throw new Error("No mode loaded. Call loadMode() first."); } return this.activeMode; } getObservationTypes() { return this.getActiveMode().observation_types; } getObservationConcepts() { return this.getActiveMode().observation_concepts; } getTypeIcon(typeId) { const type = this.getObservationTypes().find((t) => t.id === typeId); return type?.emoji || "\uD83D\uDCDD"; } getWorkEmoji(typeId) { const type = this.getObservationTypes().find((t) => t.id === typeId); return type?.work_emoji || "\uD83D\uDCDD"; } validateType(typeId) { return this.getObservationTypes().some((t) => t.id === typeId); } getTypeLabel(typeId) { const type = this.getObservationTypes().find((t) => t.id === typeId); return type?.label || typeId; } } var init_ModeManager = __esm(() => { init_logger(); init_paths(); }); // src/shared/timeline-formatting.ts import path11 from "path"; function parseJsonArray(json) { if (!json) return []; try { const parsed = JSON.parse(json); return Array.isArray(parsed) ? parsed : []; } catch (err) { logger.debug("PARSER", "Failed to parse JSON array, using empty fallback", { preview: json?.substring(0, 50) }, err); return []; } } function formatDateTime(dateInput) { const date4 = new Date(dateInput); return date4.toLocaleString("en-US", { month: "short", day: "numeric", hour: "numeric", minute: "2-digit", hour12: true }); } function formatTime(dateInput) { const date4 = new Date(dateInput); return date4.toLocaleString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }); } function formatDate(dateInput) { const date4 = new Date(dateInput); return date4.toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric" }); } function toRelativePath(filePath, cwd) { if (path11.isAbsolute(filePath)) { return path11.relative(cwd, filePath); } return filePath; } function extractFirstFile(filesModified, cwd, filesRead) { const modified = parseJsonArray(filesModified); if (modified.length > 0) { return toRelativePath(modified[0], cwd); } if (filesRead) { const read = parseJsonArray(filesRead); if (read.length > 0) { return toRelativePath(read[0], cwd); } } return "General"; } function estimateTokens(text) { if (!text) return 0; return Math.ceil(text.length / 4); } function groupByDate(items, getDate) { const itemsByDay = new Map; for (const item of items) { const itemDate = getDate(item); const day = formatDate(itemDate); if (!itemsByDay.has(day)) { itemsByDay.set(day, []); } itemsByDay.get(day).push(item); } const sortedEntries = Array.from(itemsByDay.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); return new Map(sortedEntries); } var init_timeline_formatting = __esm(() => { init_logger(); }); // src/utils/worktree.ts import { statSync as statSync4, readFileSync as readFileSync17 } from "fs"; import path17 from "path"; function detectWorktree(cwd2) { const gitPath = path17.join(cwd2, ".git"); let stat; try { stat = statSync4(gitPath); } catch { return NOT_A_WORKTREE; } if (!stat.isFile()) { return NOT_A_WORKTREE; } let content; try { content = readFileSync17(gitPath, "utf-8").trim(); } catch { return NOT_A_WORKTREE; } const match = content.match(/^gitdir:\s*(.+)$/); if (!match) { return NOT_A_WORKTREE; } const gitdirPath = match[1]; const worktreesMatch = gitdirPath.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/); if (!worktreesMatch) { return NOT_A_WORKTREE; } const parentRepoPath = worktreesMatch[1]; const worktreeName = path17.basename(cwd2); const parentProjectName = path17.basename(parentRepoPath); return { isWorktree: true, worktreeName, parentRepoPath, parentProjectName }; } var NOT_A_WORKTREE; var init_worktree = __esm(() => { NOT_A_WORKTREE = { isWorktree: false, worktreeName: null, parentRepoPath: null, parentProjectName: null }; }); // src/utils/project-name.ts import path18 from "path"; function getProjectName(cwd2) { if (!cwd2 || cwd2.trim() === "") { logger.warn("PROJECT_NAME", "Empty cwd provided, using fallback", { cwd: cwd2 }); return "unknown-project"; } const basename4 = path18.basename(cwd2); if (basename4 === "") { const isWindows = process.platform === "win32"; if (isWindows) { const driveMatch = cwd2.match(/^([A-Z]):\\/i); if (driveMatch) { const driveLetter = driveMatch[1].toUpperCase(); const projectName = `drive-${driveLetter}`; logger.info("PROJECT_NAME", "Drive root detected", { cwd: cwd2, projectName }); return projectName; } } logger.warn("PROJECT_NAME", "Root directory detected, using fallback", { cwd: cwd2 }); return "unknown-project"; } return basename4; } function getProjectContext(cwd2) { const primary = getProjectName(cwd2); if (!cwd2) { return { primary, parent: null, isWorktree: false, allProjects: [primary] }; } const worktreeInfo = detectWorktree(cwd2); if (worktreeInfo.isWorktree && worktreeInfo.parentProjectName) { return { primary, parent: worktreeInfo.parentProjectName, isWorktree: true, allProjects: [worktreeInfo.parentProjectName, primary] }; } return { primary, parent: null, isWorktree: false, allProjects: [primary] }; } var init_project_name = __esm(() => { init_logger(); init_worktree(); }); // src/services/context/ContextConfigLoader.ts import path19 from "path"; import { homedir as homedir15 } from "os"; function loadContextConfig() { const settingsPath = path19.join(homedir15(), ".claude-mem", "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); const mode = ModeManager.getInstance().getActiveMode(); const observationTypes = new Set(mode.observation_types.map((t) => t.id)); const observationConcepts = new Set(mode.observation_concepts.map((c) => c.id)); return { totalObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10), fullObservationCount: parseInt(settings.CLAUDE_MEM_CONTEXT_FULL_COUNT, 10), sessionCount: parseInt(settings.CLAUDE_MEM_CONTEXT_SESSION_COUNT, 10), showReadTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS === "true", showWorkTokens: settings.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS === "true", showSavingsAmount: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT === "true", showSavingsPercent: settings.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT === "true", observationTypes, observationConcepts, fullObservationField: settings.CLAUDE_MEM_CONTEXT_FULL_FIELD, showLastSummary: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY === "true", showLastMessage: settings.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE === "true" }; } var init_ContextConfigLoader = __esm(() => { init_SettingsDefaultsManager(); init_ModeManager(); }); // src/services/context/types.ts var colors, CHARS_PER_TOKEN_ESTIMATE4 = 4, SUMMARY_LOOKAHEAD = 1; var init_types = __esm(() => { colors = { reset: "\x1B[0m", bright: "\x1B[1m", dim: "\x1B[2m", cyan: "\x1B[36m", green: "\x1B[32m", yellow: "\x1B[33m", blue: "\x1B[34m", magenta: "\x1B[35m", gray: "\x1B[90m", red: "\x1B[31m" }; }); // src/services/context/TokenCalculator.ts function calculateObservationTokens(obs) { const obsSize = (obs.title?.length || 0) + (obs.subtitle?.length || 0) + (obs.narrative?.length || 0) + JSON.stringify(obs.facts || []).length; return Math.ceil(obsSize / CHARS_PER_TOKEN_ESTIMATE4); } function calculateTokenEconomics(observations) { const totalObservations = observations.length; const totalReadTokens = observations.reduce((sum, obs) => { return sum + calculateObservationTokens(obs); }, 0); const totalDiscoveryTokens = observations.reduce((sum, obs) => { return sum + (obs.discovery_tokens || 0); }, 0); const savings = totalDiscoveryTokens - totalReadTokens; const savingsPercent = totalDiscoveryTokens > 0 ? Math.round(savings / totalDiscoveryTokens * 100) : 0; return { totalObservations, totalReadTokens, totalDiscoveryTokens, savings, savingsPercent }; } function getWorkEmoji(obsType) { return ModeManager.getInstance().getWorkEmoji(obsType); } function formatObservationTokenDisplay(obs, config3) { const readTokens = calculateObservationTokens(obs); const discoveryTokens = obs.discovery_tokens || 0; const workEmoji = getWorkEmoji(obs.type); const discoveryDisplay = discoveryTokens > 0 ? `${workEmoji} ${discoveryTokens.toLocaleString()}` : "-"; return { readTokens, discoveryTokens, discoveryDisplay, workEmoji }; } function shouldShowContextEconomics(config3) { return config3.showReadTokens || config3.showWorkTokens || config3.showSavingsAmount || config3.showSavingsPercent; } var init_TokenCalculator = __esm(() => { init_types(); init_ModeManager(); }); // src/services/context/ObservationCompiler.ts import path20 from "path"; import { existsSync as existsSync16, readFileSync as readFileSync18 } from "fs"; function queryObservations(db, project, config3) { const typeArray = Array.from(config3.observationTypes); const typePlaceholders = typeArray.map(() => "?").join(","); const conceptArray = Array.from(config3.observationConcepts); const conceptPlaceholders = conceptArray.map(() => "?").join(","); return db.db.prepare(` SELECT id, memory_session_id, type, title, subtitle, narrative, facts, concepts, files_read, files_modified, discovery_tokens, created_at, created_at_epoch FROM observations WHERE project = ? AND type IN (${typePlaceholders}) AND EXISTS ( SELECT 1 FROM json_each(concepts) WHERE value IN (${conceptPlaceholders}) ) ORDER BY created_at_epoch DESC LIMIT ? `).all(project, ...typeArray, ...conceptArray, config3.totalObservationCount); } function querySummaries(db, project, config3) { return db.db.prepare(` SELECT id, memory_session_id, request, investigated, learned, completed, next_steps, created_at, created_at_epoch FROM session_summaries WHERE project = ? ORDER BY created_at_epoch DESC LIMIT ? `).all(project, config3.sessionCount + SUMMARY_LOOKAHEAD); } function queryObservationsMulti(db, projects, config3) { const typeArray = Array.from(config3.observationTypes); const typePlaceholders = typeArray.map(() => "?").join(","); const conceptArray = Array.from(config3.observationConcepts); const conceptPlaceholders = conceptArray.map(() => "?").join(","); const projectPlaceholders = projects.map(() => "?").join(","); return db.db.prepare(` SELECT id, memory_session_id, type, title, subtitle, narrative, facts, concepts, files_read, files_modified, discovery_tokens, created_at, created_at_epoch, project FROM observations WHERE project IN (${projectPlaceholders}) AND type IN (${typePlaceholders}) AND EXISTS ( SELECT 1 FROM json_each(concepts) WHERE value IN (${conceptPlaceholders}) ) ORDER BY created_at_epoch DESC LIMIT ? `).all(...projects, ...typeArray, ...conceptArray, config3.totalObservationCount); } function querySummariesMulti(db, projects, config3) { const projectPlaceholders = projects.map(() => "?").join(","); return db.db.prepare(` SELECT id, memory_session_id, request, investigated, learned, completed, next_steps, created_at, created_at_epoch, project FROM session_summaries WHERE project IN (${projectPlaceholders}) ORDER BY created_at_epoch DESC LIMIT ? `).all(...projects, config3.sessionCount + SUMMARY_LOOKAHEAD); } function cwdToDashed(cwd2) { return cwd2.replace(/\//g, "-"); } function extractPriorMessages(transcriptPath) { try { if (!existsSync16(transcriptPath)) { return { userMessage: "", assistantMessage: "" }; } const content = readFileSync18(transcriptPath, "utf-8").trim(); if (!content) { return { userMessage: "", assistantMessage: "" }; } const lines = content.split(` `).filter((line) => line.trim()); let lastAssistantMessage = ""; for (let i = lines.length - 1;i >= 0; i--) { try { const line = lines[i]; if (!line.includes('"type":"assistant"')) { continue; } const entry = JSON.parse(line); if (entry.type === "assistant" && entry.message?.content && Array.isArray(entry.message.content)) { let text = ""; for (const block of entry.message.content) { if (block.type === "text") { text += block.text; } } text = text.replace(/[\s\S]*?<\/system-reminder>/g, "").trim(); if (text) { lastAssistantMessage = text; break; } } } catch (parseError) { logger.debug("PARSER", "Skipping malformed transcript line", { lineIndex: i }, parseError); continue; } } return { userMessage: "", assistantMessage: lastAssistantMessage }; } catch (error3) { logger.failure("WORKER", `Failed to extract prior messages from transcript`, { transcriptPath }, error3); return { userMessage: "", assistantMessage: "" }; } } function getPriorSessionMessages(observations, config3, currentSessionId, cwd2) { if (!config3.showLastMessage || observations.length === 0) { return { userMessage: "", assistantMessage: "" }; } const priorSessionObs = observations.find((obs) => obs.memory_session_id !== currentSessionId); if (!priorSessionObs) { return { userMessage: "", assistantMessage: "" }; } const priorSessionId = priorSessionObs.memory_session_id; const dashedCwd = cwdToDashed(cwd2); const transcriptPath = path20.join(CLAUDE_CONFIG_DIR, "projects", dashedCwd, `${priorSessionId}.jsonl`); return extractPriorMessages(transcriptPath); } function prepareSummariesForTimeline(displaySummaries, allSummaries) { const mostRecentSummaryId = allSummaries[0]?.id; return displaySummaries.map((summary, i) => { const olderSummary = i === 0 ? null : allSummaries[i + 1]; return { ...summary, displayEpoch: olderSummary ? olderSummary.created_at_epoch : summary.created_at_epoch, displayTime: olderSummary ? olderSummary.created_at : summary.created_at, shouldShowLink: summary.id !== mostRecentSummaryId }; }); } function buildTimeline(observations, summaries) { const timeline = [ ...observations.map((obs) => ({ type: "observation", data: obs })), ...summaries.map((summary) => ({ type: "summary", data: summary })) ]; timeline.sort((a, b) => { const aEpoch = a.type === "observation" ? a.data.created_at_epoch : a.data.displayEpoch; const bEpoch = b.type === "observation" ? b.data.created_at_epoch : b.data.displayEpoch; return aEpoch - bEpoch; }); return timeline; } function getFullObservationIds(observations, count) { return new Set(observations.slice(0, count).map((obs) => obs.id)); } var init_ObservationCompiler = __esm(() => { init_logger(); init_paths(); init_types(); }); // src/services/context/formatters/MarkdownFormatter.ts function formatHeaderDateTime() { const now = new Date; const date5 = now.toLocaleDateString("en-CA"); const time4 = now.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }).toLowerCase().replace(" ", ""); const tz = now.toLocaleTimeString("en-US", { timeZoneName: "short" }).split(" ").pop(); return `${date5} ${time4} ${tz}`; } function renderMarkdownHeader(project) { return [ `# $CMEM ${project} ${formatHeaderDateTime()}`, "" ]; } function renderMarkdownLegend() { const mode = ModeManager.getInstance().getActiveMode(); const typeLegendItems = mode.observation_types.map((t) => `${t.emoji}${t.id}`).join(" "); return [ `Legend: \uD83C\uDFAFsession ${typeLegendItems}`, `Format: ID TIME TYPE TITLE`, `Fetch details: get_observations([IDs]) | Search: mem-search skill`, "" ]; } function renderMarkdownColumnKey() { return []; } function renderMarkdownContextIndex() { return []; } function renderMarkdownContextEconomics(economics, config3) { const output = []; const parts = [ `${economics.totalObservations} obs (${economics.totalReadTokens.toLocaleString()}t read)`, `${economics.totalDiscoveryTokens.toLocaleString()}t work` ]; if (economics.totalDiscoveryTokens > 0 && (config3.showSavingsAmount || config3.showSavingsPercent)) { if (config3.showSavingsPercent) { parts.push(`${economics.savingsPercent}% savings`); } else if (config3.showSavingsAmount) { parts.push(`${economics.savings.toLocaleString()}t saved`); } } output.push(`Stats: ${parts.join(" | ")}`); output.push(""); return output; } function renderMarkdownDayHeader(day) { return [ `### ${day}` ]; } function compactTime(time4) { return time4.toLowerCase().replace(" am", "a").replace(" pm", "p"); } function renderMarkdownTableRow(obs, timeDisplay, _config) { const title = obs.title || "Untitled"; const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = timeDisplay ? compactTime(timeDisplay) : '"'; return `${obs.id} ${time4} ${icon} ${title}`; } function renderMarkdownFullObservation(obs, timeDisplay, detailField, config3) { const output = []; const title = obs.title || "Untitled"; const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = timeDisplay ? compactTime(timeDisplay) : '"'; const { readTokens, discoveryDisplay } = formatObservationTokenDisplay(obs, config3); output.push(`**${obs.id}** ${time4} ${icon} **${title}**`); if (detailField) { output.push(detailField); } const tokenParts = []; if (config3.showReadTokens) { tokenParts.push(`~${readTokens}t`); } if (config3.showWorkTokens) { tokenParts.push(discoveryDisplay); } if (tokenParts.length > 0) { output.push(tokenParts.join(" ")); } output.push(""); return output; } function renderMarkdownSummaryItem(summary, formattedTime) { return [ `S${summary.id} ${summary.request || "Session started"} (${formattedTime})` ]; } function renderMarkdownSummaryField(label, value) { if (!value) return []; return [`**${label}**: ${value}`, ""]; } function renderMarkdownPreviouslySection(priorMessages) { if (!priorMessages.assistantMessage) return []; return [ "", "---", "", `**Previously**`, "", `A: ${priorMessages.assistantMessage}`, "" ]; } function renderMarkdownFooter(totalDiscoveryTokens, totalReadTokens) { const workTokensK = Math.round(totalDiscoveryTokens / 1000); return [ "", `Access ${workTokensK}k tokens of past work via get_observations([IDs]) or mem-search skill.` ]; } function renderMarkdownEmptyState(project) { return `# $CMEM ${project} ${formatHeaderDateTime()} No previous sessions found.`; } var init_MarkdownFormatter = __esm(() => { init_ModeManager(); init_TokenCalculator(); }); // src/services/context/formatters/ColorFormatter.ts function formatHeaderDateTime2() { const now = new Date; const date5 = now.toLocaleDateString("en-CA"); const time4 = now.toLocaleTimeString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }).toLowerCase().replace(" ", ""); const tz = now.toLocaleTimeString("en-US", { timeZoneName: "short" }).split(" ").pop(); return `${date5} ${time4} ${tz}`; } function renderColorHeader(project) { return [ "", `${colors.bright}${colors.cyan}[${project}] recent context, ${formatHeaderDateTime2()}${colors.reset}`, `${colors.gray}${"─".repeat(60)}${colors.reset}`, "" ]; } function renderColorLegend() { const mode = ModeManager.getInstance().getActiveMode(); const typeLegendItems = mode.observation_types.map((t) => `${t.emoji} ${t.id}`).join(" | "); return [ `${colors.dim}Legend: session-request | ${typeLegendItems}${colors.reset}`, "" ]; } function renderColorColumnKey() { return [ `${colors.bright}Column Key${colors.reset}`, `${colors.dim} Read: Tokens to read this observation (cost to learn it now)${colors.reset}`, `${colors.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${colors.reset}`, "" ]; } function renderColorContextIndex() { return [ `${colors.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${colors.reset}`, "", `${colors.dim}When you need implementation details, rationale, or debugging context:${colors.reset}`, `${colors.dim} - Fetch by ID: get_observations([IDs]) for observations visible in this index${colors.reset}`, `${colors.dim} - Search history: Use the mem-search skill for past decisions, bugs, and deeper research${colors.reset}`, `${colors.dim} - Trust this index over re-reading code for past decisions and learnings${colors.reset}`, "" ]; } function renderColorContextEconomics(economics, config3) { const output = []; output.push(`${colors.bright}${colors.cyan}Context Economics${colors.reset}`); output.push(`${colors.dim} Loading: ${economics.totalObservations} observations (${economics.totalReadTokens.toLocaleString()} tokens to read)${colors.reset}`); output.push(`${colors.dim} Work investment: ${economics.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${colors.reset}`); if (economics.totalDiscoveryTokens > 0 && (config3.showSavingsAmount || config3.showSavingsPercent)) { let savingsLine = " Your savings: "; if (config3.showSavingsAmount && config3.showSavingsPercent) { savingsLine += `${economics.savings.toLocaleString()} tokens (${economics.savingsPercent}% reduction from reuse)`; } else if (config3.showSavingsAmount) { savingsLine += `${economics.savings.toLocaleString()} tokens`; } else { savingsLine += `${economics.savingsPercent}% reduction from reuse`; } output.push(`${colors.green}${savingsLine}${colors.reset}`); } output.push(""); return output; } function renderColorDayHeader(day) { return [ `${colors.bright}${colors.cyan}${day}${colors.reset}`, "" ]; } function renderColorFileHeader(file) { return [ `${colors.dim}${file}${colors.reset}` ]; } function renderColorTableRow(obs, time4, showTime, config3) { const title = obs.title || "Untitled"; const icon = ModeManager.getInstance().getTypeIcon(obs.type); const { readTokens, discoveryTokens, workEmoji } = formatObservationTokenDisplay(obs, config3); const timePart = showTime ? `${colors.dim}${time4}${colors.reset}` : " ".repeat(time4.length); const readPart = config3.showReadTokens && readTokens > 0 ? `${colors.dim}(~${readTokens}t)${colors.reset}` : ""; const discoveryPart = config3.showWorkTokens && discoveryTokens > 0 ? `${colors.dim}(${workEmoji} ${discoveryTokens.toLocaleString()}t)${colors.reset}` : ""; return ` ${colors.dim}#${obs.id}${colors.reset} ${timePart} ${icon} ${title} ${readPart} ${discoveryPart}`; } function renderColorFullObservation(obs, time4, showTime, detailField, config3) { const output = []; const title = obs.title || "Untitled"; const icon = ModeManager.getInstance().getTypeIcon(obs.type); const { readTokens, discoveryTokens, workEmoji } = formatObservationTokenDisplay(obs, config3); const timePart = showTime ? `${colors.dim}${time4}${colors.reset}` : " ".repeat(time4.length); const readPart = config3.showReadTokens && readTokens > 0 ? `${colors.dim}(~${readTokens}t)${colors.reset}` : ""; const discoveryPart = config3.showWorkTokens && discoveryTokens > 0 ? `${colors.dim}(${workEmoji} ${discoveryTokens.toLocaleString()}t)${colors.reset}` : ""; output.push(` ${colors.dim}#${obs.id}${colors.reset} ${timePart} ${icon} ${colors.bright}${title}${colors.reset}`); if (detailField) { output.push(` ${colors.dim}${detailField}${colors.reset}`); } if (readPart || discoveryPart) { output.push(` ${readPart} ${discoveryPart}`); } output.push(""); return output; } function renderColorSummaryItem(summary, formattedTime) { const summaryTitle = `${summary.request || "Session started"} (${formattedTime})`; return [ `${colors.yellow}#S${summary.id}${colors.reset} ${summaryTitle}`, "" ]; } function renderColorSummaryField(label, value, color) { if (!value) return []; return [`${color}${label}:${colors.reset} ${value}`, ""]; } function renderColorPreviouslySection(priorMessages) { if (!priorMessages.assistantMessage) return []; return [ "", "---", "", `${colors.bright}${colors.magenta}Previously${colors.reset}`, "", `${colors.dim}A: ${priorMessages.assistantMessage}${colors.reset}`, "" ]; } function renderColorFooter(totalDiscoveryTokens, totalReadTokens) { const workTokensK = Math.round(totalDiscoveryTokens / 1000); return [ "", `${colors.dim}Access ${workTokensK}k tokens of past research & decisions for just ${totalReadTokens.toLocaleString()}t. Use the claude-mem skill to access memories by ID.${colors.reset}` ]; } function renderColorEmptyState(project) { return ` ${colors.bright}${colors.cyan}[${project}] recent context, ${formatHeaderDateTime2()}${colors.reset} ${colors.gray}${"─".repeat(60)}${colors.reset} ${colors.dim}No previous sessions found for this project yet.${colors.reset} `; } var init_ColorFormatter = __esm(() => { init_types(); init_ModeManager(); init_TokenCalculator(); }); // src/services/context/sections/HeaderRenderer.ts function renderHeader(project, economics, config3, useColors) { const output = []; if (useColors) { output.push(...renderColorHeader(project)); } else { output.push(...renderMarkdownHeader(project)); } if (useColors) { output.push(...renderColorLegend()); } else { output.push(...renderMarkdownLegend()); } if (useColors) { output.push(...renderColorColumnKey()); } else { output.push(...renderMarkdownColumnKey()); } if (useColors) { output.push(...renderColorContextIndex()); } else { output.push(...renderMarkdownContextIndex()); } if (shouldShowContextEconomics(config3)) { if (useColors) { output.push(...renderColorContextEconomics(economics, config3)); } else { output.push(...renderMarkdownContextEconomics(economics, config3)); } } return output; } var init_HeaderRenderer = __esm(() => { init_TokenCalculator(); init_MarkdownFormatter(); init_ColorFormatter(); }); // src/services/context/sections/TimelineRenderer.ts function groupTimelineByDay(timeline) { const itemsByDay = new Map; for (const item of timeline) { const itemDate = item.type === "observation" ? item.data.created_at : item.data.displayTime; const day = formatDate(itemDate); if (!itemsByDay.has(day)) { itemsByDay.set(day, []); } itemsByDay.get(day).push(item); } const sortedEntries = Array.from(itemsByDay.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); return new Map(sortedEntries); } function getDetailField(obs, config3) { if (config3.fullObservationField === "narrative") { return obs.narrative; } return obs.facts ? parseJsonArray(obs.facts).join(` `) : null; } function renderDayTimelineMarkdown(day, dayItems, fullObservationIds, config3) { const output = []; output.push(...renderMarkdownDayHeader(day)); let lastTime = ""; for (const item of dayItems) { if (item.type === "summary") { lastTime = ""; const summary = item.data; const formattedTime = formatDateTime(summary.displayTime); output.push(...renderMarkdownSummaryItem(summary, formattedTime)); } else { const obs = item.data; const time4 = formatTime(obs.created_at); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : ""; lastTime = time4; const shouldShowFull = fullObservationIds.has(obs.id); if (shouldShowFull) { const detailField = getDetailField(obs, config3); output.push(...renderMarkdownFullObservation(obs, timeDisplay, detailField, config3)); } else { output.push(renderMarkdownTableRow(obs, timeDisplay, config3)); } } } return output; } function renderDayTimelineColor(day, dayItems, fullObservationIds, config3, cwd2) { const output = []; output.push(...renderColorDayHeader(day)); let currentFile = null; let lastTime = ""; for (const item of dayItems) { if (item.type === "summary") { currentFile = null; lastTime = ""; const summary = item.data; const formattedTime = formatDateTime(summary.displayTime); output.push(...renderColorSummaryItem(summary, formattedTime)); } else { const obs = item.data; const file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); const time4 = formatTime(obs.created_at); const showTime = time4 !== lastTime; lastTime = time4; const shouldShowFull = fullObservationIds.has(obs.id); if (file !== currentFile) { output.push(...renderColorFileHeader(file)); currentFile = file; } if (shouldShowFull) { const detailField = getDetailField(obs, config3); output.push(...renderColorFullObservation(obs, time4, showTime, detailField, config3)); } else { output.push(renderColorTableRow(obs, time4, showTime, config3)); } } } output.push(""); return output; } function renderDayTimeline(day, dayItems, fullObservationIds, config3, cwd2, useColors) { if (useColors) { return renderDayTimelineColor(day, dayItems, fullObservationIds, config3, cwd2); } return renderDayTimelineMarkdown(day, dayItems, fullObservationIds, config3); } function renderTimeline(timeline, fullObservationIds, config3, cwd2, useColors) { const output = []; const itemsByDay = groupTimelineByDay(timeline); for (const [day, dayItems] of itemsByDay) { output.push(...renderDayTimeline(day, dayItems, fullObservationIds, config3, cwd2, useColors)); } return output; } var init_TimelineRenderer = __esm(() => { init_timeline_formatting(); init_MarkdownFormatter(); init_ColorFormatter(); }); // src/services/context/sections/SummaryRenderer.ts function shouldShowSummary(config3, mostRecentSummary, mostRecentObservation) { if (!config3.showLastSummary || !mostRecentSummary) { return false; } const hasContent = !!(mostRecentSummary.investigated || mostRecentSummary.learned || mostRecentSummary.completed || mostRecentSummary.next_steps); if (!hasContent) { return false; } if (mostRecentObservation && mostRecentSummary.created_at_epoch <= mostRecentObservation.created_at_epoch) { return false; } return true; } function renderSummaryFields(summary, useColors) { const output = []; if (useColors) { output.push(...renderColorSummaryField("Investigated", summary.investigated, colors.blue)); output.push(...renderColorSummaryField("Learned", summary.learned, colors.yellow)); output.push(...renderColorSummaryField("Completed", summary.completed, colors.green)); output.push(...renderColorSummaryField("Next Steps", summary.next_steps, colors.magenta)); } else { output.push(...renderMarkdownSummaryField("Investigated", summary.investigated)); output.push(...renderMarkdownSummaryField("Learned", summary.learned)); output.push(...renderMarkdownSummaryField("Completed", summary.completed)); output.push(...renderMarkdownSummaryField("Next Steps", summary.next_steps)); } return output; } var init_SummaryRenderer = __esm(() => { init_types(); init_MarkdownFormatter(); init_ColorFormatter(); }); // src/services/context/sections/FooterRenderer.ts function renderPreviouslySection(priorMessages, useColors) { if (useColors) { return renderColorPreviouslySection(priorMessages); } return renderMarkdownPreviouslySection(priorMessages); } function renderFooter(economics, config3, useColors) { if (!shouldShowContextEconomics(config3) || economics.totalDiscoveryTokens <= 0 || economics.savings <= 0) { return []; } if (useColors) { return renderColorFooter(economics.totalDiscoveryTokens, economics.totalReadTokens); } return renderMarkdownFooter(economics.totalDiscoveryTokens, economics.totalReadTokens); } var init_FooterRenderer = __esm(() => { init_TokenCalculator(); init_MarkdownFormatter(); init_ColorFormatter(); }); // src/services/context/ContextBuilder.ts import path21 from "path"; import { homedir as homedir16 } from "os"; import { unlinkSync as unlinkSync4 } from "fs"; function initializeDatabase() { try { return new SessionStore; } catch (error3) { if (error3.code === "ERR_DLOPEN_FAILED") { try { unlinkSync4(VERSION_MARKER_PATH); } catch (unlinkError) { logger.debug("SYSTEM", "Marker file cleanup failed (may not exist)", {}, unlinkError); } logger.error("SYSTEM", "Native module rebuild needed - restart Claude Code to auto-fix"); return null; } throw error3; } } function renderEmptyState(project, useColors) { return useColors ? renderColorEmptyState(project) : renderMarkdownEmptyState(project); } function buildContextOutput(project, observations, summaries, config3, cwd2, sessionId, useColors) { const output = []; const economics = calculateTokenEconomics(observations); output.push(...renderHeader(project, economics, config3, useColors)); const displaySummaries = summaries.slice(0, config3.sessionCount); const summariesForTimeline = prepareSummariesForTimeline(displaySummaries, summaries); const timeline = buildTimeline(observations, summariesForTimeline); const fullObservationIds = getFullObservationIds(observations, config3.fullObservationCount); output.push(...renderTimeline(timeline, fullObservationIds, config3, cwd2, useColors)); const mostRecentSummary = summaries[0]; const mostRecentObservation = observations[0]; if (shouldShowSummary(config3, mostRecentSummary, mostRecentObservation)) { output.push(...renderSummaryFields(mostRecentSummary, useColors)); } const priorMessages = getPriorSessionMessages(observations, config3, sessionId, cwd2); output.push(...renderPreviouslySection(priorMessages, useColors)); output.push(...renderFooter(economics, config3, useColors)); return output.join(` `).trimEnd(); } async function generateContext(input, useColors = false) { const config3 = loadContextConfig(); const cwd2 = input?.cwd ?? process.cwd(); const project = getProjectName(cwd2); const projects = input?.projects || [project]; if (input?.full) { config3.totalObservationCount = 999999; config3.sessionCount = 999999; } const db = initializeDatabase(); if (!db) { return ""; } try { const observations = projects.length > 1 ? queryObservationsMulti(db, projects, config3) : queryObservations(db, project, config3); const summaries = projects.length > 1 ? querySummariesMulti(db, projects, config3) : querySummaries(db, project, config3); if (observations.length === 0 && summaries.length === 0) { return renderEmptyState(project, useColors); } const output = buildContextOutput(project, observations, summaries, config3, cwd2, input?.session_id, useColors); return output; } finally { db.close(); } } var VERSION_MARKER_PATH; var init_ContextBuilder = __esm(() => { init_SessionStore(); init_logger(); init_project_name(); init_ContextConfigLoader(); init_TokenCalculator(); init_ObservationCompiler(); init_HeaderRenderer(); init_TimelineRenderer(); init_SummaryRenderer(); init_FooterRenderer(); init_MarkdownFormatter(); init_ColorFormatter(); VERSION_MARKER_PATH = path21.join(homedir16(), ".claude", "plugins", "marketplaces", "thedotmack", "plugin", ".install-version"); }); // src/services/context/index.ts var init_context = __esm(() => { init_ContextBuilder(); init_ContextConfigLoader(); init_TokenCalculator(); init_ObservationCompiler(); }); // src/services/context-generator.ts var exports_context_generator = {}; __export(exports_context_generator, { generateContext: () => generateContext }); var init_context_generator = __esm(() => { init_context(); }); // src/cli/stdin-reader.ts function isStdinAvailable() { try { const stdin = process.stdin; if (stdin.isTTY) { return false; } stdin.readable; return true; } catch { return false; } } function tryParseJson(input) { const trimmed = input.trim(); if (!trimmed) { return { success: false }; } try { const value = JSON.parse(trimmed); return { success: true, value }; } catch { return { success: false }; } } async function readJsonFromStdin() { if (!isStdinAvailable()) { return; } return new Promise((resolve, reject) => { let input = ""; let resolved = false; let parseDelayId = null; const cleanup = () => { try { process.stdin.removeAllListeners("data"); process.stdin.removeAllListeners("end"); process.stdin.removeAllListeners("error"); } catch {} }; const resolveWith = (value) => { if (resolved) return; resolved = true; if (parseDelayId) clearTimeout(parseDelayId); clearTimeout(safetyTimeoutId); cleanup(); resolve(value); }; const rejectWith = (error3) => { if (resolved) return; resolved = true; if (parseDelayId) clearTimeout(parseDelayId); clearTimeout(safetyTimeoutId); cleanup(); reject(error3); }; const tryResolveWithJson = () => { const result = tryParseJson(input); if (result.success) { resolveWith(result.value); return true; } return false; }; const safetyTimeoutId = setTimeout(() => { if (!resolved) { if (!tryResolveWithJson()) { if (input.trim()) { rejectWith(new Error(`Incomplete JSON after ${SAFETY_TIMEOUT_MS}ms: ${input.slice(0, 100)}...`)); } else { resolveWith(undefined); } } } }, SAFETY_TIMEOUT_MS); try { process.stdin.on("data", (chunk) => { input += chunk; if (parseDelayId) { clearTimeout(parseDelayId); parseDelayId = null; } if (tryResolveWithJson()) { return; } parseDelayId = setTimeout(() => { tryResolveWithJson(); }, PARSE_DELAY_MS); }); process.stdin.on("end", () => { if (!resolved) { if (!tryResolveWithJson()) { resolveWith(input.trim() ? undefined : undefined); } } }); process.stdin.on("error", () => { if (!resolved) { resolveWith(undefined); } }); } catch { resolved = true; clearTimeout(safetyTimeoutId); cleanup(); resolve(undefined); } }); } var SAFETY_TIMEOUT_MS = 30000, PARSE_DELAY_MS = 50; // src/cli/adapters/claude-code.ts var claudeCodeAdapter; var init_claude_code = __esm(() => { claudeCodeAdapter = { normalizeInput(raw) { const r = raw ?? {}; return { sessionId: r.session_id ?? r.id ?? r.sessionId, cwd: r.cwd ?? process.cwd(), prompt: r.prompt, toolName: r.tool_name, toolInput: r.tool_input, toolResponse: r.tool_response, transcriptPath: r.transcript_path }; }, formatOutput(result) { const r = result ?? {}; if (r.hookSpecificOutput) { const output2 = { hookSpecificOutput: result.hookSpecificOutput }; if (r.systemMessage) { output2.systemMessage = r.systemMessage; } return output2; } const output = {}; if (r.systemMessage) { output.systemMessage = r.systemMessage; } return output; } }; }); // src/cli/adapters/cursor.ts var cursorAdapter; var init_cursor = __esm(() => { cursorAdapter = { normalizeInput(raw) { const r = raw ?? {}; const isShellCommand = !!r.command && !r.tool_name; return { sessionId: r.conversation_id || r.generation_id || r.id, cwd: r.workspace_roots?.[0] ?? r.cwd ?? process.cwd(), prompt: r.prompt ?? r.query ?? r.input ?? r.message, toolName: isShellCommand ? "Bash" : r.tool_name, toolInput: isShellCommand ? { command: r.command } : r.tool_input, toolResponse: isShellCommand ? { output: r.output } : r.result_json, transcriptPath: undefined, filePath: r.file_path, edits: r.edits }; }, formatOutput(result) { return { continue: result.continue ?? true }; } }; }); // src/cli/adapters/raw.ts var rawAdapter; var init_raw = __esm(() => { rawAdapter = { normalizeInput(raw) { const r = raw; return { sessionId: r.sessionId ?? r.session_id ?? "unknown", cwd: r.cwd ?? process.cwd(), prompt: r.prompt, toolName: r.toolName ?? r.tool_name, toolInput: r.toolInput ?? r.tool_input, toolResponse: r.toolResponse ?? r.tool_response, transcriptPath: r.transcriptPath ?? r.transcript_path, filePath: r.filePath ?? r.file_path, edits: r.edits }; }, formatOutput(result) { return result; } }; }); // src/cli/adapters/index.ts function getPlatformAdapter(platform) { switch (platform) { case "claude-code": return claudeCodeAdapter; case "cursor": return cursorAdapter; case "raw": return rawAdapter; default: return rawAdapter; } } var init_adapters = __esm(() => { init_claude_code(); init_cursor(); init_raw(); }); // src/cli/handlers/context.ts var contextHandler; var init_context2 = __esm(() => { init_worker_utils(); init_project_name(); init_hook_constants(); init_logger(); init_SettingsDefaultsManager(); init_paths(); contextHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: "" }, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const cwd2 = input.cwd ?? process.cwd(); const context = getProjectContext(cwd2); const port = getWorkerPort(); const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const showTerminalOutput = settings.CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT === "true"; const projectsParam = context.allProjects.join(","); const apiPath = `/api/context/inject?projects=${encodeURIComponent(projectsParam)}`; const colorApiPath = `${apiPath}&colors=true`; try { const [response, colorResponse] = await Promise.all([ workerHttpRequest(apiPath), showTerminalOutput ? workerHttpRequest(colorApiPath).catch(() => null) : Promise.resolve(null) ]); if (!response.ok) { logger.warn("HOOK", "Context generation failed, returning empty", { status: response.status }); return { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: "" }, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const [contextResult, colorResult] = await Promise.all([ response.text(), colorResponse?.ok ? colorResponse.text() : Promise.resolve("") ]); const additionalContext = contextResult.trim(); const coloredTimeline = colorResult.trim(); const systemMessage = showTerminalOutput && coloredTimeline ? `${coloredTimeline} View Observations Live @ http://localhost:${port}` : undefined; return { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext }, systemMessage }; } catch (error3) { logger.warn("HOOK", "Context fetch error, returning empty", { error: error3 instanceof Error ? error3.message : String(error3) }); return { hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: "" }, exitCode: HOOK_EXIT_CODES.SUCCESS }; } } }; }); // src/utils/project-filter.ts import { homedir as homedir18 } from "os"; function globToRegex(pattern) { let expanded = pattern.startsWith("~") ? homedir18() + pattern.slice(1) : pattern; expanded = expanded.replace(/\\/g, "/"); let regex = expanded.replace(/[.+^${}()|[\]\\]/g, "\\$&"); regex = regex.replace(/\*\*/g, "<<>>").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]").replace(/<<>>/g, ".*"); return new RegExp(`^${regex}$`); } function isProjectExcluded(projectPath, exclusionPatterns) { if (!exclusionPatterns || !exclusionPatterns.trim()) { return false; } const normalizedProjectPath = projectPath.replace(/\\/g, "/"); const patternList = exclusionPatterns.split(",").map((p) => p.trim()).filter(Boolean); for (const pattern of patternList) { try { const regex = globToRegex(pattern); if (regex.test(normalizedProjectPath)) { return true; } } catch { continue; } } return false; } var init_project_filter = () => {}; // src/cli/handlers/session-init.ts var sessionInitHandler; var init_session_init = __esm(() => { init_worker_utils(); init_project_name(); init_logger(); init_hook_constants(); init_project_filter(); init_SettingsDefaultsManager(); init_paths(); sessionInitHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const { sessionId, cwd: cwd2, prompt: rawPrompt } = input; if (!sessionId) { logger.warn("HOOK", "session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); if (cwd2 && isProjectExcluded(cwd2, settings.CLAUDE_MEM_EXCLUDED_PROJECTS)) { logger.info("HOOK", "Project excluded from tracking", { cwd: cwd2 }); return { continue: true, suppressOutput: true }; } const prompt = !rawPrompt || !rawPrompt.trim() ? "[media prompt]" : rawPrompt; const project = getProjectName(cwd2); logger.debug("HOOK", "session-init: Calling /api/sessions/init", { contentSessionId: sessionId, project }); const initResponse = await workerHttpRequest("/api/sessions/init", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contentSessionId: sessionId, project, prompt }) }); if (!initResponse.ok) { logger.failure("HOOK", `Session initialization failed: ${initResponse.status}`, { contentSessionId: sessionId, project }); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const initResult = await initResponse.json(); const sessionDbId = initResult.sessionDbId; const promptNumber = initResult.promptNumber; logger.debug("HOOK", "session-init: Received from /api/sessions/init", { sessionDbId, promptNumber, skipped: initResult.skipped, contextInjected: initResult.contextInjected }); logger.debug("HOOK", `[ALIGNMENT] Hook Entry | contentSessionId=${sessionId} | prompt#=${promptNumber} | sessionDbId=${sessionDbId}`); if (initResult.skipped && initResult.reason === "private") { logger.info("HOOK", `INIT_COMPLETE | sessionDbId=${sessionDbId} | promptNumber=${promptNumber} | skipped=true | reason=private`, { sessionId: sessionDbId }); return { continue: true, suppressOutput: true }; } if (initResult.contextInjected) { logger.info("HOOK", `INIT_COMPLETE | sessionDbId=${sessionDbId} | promptNumber=${promptNumber} | skipped_agent_init=true | reason=context_already_injected`, { sessionId: sessionDbId }); return { continue: true, suppressOutput: true }; } if (input.platform !== "cursor" && sessionDbId) { const cleanedPrompt = prompt.startsWith("/") ? prompt.substring(1) : prompt; logger.debug("HOOK", "session-init: Calling /sessions/{sessionDbId}/init", { sessionDbId, promptNumber }); const response = await workerHttpRequest(`/sessions/${sessionDbId}/init`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ userPrompt: cleanedPrompt, promptNumber }) }); if (!response.ok) { logger.failure("HOOK", `SDK agent start failed: ${response.status}`, { sessionDbId, promptNumber }); } } else if (input.platform === "cursor") { logger.debug("HOOK", "session-init: Skipping SDK agent init for Cursor platform", { sessionDbId, promptNumber }); } logger.info("HOOK", `INIT_COMPLETE | sessionDbId=${sessionDbId} | promptNumber=${promptNumber} | project=${project}`, { sessionId: sessionDbId }); return { continue: true, suppressOutput: true }; } }; }); // src/cli/handlers/observation.ts var observationHandler; var init_observation = __esm(() => { init_worker_utils(); init_logger(); init_hook_constants(); init_project_filter(); init_SettingsDefaultsManager(); init_paths(); observationHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const { sessionId, cwd: cwd2, toolName, toolInput, toolResponse } = input; if (!toolName) { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const toolStr = logger.formatTool(toolName, toolInput); logger.dataIn("HOOK", `PostToolUse: ${toolStr}`, {}); if (!cwd2) { throw new Error(`Missing cwd in PostToolUse hook input for session ${sessionId}, tool ${toolName}`); } const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); if (isProjectExcluded(cwd2, settings.CLAUDE_MEM_EXCLUDED_PROJECTS)) { logger.debug("HOOK", "Project excluded from tracking, skipping observation", { cwd: cwd2, toolName }); return { continue: true, suppressOutput: true }; } try { const response = await workerHttpRequest("/api/sessions/observations", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contentSessionId: sessionId, tool_name: toolName, tool_input: toolInput, tool_response: toolResponse, cwd: cwd2 }) }); if (!response.ok) { logger.warn("HOOK", "Observation storage failed, skipping", { status: response.status, toolName }); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } logger.debug("HOOK", "Observation sent successfully", { toolName }); } catch (error3) { logger.warn("HOOK", "Observation fetch error, skipping", { error: error3 instanceof Error ? error3.message : String(error3) }); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } return { continue: true, suppressOutput: true }; } }; }); // src/shared/transcript-parser.ts import { readFileSync as readFileSync20, existsSync as existsSync20 } from "fs"; function extractLastMessage(transcriptPath, role, stripSystemReminders = false) { if (!transcriptPath || !existsSync20(transcriptPath)) { logger.warn("PARSER", `Transcript path missing or file does not exist: ${transcriptPath}`); return ""; } const content = readFileSync20(transcriptPath, "utf-8").trim(); if (!content) { logger.warn("PARSER", `Transcript file exists but is empty: ${transcriptPath}`); return ""; } const lines = content.split(` `); let foundMatchingRole = false; for (let i = lines.length - 1;i >= 0; i--) { const line = JSON.parse(lines[i]); if (line.type === role) { foundMatchingRole = true; if (line.message?.content) { let text = ""; const msgContent = line.message.content; if (typeof msgContent === "string") { text = msgContent; } else if (Array.isArray(msgContent)) { text = msgContent.filter((c) => c.type === "text").map((c) => c.text).join(` `); } else { throw new Error(`Unknown message content format in transcript. Type: ${typeof msgContent}`); } if (stripSystemReminders) { text = text.replace(/[\s\S]*?<\/system-reminder>/g, ""); text = text.replace(/\n{3,}/g, ` `).trim(); } return text; } } } if (!foundMatchingRole) { return ""; } return ""; } var init_transcript_parser = __esm(() => { init_logger(); }); // src/cli/handlers/summarize.ts var SUMMARIZE_TIMEOUT_MS, summarizeHandler; var init_summarize = __esm(() => { init_worker_utils(); init_logger(); init_transcript_parser(); init_hook_constants(); SUMMARIZE_TIMEOUT_MS = getTimeout(HOOK_TIMEOUTS.DEFAULT); summarizeHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const { sessionId, transcriptPath } = input; if (!transcriptPath) { logger.debug("HOOK", `No transcriptPath in Stop hook input for session ${sessionId} - skipping summary`); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const lastAssistantMessage = extractLastMessage(transcriptPath, "assistant", true); logger.dataIn("HOOK", "Stop: Requesting summary", { hasLastAssistantMessage: !!lastAssistantMessage }); const response = await workerHttpRequest("/api/sessions/summarize", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contentSessionId: sessionId, last_assistant_message: lastAssistantMessage }), timeoutMs: SUMMARIZE_TIMEOUT_MS }); if (!response.ok) { return { continue: true, suppressOutput: true }; } logger.debug("HOOK", "Summary request sent successfully"); return { continue: true, suppressOutput: true }; } }; }); // src/cli/handlers/user-message.ts import { basename as basename4 } from "path"; var userMessageHandler; var init_user_message = __esm(() => { init_worker_utils(); init_hook_constants(); userMessageHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { exitCode: HOOK_EXIT_CODES.SUCCESS }; } const port = getWorkerPort(); const project = basename4(input.cwd ?? process.cwd()); try { const response = await workerHttpRequest(`/api/context/inject?project=${encodeURIComponent(project)}&colors=true`); if (!response.ok) { return { exitCode: HOOK_EXIT_CODES.SUCCESS }; } const output = await response.text(); process.stderr.write(` ` + String.fromCodePoint(128221) + ` Claude-Mem Context Loaded ` + output + ` ` + String.fromCodePoint(128161) + ` Wrap any message with ... to prevent storing sensitive information. ` + ` ` + String.fromCodePoint(128172) + " Community https://discord.gg/J4wttp9vDu" + ` ` + String.fromCodePoint(128250) + ` Watch live in browser http://localhost:${port}/ `); } catch (error3) {} return { exitCode: HOOK_EXIT_CODES.SUCCESS }; } }; }); // src/cli/handlers/file-edit.ts var fileEditHandler; var init_file_edit = __esm(() => { init_worker_utils(); init_logger(); init_hook_constants(); fileEditHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } const { sessionId, cwd: cwd2, filePath, edits } = input; if (!filePath) { throw new Error("fileEditHandler requires filePath"); } logger.dataIn("HOOK", `FileEdit: ${filePath}`, { editCount: edits?.length ?? 0 }); if (!cwd2) { throw new Error(`Missing cwd in FileEdit hook input for session ${sessionId}, file ${filePath}`); } try { const response = await workerHttpRequest("/api/sessions/observations", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contentSessionId: sessionId, tool_name: "write_file", tool_input: { filePath, edits }, tool_response: { success: true }, cwd: cwd2 }) }); if (!response.ok) { logger.warn("HOOK", "File edit observation storage failed, skipping", { status: response.status, filePath }); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } logger.debug("HOOK", "File edit observation sent successfully", { filePath }); } catch (error3) { logger.warn("HOOK", "File edit observation fetch error, skipping", { error: error3 instanceof Error ? error3.message : String(error3) }); return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } return { continue: true, suppressOutput: true }; } }; }); // src/cli/handlers/session-complete.ts var sessionCompleteHandler; var init_session_complete = __esm(() => { init_worker_utils(); init_logger(); sessionCompleteHandler = { async execute(input) { const workerReady = await ensureWorkerRunning(); if (!workerReady) { return { continue: true, suppressOutput: true }; } const { sessionId } = input; if (!sessionId) { logger.warn("HOOK", "session-complete: Missing sessionId, skipping"); return { continue: true, suppressOutput: true }; } logger.info("HOOK", "→ session-complete: Removing session from active map", { contentSessionId: sessionId }); try { const response = await workerHttpRequest("/api/sessions/complete", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contentSessionId: sessionId }) }); if (!response.ok) { const text = await response.text(); logger.warn("HOOK", "session-complete: Failed to complete session", { status: response.status, body: text }); } else { logger.info("HOOK", "Session completed successfully", { contentSessionId: sessionId }); } } catch (error3) { logger.warn("HOOK", "session-complete: Error completing session", { error: error3.message }); } return { continue: true, suppressOutput: true }; } }; }); // src/cli/handlers/index.ts function getEventHandler(eventType) { const handler = handlers[eventType]; if (!handler) { logger.warn("HOOK", `Unknown event type: ${eventType}, returning no-op`); return { async execute() { return { continue: true, suppressOutput: true, exitCode: HOOK_EXIT_CODES.SUCCESS }; } }; } return handler; } var handlers; var init_handlers = __esm(() => { init_hook_constants(); init_logger(); init_context2(); init_session_init(); init_observation(); init_summarize(); init_user_message(); init_file_edit(); init_session_complete(); init_context2(); init_session_init(); init_observation(); init_summarize(); init_user_message(); init_file_edit(); init_session_complete(); handlers = { context: contextHandler, "session-init": sessionInitHandler, observation: observationHandler, summarize: summarizeHandler, "session-complete": sessionCompleteHandler, "user-message": userMessageHandler, "file-edit": fileEditHandler }; }); // src/cli/hook-command.ts var exports_hook_command = {}; __export(exports_hook_command, { isWorkerUnavailableError: () => isWorkerUnavailableError, hookCommand: () => hookCommand }); function isWorkerUnavailableError(error3) { const message = error3 instanceof Error ? error3.message : String(error3); const lower = message.toLowerCase(); const transportPatterns = [ "econnrefused", "econnreset", "epipe", "etimedout", "enotfound", "econnaborted", "enetunreach", "ehostunreach", "fetch failed", "unable to connect", "socket hang up" ]; if (transportPatterns.some((p) => lower.includes(p))) return true; if (lower.includes("timed out") || lower.includes("timeout")) return true; if (/failed:\s*5\d{2}/.test(message) || /status[:\s]+5\d{2}/.test(message)) return true; if (/failed:\s*429/.test(message) || /status[:\s]+429/.test(message)) return true; if (/failed:\s*4\d{2}/.test(message) || /status[:\s]+4\d{2}/.test(message)) return false; if (error3 instanceof TypeError || error3 instanceof ReferenceError || error3 instanceof SyntaxError) { return false; } return false; } async function hookCommand(platform, event, options = {}) { const originalStderrWrite = process.stderr.write.bind(process.stderr); process.stderr.write = () => true; try { const adapter = getPlatformAdapter(platform); const handler = getEventHandler(event); const rawInput = await readJsonFromStdin(); const input = adapter.normalizeInput(rawInput); input.platform = platform; const result = await handler.execute(input); const output = adapter.formatOutput(result); console.log(JSON.stringify(output)); const exitCode = result.exitCode ?? HOOK_EXIT_CODES.SUCCESS; if (!options.skipExit) { process.exit(exitCode); } return exitCode; } catch (error3) { if (isWorkerUnavailableError(error3)) { logger.warn("HOOK", `Worker unavailable, skipping hook: ${error3 instanceof Error ? error3.message : error3}`); if (!options.skipExit) { process.exit(HOOK_EXIT_CODES.SUCCESS); } return HOOK_EXIT_CODES.SUCCESS; } logger.error("HOOK", `Hook error: ${error3 instanceof Error ? error3.message : error3}`, {}, error3 instanceof Error ? error3 : undefined); if (!options.skipExit) { process.exit(HOOK_EXIT_CODES.BLOCKING_ERROR); } return HOOK_EXIT_CODES.BLOCKING_ERROR; } finally { process.stderr.write = originalStderrWrite; } } var init_hook_command = __esm(() => { init_adapters(); init_handlers(); init_hook_constants(); init_logger(); }); // src/cli/claude-md-commands.ts var exports_claude_md_commands = {}; __export(exports_claude_md_commands, { generateClaudeMd: () => generateClaudeMd, cleanClaudeMd: () => cleanClaudeMd }); import { Database as Database3 } from "bun:sqlite"; import path23 from "path"; import os3 from "os"; import { existsSync as existsSync21, writeFileSync as writeFileSync10, readFileSync as readFileSync21, renameSync as renameSync5, unlinkSync as unlinkSync6, readdirSync as readdirSync2 } from "fs"; import { execSync as execSync6 } from "child_process"; function getTypeIcon(type) { return TYPE_ICONS[type] || "\uD83D\uDCDD"; } function estimateTokens3(obs) { const size = (obs.title?.length || 0) + (obs.subtitle?.length || 0) + (obs.narrative?.length || 0) + (obs.facts?.length || 0); return Math.ceil(size / 4); } function getTrackedFolders(workingDir) { const folders = new Set; try { const output = execSync6("git ls-files", { cwd: workingDir, encoding: "utf-8", maxBuffer: 50 * 1024 * 1024 }); const files = output.trim().split(` `).filter((f) => f); for (const file of files) { const absPath = path23.join(workingDir, file); let dir = path23.dirname(absPath); while (dir.length > workingDir.length && dir.startsWith(workingDir)) { folders.add(dir); dir = path23.dirname(dir); } } } catch (error3) { logger.warn("CLAUDE_MD", "git ls-files failed, falling back to directory walk", { error: String(error3) }); walkDirectoriesWithIgnore(workingDir, folders); } return folders; } function walkDirectoriesWithIgnore(dir, folders, depth = 0) { if (depth > 10) return; const ignorePatterns = [ "node_modules", ".git", ".next", "dist", "build", ".cache", "__pycache__", ".venv", "venv", ".idea", ".vscode", "coverage", ".claude-mem", ".open-next", ".turbo" ]; try { const entries = readdirSync2(dir, { withFileTypes: true }); for (const entry of entries) { if (!entry.isDirectory()) continue; if (ignorePatterns.includes(entry.name)) continue; if (entry.name.startsWith(".") && entry.name !== ".claude") continue; const fullPath = path23.join(dir, entry.name); folders.add(fullPath); walkDirectoriesWithIgnore(fullPath, folders, depth + 1); } } catch {} } function hasDirectChildFile(obs, folderPath) { const checkFiles = (filesJson) => { if (!filesJson) return false; try { const files = JSON.parse(filesJson); if (Array.isArray(files)) { return files.some((f) => isDirectChild(f, folderPath)); } } catch {} return false; }; return checkFiles(obs.files_modified) || checkFiles(obs.files_read); } function findObservationsByFolder(db, relativeFolderPath, project, limit) { const queryLimit = limit * 3; const sql = ` SELECT o.*, o.discovery_tokens FROM observations o WHERE o.project = ? AND (o.files_modified LIKE ? OR o.files_read LIKE ?) ORDER BY o.created_at_epoch DESC LIMIT ? `; const normalizedFolderPath = relativeFolderPath.split(path23.sep).join("/"); const likePattern = `%"${normalizedFolderPath}/%`; const allMatches = db.prepare(sql).all(project, likePattern, likePattern, queryLimit); return allMatches.filter((obs) => hasDirectChildFile(obs, relativeFolderPath)).slice(0, limit); } function extractRelevantFile(obs, relativeFolder) { if (obs.files_modified) { try { const modified = JSON.parse(obs.files_modified); if (Array.isArray(modified)) { for (const file of modified) { if (isDirectChild(file, relativeFolder)) { return path23.basename(file); } } } } catch {} } if (obs.files_read) { try { const read = JSON.parse(obs.files_read); if (Array.isArray(read)) { for (const file of read) { if (isDirectChild(file, relativeFolder)) { return path23.basename(file); } } } } catch {} } return "General"; } function formatObservationsForClaudeMd(observations, folderPath) { const lines = []; lines.push("# Recent Activity"); lines.push(""); lines.push(""); lines.push(""); if (observations.length === 0) { lines.push("*No recent activity*"); return lines.join(` `); } const byDate = groupByDate(observations, (obs) => obs.created_at); for (const [day, dayObs] of byDate) { lines.push(`### ${day}`); lines.push(""); const byFile = new Map; for (const obs of dayObs) { const file = extractRelevantFile(obs, folderPath); if (!byFile.has(file)) byFile.set(file, []); byFile.get(file).push(obs); } for (const [file, fileObs] of byFile) { lines.push(`**${file}**`); lines.push("| ID | Time | T | Title | Read |"); lines.push("|----|------|---|-------|------|"); let lastTime = ""; for (const obs of fileObs) { const time4 = formatTime(obs.created_at_epoch); const timeDisplay = time4 === lastTime ? '"' : time4; lastTime = time4; const icon = getTypeIcon(obs.type); const title = obs.title || "Untitled"; const tokens = estimateTokens3(obs); lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title} | ~${tokens} |`); } lines.push(""); } } return lines.join(` `).trim(); } function writeClaudeMdToFolder2(folderPath, newContent) { const resolvedPath = path23.resolve(folderPath); if (resolvedPath.includes("/.git/") || resolvedPath.includes("\\.git\\") || resolvedPath.endsWith("/.git") || resolvedPath.endsWith("\\.git")) return; const claudeMdPath = path23.join(folderPath, "CLAUDE.md"); const tempFile = `${claudeMdPath}.tmp`; if (!existsSync21(folderPath)) { throw new Error(`Folder does not exist: ${folderPath}`); } let existingContent = ""; if (existsSync21(claudeMdPath)) { existingContent = readFileSync21(claudeMdPath, "utf-8"); } const startTag = ""; const endTag = ""; let finalContent; if (!existingContent) { finalContent = `${startTag} ${newContent} ${endTag}`; } else { const startIdx = existingContent.indexOf(startTag); const endIdx = existingContent.indexOf(endTag); if (startIdx !== -1 && endIdx !== -1) { finalContent = existingContent.substring(0, startIdx) + `${startTag} ${newContent} ${endTag}` + existingContent.substring(endIdx + endTag.length); } else { finalContent = existingContent + ` ${startTag} ${newContent} ${endTag}`; } } writeFileSync10(tempFile, finalContent); renameSync5(tempFile, claudeMdPath); } function regenerateFolder(db, absoluteFolder, relativeFolder, project, dryRun, workingDir, observationLimit) { try { if (!existsSync21(absoluteFolder)) { return { success: false, observationCount: 0, error: "Folder no longer exists" }; } const resolvedFolder = path23.resolve(absoluteFolder); const resolvedWorkingDir = path23.resolve(workingDir); if (!resolvedFolder.startsWith(resolvedWorkingDir + path23.sep)) { return { success: false, observationCount: 0, error: "Path escapes project root" }; } const observations = findObservationsByFolder(db, relativeFolder, project, observationLimit); if (observations.length === 0) { return { success: false, observationCount: 0, error: "No observations for folder" }; } if (dryRun) { return { success: true, observationCount: observations.length }; } const formatted = formatObservationsForClaudeMd(observations, relativeFolder); writeClaudeMdToFolder2(absoluteFolder, formatted); return { success: true, observationCount: observations.length }; } catch (error3) { return { success: false, observationCount: 0, error: String(error3) }; } } async function generateClaudeMd(dryRun) { try { const workingDir = process.cwd(); const settings = SettingsDefaultsManager.loadFromFile(SETTINGS_PATH2); const observationLimit = parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10) || 50; logger.info("CLAUDE_MD", "Starting CLAUDE.md generation", { workingDir, dryRun, observationLimit }); const project = path23.basename(workingDir); const trackedFolders = getTrackedFolders(workingDir); if (trackedFolders.size === 0) { logger.info("CLAUDE_MD", "No folders found in project"); return 0; } logger.info("CLAUDE_MD", `Found ${trackedFolders.size} folders in project`); if (!existsSync21(DB_PATH2)) { logger.info("CLAUDE_MD", "Database not found, no observations to process"); return 0; } const db = new Database3(DB_PATH2, { readonly: true, create: false }); let successCount = 0; let skipCount = 0; let errorCount = 0; const foldersArray = Array.from(trackedFolders).sort(); for (const absoluteFolder of foldersArray) { const relativeFolder = path23.relative(workingDir, absoluteFolder); const result = regenerateFolder(db, absoluteFolder, relativeFolder, project, dryRun, workingDir, observationLimit); if (result.success) { logger.debug("CLAUDE_MD", `Processed folder: ${relativeFolder}`, { observationCount: result.observationCount }); successCount++; } else if (result.error?.includes("No observations")) { skipCount++; } else { logger.warn("CLAUDE_MD", `Error processing folder: ${relativeFolder}`, { error: result.error }); errorCount++; } } db.close(); logger.info("CLAUDE_MD", "CLAUDE.md generation complete", { totalFolders: foldersArray.length, withObservations: successCount, noObservations: skipCount, errors: errorCount, dryRun }); return 0; } catch (error3) { logger.error("CLAUDE_MD", "Fatal error during CLAUDE.md generation", { error: String(error3) }); return 1; } } async function cleanClaudeMd(dryRun) { try { let walkForClaudeMd = function(dir) { const ignorePatterns = [ "node_modules", ".git", ".next", "dist", "build", ".cache", "__pycache__", ".venv", "venv", ".idea", ".vscode", "coverage", ".claude-mem", ".open-next", ".turbo" ]; try { const entries = readdirSync2(dir, { withFileTypes: true }); for (const entry of entries) { const fullPath = path23.join(dir, entry.name); if (entry.isDirectory()) { if (!ignorePatterns.includes(entry.name)) { walkForClaudeMd(fullPath); } } else if (entry.name === "CLAUDE.md") { try { const content = readFileSync21(fullPath, "utf-8"); if (content.includes("")) { filesToProcess.push(fullPath); } } catch {} } } } catch {} }; const workingDir = process.cwd(); logger.info("CLAUDE_MD", "Starting CLAUDE.md cleanup", { workingDir, dryRun }); const filesToProcess = []; walkForClaudeMd(workingDir); if (filesToProcess.length === 0) { logger.info("CLAUDE_MD", "No CLAUDE.md files with auto-generated content found"); return 0; } logger.info("CLAUDE_MD", `Found ${filesToProcess.length} CLAUDE.md files with auto-generated content`); let deletedCount = 0; let cleanedCount = 0; let errorCount = 0; for (const file of filesToProcess) { const relativePath = path23.relative(workingDir, file); try { const content = readFileSync21(file, "utf-8"); const stripped = content.replace(/[\s\S]*?<\/claude-mem-context>/g, "").trim(); if (stripped === "") { if (!dryRun) { unlinkSync6(file); } logger.debug("CLAUDE_MD", `${dryRun ? "[DRY-RUN] Would delete" : "Deleted"} (empty): ${relativePath}`); deletedCount++; } else { if (!dryRun) { writeFileSync10(file, stripped); } logger.debug("CLAUDE_MD", `${dryRun ? "[DRY-RUN] Would clean" : "Cleaned"}: ${relativePath}`); cleanedCount++; } } catch (error3) { logger.warn("CLAUDE_MD", `Error processing ${relativePath}`, { error: String(error3) }); errorCount++; } } logger.info("CLAUDE_MD", "CLAUDE.md cleanup complete", { deleted: deletedCount, cleaned: cleanedCount, errors: errorCount, dryRun }); return 0; } catch (error3) { logger.error("CLAUDE_MD", "Fatal error during CLAUDE.md cleanup", { error: String(error3) }); return 1; } } var DB_PATH2, SETTINGS_PATH2, TYPE_ICONS; var init_claude_md_commands = __esm(() => { init_SettingsDefaultsManager(); init_timeline_formatting(); init_logger(); DB_PATH2 = path23.join(os3.homedir(), ".claude-mem", "claude-mem.db"); SETTINGS_PATH2 = path23.join(os3.homedir(), ".claude-mem", "settings.json"); TYPE_ICONS = { bugfix: "\uD83D\uDD34", feature: "\uD83D\uDFE3", refactor: "\uD83D\uDD04", change: "✅", discovery: "\uD83D\uDD35", decision: "⚖️", session: "\uD83C\uDFAF", prompt: "\uD83D\uDCAC" }; }); // src/services/worker-service.ts import path24 from "path"; import { existsSync as existsSync23, writeFileSync as writeFileSync11, unlinkSync as unlinkSync7, statSync as statSync5 } from "fs"; // node_modules/zod/v4/core/core.js var NEVER = Object.freeze({ status: "aborted" }); function $constructor(name, initializer, params) { function init(inst, def) { if (!inst._zod) { Object.defineProperty(inst, "_zod", { value: { def, constr: _, traits: new Set }, enumerable: false }); } if (inst._zod.traits.has(name)) { return; } inst._zod.traits.add(name); initializer(inst, def); const proto = _.prototype; const keys = Object.keys(proto); for (let i = 0;i < keys.length; i++) { const k = keys[i]; if (!(k in inst)) { inst[k] = proto[k].bind(inst); } } } const Parent = params?.Parent ?? Object; class Definition extends Parent { } Object.defineProperty(Definition, "name", { value: name }); function _(def) { var _a; const inst = params?.Parent ? new Definition : this; init(inst, def); (_a = inst._zod).deferred ?? (_a.deferred = []); for (const fn of inst._zod.deferred) { fn(); } return inst; } Object.defineProperty(_, "init", { value: init }); Object.defineProperty(_, Symbol.hasInstance, { value: (inst) => { if (params?.Parent && inst instanceof params.Parent) return true; return inst?._zod?.traits?.has(name); } }); Object.defineProperty(_, "name", { value: name }); return _; } var $brand = Symbol("zod_brand"); class $ZodAsyncError extends Error { constructor() { super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); } } class $ZodEncodeError extends Error { constructor(name) { super(`Encountered unidirectional transform during encode: ${name}`); this.name = "ZodEncodeError"; } } var globalConfig = {}; function config(newConfig) { if (newConfig) Object.assign(globalConfig, newConfig); return globalConfig; } // node_modules/zod/v4/core/util.js var exports_util = {}; __export(exports_util, { unwrapMessage: () => unwrapMessage, uint8ArrayToHex: () => uint8ArrayToHex, uint8ArrayToBase64url: () => uint8ArrayToBase64url, uint8ArrayToBase64: () => uint8ArrayToBase64, stringifyPrimitive: () => stringifyPrimitive, slugify: () => slugify, shallowClone: () => shallowClone, safeExtend: () => safeExtend, required: () => required, randomString: () => randomString, propertyKeyTypes: () => propertyKeyTypes, promiseAllObject: () => promiseAllObject, primitiveTypes: () => primitiveTypes, prefixIssues: () => prefixIssues, pick: () => pick, partial: () => partial, parsedType: () => parsedType, optionalKeys: () => optionalKeys, omit: () => omit, objectClone: () => objectClone, numKeys: () => numKeys, nullish: () => nullish, normalizeParams: () => normalizeParams, mergeDefs: () => mergeDefs, merge: () => merge, jsonStringifyReplacer: () => jsonStringifyReplacer, joinValues: () => joinValues, issue: () => issue, isPlainObject: () => isPlainObject, isObject: () => isObject, hexToUint8Array: () => hexToUint8Array, getSizableOrigin: () => getSizableOrigin, getParsedType: () => getParsedType, getLengthableOrigin: () => getLengthableOrigin, getEnumValues: () => getEnumValues, getElementAtPath: () => getElementAtPath, floatSafeRemainder: () => floatSafeRemainder, finalizeIssue: () => finalizeIssue, extend: () => extend, escapeRegex: () => escapeRegex, esc: () => esc, defineLazy: () => defineLazy, createTransparentProxy: () => createTransparentProxy, cloneDef: () => cloneDef, clone: () => clone, cleanRegex: () => cleanRegex, cleanEnum: () => cleanEnum, captureStackTrace: () => captureStackTrace, cached: () => cached, base64urlToUint8Array: () => base64urlToUint8Array, base64ToUint8Array: () => base64ToUint8Array, assignProp: () => assignProp, assertNotEqual: () => assertNotEqual, assertNever: () => assertNever, assertIs: () => assertIs, assertEqual: () => assertEqual, assert: () => assert, allowsEval: () => allowsEval, aborted: () => aborted, NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES, Class: () => Class, BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES }); function assertEqual(val) { return val; } function assertNotEqual(val) { return val; } function assertIs(_arg) {} function assertNever(_x) { throw new Error("Unexpected value in exhaustive check"); } function assert(_) {} function getEnumValues(entries) { const numericValues = Object.values(entries).filter((v) => typeof v === "number"); const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v); return values; } function joinValues(array, separator = "|") { return array.map((val) => stringifyPrimitive(val)).join(separator); } function jsonStringifyReplacer(_, value) { if (typeof value === "bigint") return value.toString(); return value; } function cached(getter) { const set = false; return { get value() { if (!set) { const value = getter(); Object.defineProperty(this, "value", { value }); return value; } throw new Error("cached value already set"); } }; } function nullish(input) { return input === null || input === undefined; } function cleanRegex(source) { const start = source.startsWith("^") ? 1 : 0; const end = source.endsWith("$") ? source.length - 1 : source.length; return source.slice(start, end); } function floatSafeRemainder(val, step) { const valDecCount = (val.toString().split(".")[1] || "").length; const stepString = step.toString(); let stepDecCount = (stepString.split(".")[1] || "").length; if (stepDecCount === 0 && /\d?e-\d?/.test(stepString)) { const match = stepString.match(/\d?e-(\d?)/); if (match?.[1]) { stepDecCount = Number.parseInt(match[1]); } } const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); return valInt % stepInt / 10 ** decCount; } var EVALUATING = Symbol("evaluating"); function defineLazy(object, key, getter) { let value = undefined; Object.defineProperty(object, key, { get() { if (value === EVALUATING) { return; } if (value === undefined) { value = EVALUATING; value = getter(); } return value; }, set(v) { Object.defineProperty(object, key, { value: v }); }, configurable: true }); } function objectClone(obj) { return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)); } function assignProp(target, prop, value) { Object.defineProperty(target, prop, { value, writable: true, enumerable: true, configurable: true }); } function mergeDefs(...defs) { const mergedDescriptors = {}; for (const def of defs) { const descriptors = Object.getOwnPropertyDescriptors(def); Object.assign(mergedDescriptors, descriptors); } return Object.defineProperties({}, mergedDescriptors); } function cloneDef(schema) { return mergeDefs(schema._zod.def); } function getElementAtPath(obj, path) { if (!path) return obj; return path.reduce((acc, key) => acc?.[key], obj); } function promiseAllObject(promisesObj) { const keys = Object.keys(promisesObj); const promises = keys.map((key) => promisesObj[key]); return Promise.all(promises).then((results) => { const resolvedObj = {}; for (let i = 0;i < keys.length; i++) { resolvedObj[keys[i]] = results[i]; } return resolvedObj; }); } function randomString(length = 10) { const chars = "abcdefghijklmnopqrstuvwxyz"; let str = ""; for (let i = 0;i < length; i++) { str += chars[Math.floor(Math.random() * chars.length)]; } return str; } function esc(str) { return JSON.stringify(str); } function slugify(input) { return input.toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, ""); } var captureStackTrace = "captureStackTrace" in Error ? Error.captureStackTrace : (..._args) => {}; function isObject(data) { return typeof data === "object" && data !== null && !Array.isArray(data); } var allowsEval = cached(() => { if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) { return false; } try { const F = Function; new F(""); return true; } catch (_) { return false; } }); function isPlainObject(o) { if (isObject(o) === false) return false; const ctor = o.constructor; if (ctor === undefined) return true; if (typeof ctor !== "function") return true; const prot = ctor.prototype; if (isObject(prot) === false) return false; if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) { return false; } return true; } function shallowClone(o) { if (isPlainObject(o)) return { ...o }; if (Array.isArray(o)) return [...o]; return o; } function numKeys(data) { let keyCount = 0; for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) { keyCount++; } } return keyCount; } var getParsedType = (data) => { const t = typeof data; switch (t) { case "undefined": return "undefined"; case "string": return "string"; case "number": return Number.isNaN(data) ? "nan" : "number"; case "boolean": return "boolean"; case "function": return "function"; case "bigint": return "bigint"; case "symbol": return "symbol"; case "object": if (Array.isArray(data)) { return "array"; } if (data === null) { return "null"; } if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { return "promise"; } if (typeof Map !== "undefined" && data instanceof Map) { return "map"; } if (typeof Set !== "undefined" && data instanceof Set) { return "set"; } if (typeof Date !== "undefined" && data instanceof Date) { return "date"; } if (typeof File !== "undefined" && data instanceof File) { return "file"; } return "object"; default: throw new Error(`Unknown data type: ${t}`); } }; var propertyKeyTypes = new Set(["string", "number", "symbol"]); var primitiveTypes = new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); function escapeRegex(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function clone(inst, def, params) { const cl = new inst._zod.constr(def ?? inst._zod.def); if (!def || params?.parent) cl._zod.parent = inst; return cl; } function normalizeParams(_params) { const params = _params; if (!params) return {}; if (typeof params === "string") return { error: () => params }; if (params?.message !== undefined) { if (params?.error !== undefined) throw new Error("Cannot specify both `message` and `error` params"); params.error = params.message; } delete params.message; if (typeof params.error === "string") return { ...params, error: () => params.error }; return params; } function createTransparentProxy(getter) { let target; return new Proxy({}, { get(_, prop, receiver) { target ?? (target = getter()); return Reflect.get(target, prop, receiver); }, set(_, prop, value, receiver) { target ?? (target = getter()); return Reflect.set(target, prop, value, receiver); }, has(_, prop) { target ?? (target = getter()); return Reflect.has(target, prop); }, deleteProperty(_, prop) { target ?? (target = getter()); return Reflect.deleteProperty(target, prop); }, ownKeys(_) { target ?? (target = getter()); return Reflect.ownKeys(target); }, getOwnPropertyDescriptor(_, prop) { target ?? (target = getter()); return Reflect.getOwnPropertyDescriptor(target, prop); }, defineProperty(_, prop, descriptor) { target ?? (target = getter()); return Reflect.defineProperty(target, prop, descriptor); } }); } function stringifyPrimitive(value) { if (typeof value === "bigint") return value.toString() + "n"; if (typeof value === "string") return `"${value}"`; return `${value}`; } function optionalKeys(shape) { return Object.keys(shape).filter((k) => { return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional"; }); } var NUMBER_FORMAT_RANGES = { safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], int32: [-2147483648, 2147483647], uint32: [0, 4294967295], float32: [-340282346638528860000000000000000000000, 340282346638528860000000000000000000000], float64: [-Number.MAX_VALUE, Number.MAX_VALUE] }; var BIGINT_FORMAT_RANGES = { int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] }; function pick(schema, mask) { const currDef = schema._zod.def; const checks = currDef.checks; const hasChecks = checks && checks.length > 0; if (hasChecks) { throw new Error(".pick() cannot be used on object schemas containing refinements"); } const def = mergeDefs(schema._zod.def, { get shape() { const newShape = {}; for (const key in mask) { if (!(key in currDef.shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; newShape[key] = currDef.shape[key]; } assignProp(this, "shape", newShape); return newShape; }, checks: [] }); return clone(schema, def); } function omit(schema, mask) { const currDef = schema._zod.def; const checks = currDef.checks; const hasChecks = checks && checks.length > 0; if (hasChecks) { throw new Error(".omit() cannot be used on object schemas containing refinements"); } const def = mergeDefs(schema._zod.def, { get shape() { const newShape = { ...schema._zod.def.shape }; for (const key in mask) { if (!(key in currDef.shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; delete newShape[key]; } assignProp(this, "shape", newShape); return newShape; }, checks: [] }); return clone(schema, def); } function extend(schema, shape) { if (!isPlainObject(shape)) { throw new Error("Invalid input to extend: expected a plain object"); } const checks = schema._zod.def.checks; const hasChecks = checks && checks.length > 0; if (hasChecks) { const existingShape = schema._zod.def.shape; for (const key in shape) { if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) { throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead."); } } } const def = mergeDefs(schema._zod.def, { get shape() { const _shape = { ...schema._zod.def.shape, ...shape }; assignProp(this, "shape", _shape); return _shape; } }); return clone(schema, def); } function safeExtend(schema, shape) { if (!isPlainObject(shape)) { throw new Error("Invalid input to safeExtend: expected a plain object"); } const def = mergeDefs(schema._zod.def, { get shape() { const _shape = { ...schema._zod.def.shape, ...shape }; assignProp(this, "shape", _shape); return _shape; } }); return clone(schema, def); } function merge(a, b) { const def = mergeDefs(a._zod.def, { get shape() { const _shape = { ...a._zod.def.shape, ...b._zod.def.shape }; assignProp(this, "shape", _shape); return _shape; }, get catchall() { return b._zod.def.catchall; }, checks: [] }); return clone(a, def); } function partial(Class, schema, mask) { const currDef = schema._zod.def; const checks = currDef.checks; const hasChecks = checks && checks.length > 0; if (hasChecks) { throw new Error(".partial() cannot be used on object schemas containing refinements"); } const def = mergeDefs(schema._zod.def, { get shape() { const oldShape = schema._zod.def.shape; const shape = { ...oldShape }; if (mask) { for (const key in mask) { if (!(key in oldShape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; shape[key] = Class ? new Class({ type: "optional", innerType: oldShape[key] }) : oldShape[key]; } } else { for (const key in oldShape) { shape[key] = Class ? new Class({ type: "optional", innerType: oldShape[key] }) : oldShape[key]; } } assignProp(this, "shape", shape); return shape; }, checks: [] }); return clone(schema, def); } function required(Class, schema, mask) { const def = mergeDefs(schema._zod.def, { get shape() { const oldShape = schema._zod.def.shape; const shape = { ...oldShape }; if (mask) { for (const key in mask) { if (!(key in shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; shape[key] = new Class({ type: "nonoptional", innerType: oldShape[key] }); } } else { for (const key in oldShape) { shape[key] = new Class({ type: "nonoptional", innerType: oldShape[key] }); } } assignProp(this, "shape", shape); return shape; } }); return clone(schema, def); } function aborted(x, startIndex = 0) { if (x.aborted === true) return true; for (let i = startIndex;i < x.issues.length; i++) { if (x.issues[i]?.continue !== true) { return true; } } return false; } function prefixIssues(path, issues) { return issues.map((iss) => { var _a; (_a = iss).path ?? (_a.path = []); iss.path.unshift(path); return iss; }); } function unwrapMessage(message) { return typeof message === "string" ? message : message?.message; } function finalizeIssue(iss, ctx, config2) { const full = { ...iss, path: iss.path ?? [] }; if (!iss.message) { const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage(ctx?.error?.(iss)) ?? unwrapMessage(config2.customError?.(iss)) ?? unwrapMessage(config2.localeError?.(iss)) ?? "Invalid input"; full.message = message; } delete full.inst; delete full.continue; if (!ctx?.reportInput) { delete full.input; } return full; } function getSizableOrigin(input) { if (input instanceof Set) return "set"; if (input instanceof Map) return "map"; if (input instanceof File) return "file"; return "unknown"; } function getLengthableOrigin(input) { if (Array.isArray(input)) return "array"; if (typeof input === "string") return "string"; return "unknown"; } function parsedType(data) { const t = typeof data; switch (t) { case "number": { return Number.isNaN(data) ? "nan" : "number"; } case "object": { if (data === null) { return "null"; } if (Array.isArray(data)) { return "array"; } const obj = data; if (obj && Object.getPrototypeOf(obj) !== Object.prototype && "constructor" in obj && obj.constructor) { return obj.constructor.name; } } } return t; } function issue(...args) { const [iss, input, inst] = args; if (typeof iss === "string") { return { message: iss, code: "custom", input, inst }; } return { ...iss }; } function cleanEnum(obj) { return Object.entries(obj).filter(([k, _]) => { return Number.isNaN(Number.parseInt(k, 10)); }).map((el) => el[1]); } function base64ToUint8Array(base64) { const binaryString = atob(base64); const bytes = new Uint8Array(binaryString.length); for (let i = 0;i < binaryString.length; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes; } function uint8ArrayToBase64(bytes) { let binaryString = ""; for (let i = 0;i < bytes.length; i++) { binaryString += String.fromCharCode(bytes[i]); } return btoa(binaryString); } function base64urlToUint8Array(base64url) { const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/"); const padding = "=".repeat((4 - base64.length % 4) % 4); return base64ToUint8Array(base64 + padding); } function uint8ArrayToBase64url(bytes) { return uint8ArrayToBase64(bytes).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); } function hexToUint8Array(hex) { const cleanHex = hex.replace(/^0x/, ""); if (cleanHex.length % 2 !== 0) { throw new Error("Invalid hex string length"); } const bytes = new Uint8Array(cleanHex.length / 2); for (let i = 0;i < cleanHex.length; i += 2) { bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16); } return bytes; } function uint8ArrayToHex(bytes) { return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join(""); } class Class { constructor(..._args) {} } // node_modules/zod/v4/core/errors.js var initializer = (inst, def) => { inst.name = "$ZodError"; Object.defineProperty(inst, "_zod", { value: inst._zod, enumerable: false }); Object.defineProperty(inst, "issues", { value: def, enumerable: false }); inst.message = JSON.stringify(def, jsonStringifyReplacer, 2); Object.defineProperty(inst, "toString", { value: () => inst.message, enumerable: false }); }; var $ZodError = $constructor("$ZodError", initializer); var $ZodRealError = $constructor("$ZodError", initializer, { Parent: Error }); function flattenError(error, mapper = (issue2) => issue2.message) { const fieldErrors = {}; const formErrors = []; for (const sub of error.issues) { if (sub.path.length > 0) { fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []; fieldErrors[sub.path[0]].push(mapper(sub)); } else { formErrors.push(mapper(sub)); } } return { formErrors, fieldErrors }; } function formatError(error, mapper = (issue2) => issue2.message) { const fieldErrors = { _errors: [] }; const processError = (error2) => { for (const issue2 of error2.issues) { if (issue2.code === "invalid_union" && issue2.errors.length) { issue2.errors.map((issues) => processError({ issues })); } else if (issue2.code === "invalid_key") { processError({ issues: issue2.issues }); } else if (issue2.code === "invalid_element") { processError({ issues: issue2.issues }); } else if (issue2.path.length === 0) { fieldErrors._errors.push(mapper(issue2)); } else { let curr = fieldErrors; let i = 0; while (i < issue2.path.length) { const el = issue2.path[i]; const terminal = i === issue2.path.length - 1; if (!terminal) { curr[el] = curr[el] || { _errors: [] }; } else { curr[el] = curr[el] || { _errors: [] }; curr[el]._errors.push(mapper(issue2)); } curr = curr[el]; i++; } } } }; processError(error); return fieldErrors; } // node_modules/zod/v4/core/parse.js var _parse = (_Err) => (schema, value, _ctx, _params) => { const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) { throw new $ZodAsyncError; } if (result.issues.length) { const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); captureStackTrace(e, _params?.callee); throw e; } return result.value; }; var _parseAsync = (_Err) => async (schema, value, _ctx, params) => { const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; let result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) result = await result; if (result.issues.length) { const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))); captureStackTrace(e, params?.callee); throw e; } return result.value; }; var _safeParse = (_Err) => (schema, value, _ctx) => { const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) { throw new $ZodAsyncError; } return result.issues.length ? { success: false, error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) } : { success: true, data: result.value }; }; var safeParse = /* @__PURE__ */ _safeParse($ZodRealError); var _safeParseAsync = (_Err) => async (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; let result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) result = await result; return result.issues.length ? { success: false, error: new _Err(result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) } : { success: true, data: result.value }; }; var safeParseAsync = /* @__PURE__ */ _safeParseAsync($ZodRealError); var _encode = (_Err) => (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; return _parse(_Err)(schema, value, ctx); }; var _decode = (_Err) => (schema, value, _ctx) => { return _parse(_Err)(schema, value, _ctx); }; var _encodeAsync = (_Err) => async (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; return _parseAsync(_Err)(schema, value, ctx); }; var _decodeAsync = (_Err) => async (schema, value, _ctx) => { return _parseAsync(_Err)(schema, value, _ctx); }; var _safeEncode = (_Err) => (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; return _safeParse(_Err)(schema, value, ctx); }; var _safeDecode = (_Err) => (schema, value, _ctx) => { return _safeParse(_Err)(schema, value, _ctx); }; var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { direction: "backward" }) : { direction: "backward" }; return _safeParseAsync(_Err)(schema, value, ctx); }; var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => { return _safeParseAsync(_Err)(schema, value, _ctx); }; // node_modules/zod/v4/core/regexes.js var cuid = /^[cC][^\s-]{8,}$/; var cuid2 = /^[0-9a-z]+$/; var ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; var xid = /^[0-9a-vA-V]{20}$/; var ksuid = /^[A-Za-z0-9]{27}$/; var nanoid = /^[a-zA-Z0-9_-]{21}$/; var duration = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; var guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/; var uuid = (version) => { if (!version) return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/; return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); }; var email = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; var _emoji = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; function emoji() { return new RegExp(_emoji, "u"); } var ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; var ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/; var cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/; var cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; var base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; var base64url = /^[A-Za-z0-9_-]*$/; var e164 = /^\+[1-9]\d{6,14}$/; var dateSource = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`; var date = /* @__PURE__ */ new RegExp(`^${dateSource}$`); function timeSource(args) { const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`; const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`; return regex; } function time(args) { return new RegExp(`^${timeSource(args)}$`); } function datetime(args) { const time2 = timeSource({ precision: args.precision }); const opts = ["Z"]; if (args.local) opts.push(""); if (args.offset) opts.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`); const timeRegex = `${time2}(?:${opts.join("|")})`; return new RegExp(`^${dateSource}T(?:${timeRegex})$`); } var string = (params) => { const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`; return new RegExp(`^${regex}$`); }; var integer = /^-?\d+$/; var number = /^-?\d+(?:\.\d+)?$/; var boolean = /^(?:true|false)$/i; var _null = /^null$/i; var lowercase = /^[^A-Z]*$/; var uppercase = /^[^a-z]*$/; // node_modules/zod/v4/core/checks.js var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => { var _a; inst._zod ?? (inst._zod = {}); inst._zod.def = def; (_a = inst._zod).onattach ?? (_a.onattach = []); }); var numericOriginMap = { number: "number", bigint: "bigint", object: "date" }; var $ZodCheckLessThan = /* @__PURE__ */ $constructor("$ZodCheckLessThan", (inst, def) => { $ZodCheck.init(inst, def); const origin = numericOriginMap[typeof def.value]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY; if (def.value < curr) { if (def.inclusive) bag.maximum = def.value; else bag.exclusiveMaximum = def.value; } }); inst._zod.check = (payload) => { if (def.inclusive ? payload.value <= def.value : payload.value < def.value) { return; } payload.issues.push({ origin, code: "too_big", maximum: typeof def.value === "object" ? def.value.getTime() : def.value, input: payload.value, inclusive: def.inclusive, inst, continue: !def.abort }); }; }); var $ZodCheckGreaterThan = /* @__PURE__ */ $constructor("$ZodCheckGreaterThan", (inst, def) => { $ZodCheck.init(inst, def); const origin = numericOriginMap[typeof def.value]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY; if (def.value > curr) { if (def.inclusive) bag.minimum = def.value; else bag.exclusiveMinimum = def.value; } }); inst._zod.check = (payload) => { if (def.inclusive ? payload.value >= def.value : payload.value > def.value) { return; } payload.issues.push({ origin, code: "too_small", minimum: typeof def.value === "object" ? def.value.getTime() : def.value, input: payload.value, inclusive: def.inclusive, inst, continue: !def.abort }); }; }); var $ZodCheckMultipleOf = /* @__PURE__ */ $constructor("$ZodCheckMultipleOf", (inst, def) => { $ZodCheck.init(inst, def); inst._zod.onattach.push((inst2) => { var _a; (_a = inst2._zod.bag).multipleOf ?? (_a.multipleOf = def.value); }); inst._zod.check = (payload) => { if (typeof payload.value !== typeof def.value) throw new Error("Cannot mix number and bigint in multiple_of check."); const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder(payload.value, def.value) === 0; if (isMultiple) return; payload.issues.push({ origin: typeof payload.value, code: "not_multiple_of", divisor: def.value, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckNumberFormat = /* @__PURE__ */ $constructor("$ZodCheckNumberFormat", (inst, def) => { $ZodCheck.init(inst, def); def.format = def.format || "float64"; const isInt = def.format?.includes("int"); const origin = isInt ? "int" : "number"; const [minimum, maximum] = NUMBER_FORMAT_RANGES[def.format]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = def.format; bag.minimum = minimum; bag.maximum = maximum; if (isInt) bag.pattern = integer; }); inst._zod.check = (payload) => { const input = payload.value; if (isInt) { if (!Number.isInteger(input)) { payload.issues.push({ expected: origin, format: def.format, code: "invalid_type", continue: false, input, inst }); return; } if (!Number.isSafeInteger(input)) { if (input > 0) { payload.issues.push({ input, code: "too_big", maximum: Number.MAX_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst, origin, inclusive: true, continue: !def.abort }); } else { payload.issues.push({ input, code: "too_small", minimum: Number.MIN_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst, origin, inclusive: true, continue: !def.abort }); } return; } } if (input < minimum) { payload.issues.push({ origin: "number", input, code: "too_small", minimum, inclusive: true, inst, continue: !def.abort }); } if (input > maximum) { payload.issues.push({ origin: "number", input, code: "too_big", maximum, inclusive: true, inst, continue: !def.abort }); } }; }); var $ZodCheckMaxLength = /* @__PURE__ */ $constructor("$ZodCheckMaxLength", (inst, def) => { var _a; $ZodCheck.init(inst, def); (_a = inst._zod.def).when ?? (_a.when = (payload) => { const val = payload.value; return !nullish(val) && val.length !== undefined; }); inst._zod.onattach.push((inst2) => { const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; if (def.maximum < curr) inst2._zod.bag.maximum = def.maximum; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length <= def.maximum) return; const origin = getLengthableOrigin(input); payload.issues.push({ origin, code: "too_big", maximum: def.maximum, inclusive: true, input, inst, continue: !def.abort }); }; }); var $ZodCheckMinLength = /* @__PURE__ */ $constructor("$ZodCheckMinLength", (inst, def) => { var _a; $ZodCheck.init(inst, def); (_a = inst._zod.def).when ?? (_a.when = (payload) => { const val = payload.value; return !nullish(val) && val.length !== undefined; }); inst._zod.onattach.push((inst2) => { const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; if (def.minimum > curr) inst2._zod.bag.minimum = def.minimum; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length >= def.minimum) return; const origin = getLengthableOrigin(input); payload.issues.push({ origin, code: "too_small", minimum: def.minimum, inclusive: true, input, inst, continue: !def.abort }); }; }); var $ZodCheckLengthEquals = /* @__PURE__ */ $constructor("$ZodCheckLengthEquals", (inst, def) => { var _a; $ZodCheck.init(inst, def); (_a = inst._zod.def).when ?? (_a.when = (payload) => { const val = payload.value; return !nullish(val) && val.length !== undefined; }); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.minimum = def.length; bag.maximum = def.length; bag.length = def.length; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length === def.length) return; const origin = getLengthableOrigin(input); const tooBig = length > def.length; payload.issues.push({ origin, ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length }, inclusive: true, exact: true, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckStringFormat = /* @__PURE__ */ $constructor("$ZodCheckStringFormat", (inst, def) => { var _a, _b; $ZodCheck.init(inst, def); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = def.format; if (def.pattern) { bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(def.pattern); } }); if (def.pattern) (_a = inst._zod).check ?? (_a.check = (payload) => { def.pattern.lastIndex = 0; if (def.pattern.test(payload.value)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: def.format, input: payload.value, ...def.pattern ? { pattern: def.pattern.toString() } : {}, inst, continue: !def.abort }); }); else (_b = inst._zod).check ?? (_b.check = () => {}); }); var $ZodCheckRegex = /* @__PURE__ */ $constructor("$ZodCheckRegex", (inst, def) => { $ZodCheckStringFormat.init(inst, def); inst._zod.check = (payload) => { def.pattern.lastIndex = 0; if (def.pattern.test(payload.value)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "regex", input: payload.value, pattern: def.pattern.toString(), inst, continue: !def.abort }); }; }); var $ZodCheckLowerCase = /* @__PURE__ */ $constructor("$ZodCheckLowerCase", (inst, def) => { def.pattern ?? (def.pattern = lowercase); $ZodCheckStringFormat.init(inst, def); }); var $ZodCheckUpperCase = /* @__PURE__ */ $constructor("$ZodCheckUpperCase", (inst, def) => { def.pattern ?? (def.pattern = uppercase); $ZodCheckStringFormat.init(inst, def); }); var $ZodCheckIncludes = /* @__PURE__ */ $constructor("$ZodCheckIncludes", (inst, def) => { $ZodCheck.init(inst, def); const escapedRegex = escapeRegex(def.includes); const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex); def.pattern = pattern; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.includes(def.includes, def.position)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "includes", includes: def.includes, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckStartsWith = /* @__PURE__ */ $constructor("$ZodCheckStartsWith", (inst, def) => { $ZodCheck.init(inst, def); const pattern = new RegExp(`^${escapeRegex(def.prefix)}.*`); def.pattern ?? (def.pattern = pattern); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.startsWith(def.prefix)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "starts_with", prefix: def.prefix, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckEndsWith = /* @__PURE__ */ $constructor("$ZodCheckEndsWith", (inst, def) => { $ZodCheck.init(inst, def); const pattern = new RegExp(`.*${escapeRegex(def.suffix)}$`); def.pattern ?? (def.pattern = pattern); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.endsWith(def.suffix)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "ends_with", suffix: def.suffix, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (inst, def) => { $ZodCheck.init(inst, def); inst._zod.check = (payload) => { payload.value = def.tx(payload.value); }; }); // node_modules/zod/v4/core/doc.js class Doc { constructor(args = []) { this.content = []; this.indent = 0; if (this) this.args = args; } indented(fn) { this.indent += 1; fn(this); this.indent -= 1; } write(arg) { if (typeof arg === "function") { arg(this, { execution: "sync" }); arg(this, { execution: "async" }); return; } const content = arg; const lines = content.split(` `).filter((x) => x); const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length)); const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x); for (const line of dedented) { this.content.push(line); } } compile() { const F = Function; const args = this?.args; const content = this?.content ?? [``]; const lines = [...content.map((x) => ` ${x}`)]; return new F(...args, lines.join(` `)); } } // node_modules/zod/v4/core/versions.js var version = { major: 4, minor: 3, patch: 6 }; // node_modules/zod/v4/core/schemas.js var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => { var _a; inst ?? (inst = {}); inst._zod.def = def; inst._zod.bag = inst._zod.bag || {}; inst._zod.version = version; const checks = [...inst._zod.def.checks ?? []]; if (inst._zod.traits.has("$ZodCheck")) { checks.unshift(inst); } for (const ch of checks) { for (const fn of ch._zod.onattach) { fn(inst); } } if (checks.length === 0) { (_a = inst._zod).deferred ?? (_a.deferred = []); inst._zod.deferred?.push(() => { inst._zod.run = inst._zod.parse; }); } else { const runChecks = (payload, checks2, ctx) => { let isAborted = aborted(payload); let asyncResult; for (const ch of checks2) { if (ch._zod.def.when) { const shouldRun = ch._zod.def.when(payload); if (!shouldRun) continue; } else if (isAborted) { continue; } const currLen = payload.issues.length; const _ = ch._zod.check(payload); if (_ instanceof Promise && ctx?.async === false) { throw new $ZodAsyncError; } if (asyncResult || _ instanceof Promise) { asyncResult = (asyncResult ?? Promise.resolve()).then(async () => { await _; const nextLen = payload.issues.length; if (nextLen === currLen) return; if (!isAborted) isAborted = aborted(payload, currLen); }); } else { const nextLen = payload.issues.length; if (nextLen === currLen) continue; if (!isAborted) isAborted = aborted(payload, currLen); } } if (asyncResult) { return asyncResult.then(() => { return payload; }); } return payload; }; const handleCanaryResult = (canary, payload, ctx) => { if (aborted(canary)) { canary.aborted = true; return canary; } const checkResult = runChecks(payload, checks, ctx); if (checkResult instanceof Promise) { if (ctx.async === false) throw new $ZodAsyncError; return checkResult.then((checkResult2) => inst._zod.parse(checkResult2, ctx)); } return inst._zod.parse(checkResult, ctx); }; inst._zod.run = (payload, ctx) => { if (ctx.skipChecks) { return inst._zod.parse(payload, ctx); } if (ctx.direction === "backward") { const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true }); if (canary instanceof Promise) { return canary.then((canary2) => { return handleCanaryResult(canary2, payload, ctx); }); } return handleCanaryResult(canary, payload, ctx); } const result = inst._zod.parse(payload, ctx); if (result instanceof Promise) { if (ctx.async === false) throw new $ZodAsyncError; return result.then((result2) => runChecks(result2, checks, ctx)); } return runChecks(result, checks, ctx); }; } defineLazy(inst, "~standard", () => ({ validate: (value) => { try { const r = safeParse(inst, value); return r.success ? { value: r.data } : { issues: r.error?.issues }; } catch (_) { return safeParseAsync(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues }); } }, vendor: "zod", version: 1 })); }); var $ZodString = /* @__PURE__ */ $constructor("$ZodString", (inst, def) => { $ZodType.init(inst, def); inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string(inst._zod.bag); inst._zod.parse = (payload, _) => { if (def.coerce) try { payload.value = String(payload.value); } catch (_2) {} if (typeof payload.value === "string") return payload; payload.issues.push({ expected: "string", code: "invalid_type", input: payload.value, inst }); return payload; }; }); var $ZodStringFormat = /* @__PURE__ */ $constructor("$ZodStringFormat", (inst, def) => { $ZodCheckStringFormat.init(inst, def); $ZodString.init(inst, def); }); var $ZodGUID = /* @__PURE__ */ $constructor("$ZodGUID", (inst, def) => { def.pattern ?? (def.pattern = guid); $ZodStringFormat.init(inst, def); }); var $ZodUUID = /* @__PURE__ */ $constructor("$ZodUUID", (inst, def) => { if (def.version) { const versionMap = { v1: 1, v2: 2, v3: 3, v4: 4, v5: 5, v6: 6, v7: 7, v8: 8 }; const v = versionMap[def.version]; if (v === undefined) throw new Error(`Invalid UUID version: "${def.version}"`); def.pattern ?? (def.pattern = uuid(v)); } else def.pattern ?? (def.pattern = uuid()); $ZodStringFormat.init(inst, def); }); var $ZodEmail = /* @__PURE__ */ $constructor("$ZodEmail", (inst, def) => { def.pattern ?? (def.pattern = email); $ZodStringFormat.init(inst, def); }); var $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => { $ZodStringFormat.init(inst, def); inst._zod.check = (payload) => { try { const trimmed = payload.value.trim(); const url = new URL(trimmed); if (def.hostname) { def.hostname.lastIndex = 0; if (!def.hostname.test(url.hostname)) { payload.issues.push({ code: "invalid_format", format: "url", note: "Invalid hostname", pattern: def.hostname.source, input: payload.value, inst, continue: !def.abort }); } } if (def.protocol) { def.protocol.lastIndex = 0; if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) { payload.issues.push({ code: "invalid_format", format: "url", note: "Invalid protocol", pattern: def.protocol.source, input: payload.value, inst, continue: !def.abort }); } } if (def.normalize) { payload.value = url.href; } else { payload.value = trimmed; } return; } catch (_) { payload.issues.push({ code: "invalid_format", format: "url", input: payload.value, inst, continue: !def.abort }); } }; }); var $ZodEmoji = /* @__PURE__ */ $constructor("$ZodEmoji", (inst, def) => { def.pattern ?? (def.pattern = emoji()); $ZodStringFormat.init(inst, def); }); var $ZodNanoID = /* @__PURE__ */ $constructor("$ZodNanoID", (inst, def) => { def.pattern ?? (def.pattern = nanoid); $ZodStringFormat.init(inst, def); }); var $ZodCUID = /* @__PURE__ */ $constructor("$ZodCUID", (inst, def) => { def.pattern ?? (def.pattern = cuid); $ZodStringFormat.init(inst, def); }); var $ZodCUID2 = /* @__PURE__ */ $constructor("$ZodCUID2", (inst, def) => { def.pattern ?? (def.pattern = cuid2); $ZodStringFormat.init(inst, def); }); var $ZodULID = /* @__PURE__ */ $constructor("$ZodULID", (inst, def) => { def.pattern ?? (def.pattern = ulid); $ZodStringFormat.init(inst, def); }); var $ZodXID = /* @__PURE__ */ $constructor("$ZodXID", (inst, def) => { def.pattern ?? (def.pattern = xid); $ZodStringFormat.init(inst, def); }); var $ZodKSUID = /* @__PURE__ */ $constructor("$ZodKSUID", (inst, def) => { def.pattern ?? (def.pattern = ksuid); $ZodStringFormat.init(inst, def); }); var $ZodISODateTime = /* @__PURE__ */ $constructor("$ZodISODateTime", (inst, def) => { def.pattern ?? (def.pattern = datetime(def)); $ZodStringFormat.init(inst, def); }); var $ZodISODate = /* @__PURE__ */ $constructor("$ZodISODate", (inst, def) => { def.pattern ?? (def.pattern = date); $ZodStringFormat.init(inst, def); }); var $ZodISOTime = /* @__PURE__ */ $constructor("$ZodISOTime", (inst, def) => { def.pattern ?? (def.pattern = time(def)); $ZodStringFormat.init(inst, def); }); var $ZodISODuration = /* @__PURE__ */ $constructor("$ZodISODuration", (inst, def) => { def.pattern ?? (def.pattern = duration); $ZodStringFormat.init(inst, def); }); var $ZodIPv4 = /* @__PURE__ */ $constructor("$ZodIPv4", (inst, def) => { def.pattern ?? (def.pattern = ipv4); $ZodStringFormat.init(inst, def); inst._zod.bag.format = `ipv4`; }); var $ZodIPv6 = /* @__PURE__ */ $constructor("$ZodIPv6", (inst, def) => { def.pattern ?? (def.pattern = ipv6); $ZodStringFormat.init(inst, def); inst._zod.bag.format = `ipv6`; inst._zod.check = (payload) => { try { new URL(`http://[${payload.value}]`); } catch { payload.issues.push({ code: "invalid_format", format: "ipv6", input: payload.value, inst, continue: !def.abort }); } }; }); var $ZodCIDRv4 = /* @__PURE__ */ $constructor("$ZodCIDRv4", (inst, def) => { def.pattern ?? (def.pattern = cidrv4); $ZodStringFormat.init(inst, def); }); var $ZodCIDRv6 = /* @__PURE__ */ $constructor("$ZodCIDRv6", (inst, def) => { def.pattern ?? (def.pattern = cidrv6); $ZodStringFormat.init(inst, def); inst._zod.check = (payload) => { const parts = payload.value.split("/"); try { if (parts.length !== 2) throw new Error; const [address, prefix] = parts; if (!prefix) throw new Error; const prefixNum = Number(prefix); if (`${prefixNum}` !== prefix) throw new Error; if (prefixNum < 0 || prefixNum > 128) throw new Error; new URL(`http://[${address}]`); } catch { payload.issues.push({ code: "invalid_format", format: "cidrv6", input: payload.value, inst, continue: !def.abort }); } }; }); function isValidBase64(data) { if (data === "") return true; if (data.length % 4 !== 0) return false; try { atob(data); return true; } catch { return false; } } var $ZodBase64 = /* @__PURE__ */ $constructor("$ZodBase64", (inst, def) => { def.pattern ?? (def.pattern = base64); $ZodStringFormat.init(inst, def); inst._zod.bag.contentEncoding = "base64"; inst._zod.check = (payload) => { if (isValidBase64(payload.value)) return; payload.issues.push({ code: "invalid_format", format: "base64", input: payload.value, inst, continue: !def.abort }); }; }); function isValidBase64URL(data) { if (!base64url.test(data)) return false; const base642 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); const padded = base642.padEnd(Math.ceil(base642.length / 4) * 4, "="); return isValidBase64(padded); } var $ZodBase64URL = /* @__PURE__ */ $constructor("$ZodBase64URL", (inst, def) => { def.pattern ?? (def.pattern = base64url); $ZodStringFormat.init(inst, def); inst._zod.bag.contentEncoding = "base64url"; inst._zod.check = (payload) => { if (isValidBase64URL(payload.value)) return; payload.issues.push({ code: "invalid_format", format: "base64url", input: payload.value, inst, continue: !def.abort }); }; }); var $ZodE164 = /* @__PURE__ */ $constructor("$ZodE164", (inst, def) => { def.pattern ?? (def.pattern = e164); $ZodStringFormat.init(inst, def); }); function isValidJWT(token, algorithm = null) { try { const tokensParts = token.split("."); if (tokensParts.length !== 3) return false; const [header] = tokensParts; if (!header) return false; const parsedHeader = JSON.parse(atob(header)); if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT") return false; if (!parsedHeader.alg) return false; if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm)) return false; return true; } catch { return false; } } var $ZodJWT = /* @__PURE__ */ $constructor("$ZodJWT", (inst, def) => { $ZodStringFormat.init(inst, def); inst._zod.check = (payload) => { if (isValidJWT(payload.value, def.alg)) return; payload.issues.push({ code: "invalid_format", format: "jwt", input: payload.value, inst, continue: !def.abort }); }; }); var $ZodNumber = /* @__PURE__ */ $constructor("$ZodNumber", (inst, def) => { $ZodType.init(inst, def); inst._zod.pattern = inst._zod.bag.pattern ?? number; inst._zod.parse = (payload, _ctx) => { if (def.coerce) try { payload.value = Number(payload.value); } catch (_) {} const input = payload.value; if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) { return payload; } const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : undefined : undefined; payload.issues.push({ expected: "number", code: "invalid_type", input, inst, ...received ? { received } : {} }); return payload; }; }); var $ZodNumberFormat = /* @__PURE__ */ $constructor("$ZodNumberFormat", (inst, def) => { $ZodCheckNumberFormat.init(inst, def); $ZodNumber.init(inst, def); }); var $ZodBoolean = /* @__PURE__ */ $constructor("$ZodBoolean", (inst, def) => { $ZodType.init(inst, def); inst._zod.pattern = boolean; inst._zod.parse = (payload, _ctx) => { if (def.coerce) try { payload.value = Boolean(payload.value); } catch (_) {} const input = payload.value; if (typeof input === "boolean") return payload; payload.issues.push({ expected: "boolean", code: "invalid_type", input, inst }); return payload; }; }); var $ZodNull = /* @__PURE__ */ $constructor("$ZodNull", (inst, def) => { $ZodType.init(inst, def); inst._zod.pattern = _null; inst._zod.values = new Set([null]); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (input === null) return payload; payload.issues.push({ expected: "null", code: "invalid_type", input, inst }); return payload; }; }); var $ZodUnknown = /* @__PURE__ */ $constructor("$ZodUnknown", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload) => payload; }); var $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload, _ctx) => { payload.issues.push({ expected: "never", code: "invalid_type", input: payload.value, inst }); return payload; }; }); function handleArrayResult(result, final, index) { if (result.issues.length) { final.issues.push(...prefixIssues(index, result.issues)); } final.value[index] = result.value; } var $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!Array.isArray(input)) { payload.issues.push({ expected: "array", code: "invalid_type", input, inst }); return payload; } payload.value = Array(input.length); const proms = []; for (let i = 0;i < input.length; i++) { const item = input[i]; const result = def.element._zod.run({ value: item, issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => handleArrayResult(result2, payload, i))); } else { handleArrayResult(result, payload, i); } } if (proms.length) { return Promise.all(proms).then(() => payload); } return payload; }; }); function handlePropertyResult(result, final, key, input, isOptionalOut) { if (result.issues.length) { if (isOptionalOut && !(key in input)) { return; } final.issues.push(...prefixIssues(key, result.issues)); } if (result.value === undefined) { if (key in input) { final.value[key] = undefined; } } else { final.value[key] = result.value; } } function normalizeDef(def) { const keys = Object.keys(def.shape); for (const k of keys) { if (!def.shape?.[k]?._zod?.traits?.has("$ZodType")) { throw new Error(`Invalid element at key "${k}": expected a Zod schema`); } } const okeys = optionalKeys(def.shape); return { ...def, keys, keySet: new Set(keys), numKeys: keys.length, optionalKeys: new Set(okeys) }; } function handleCatchall(proms, input, payload, ctx, def, inst) { const unrecognized = []; const keySet = def.keySet; const _catchall = def.catchall._zod; const t = _catchall.def.type; const isOptionalOut = _catchall.optout === "optional"; for (const key in input) { if (keySet.has(key)) continue; if (t === "never") { unrecognized.push(key); continue; } const r = _catchall.run({ value: input[key], issues: [] }, ctx); if (r instanceof Promise) { proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); } else { handlePropertyResult(r, payload, key, input, isOptionalOut); } } if (unrecognized.length) { payload.issues.push({ code: "unrecognized_keys", keys: unrecognized, input, inst }); } if (!proms.length) return payload; return Promise.all(proms).then(() => { return payload; }); } var $ZodObject = /* @__PURE__ */ $constructor("$ZodObject", (inst, def) => { $ZodType.init(inst, def); const desc = Object.getOwnPropertyDescriptor(def, "shape"); if (!desc?.get) { const sh = def.shape; Object.defineProperty(def, "shape", { get: () => { const newSh = { ...sh }; Object.defineProperty(def, "shape", { value: newSh }); return newSh; } }); } const _normalized = cached(() => normalizeDef(def)); defineLazy(inst._zod, "propValues", () => { const shape = def.shape; const propValues = {}; for (const key in shape) { const field = shape[key]._zod; if (field.values) { propValues[key] ?? (propValues[key] = new Set); for (const v of field.values) propValues[key].add(v); } } return propValues; }); const isObject2 = isObject; const catchall = def.catchall; let value; inst._zod.parse = (payload, ctx) => { value ?? (value = _normalized.value); const input = payload.value; if (!isObject2(input)) { payload.issues.push({ expected: "object", code: "invalid_type", input, inst }); return payload; } payload.value = {}; const proms = []; const shape = value.shape; for (const key of value.keys) { const el = shape[key]; const isOptionalOut = el._zod.optout === "optional"; const r = el._zod.run({ value: input[key], issues: [] }, ctx); if (r instanceof Promise) { proms.push(r.then((r2) => handlePropertyResult(r2, payload, key, input, isOptionalOut))); } else { handlePropertyResult(r, payload, key, input, isOptionalOut); } } if (!catchall) { return proms.length ? Promise.all(proms).then(() => payload) : payload; } return handleCatchall(proms, input, payload, ctx, _normalized.value, inst); }; }); var $ZodObjectJIT = /* @__PURE__ */ $constructor("$ZodObjectJIT", (inst, def) => { $ZodObject.init(inst, def); const superParse = inst._zod.parse; const _normalized = cached(() => normalizeDef(def)); const generateFastpass = (shape) => { const doc = new Doc(["shape", "payload", "ctx"]); const normalized = _normalized.value; const parseStr = (key) => { const k = esc(key); return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`; }; doc.write(`const input = payload.value;`); const ids = Object.create(null); let counter = 0; for (const key of normalized.keys) { ids[key] = `key_${counter++}`; } doc.write(`const newResult = {};`); for (const key of normalized.keys) { const id = ids[key]; const k = esc(key); const schema = shape[key]; const isOptionalOut = schema?._zod?.optout === "optional"; doc.write(`const ${id} = ${parseStr(key)};`); if (isOptionalOut) { doc.write(` if (${id}.issues.length) { if (${k} in input) { payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ ...iss, path: iss.path ? [${k}, ...iss.path] : [${k}] }))); } } if (${id}.value === undefined) { if (${k} in input) { newResult[${k}] = undefined; } } else { newResult[${k}] = ${id}.value; } `); } else { doc.write(` if (${id}.issues.length) { payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ ...iss, path: iss.path ? [${k}, ...iss.path] : [${k}] }))); } if (${id}.value === undefined) { if (${k} in input) { newResult[${k}] = undefined; } } else { newResult[${k}] = ${id}.value; } `); } } doc.write(`payload.value = newResult;`); doc.write(`return payload;`); const fn = doc.compile(); return (payload, ctx) => fn(shape, payload, ctx); }; let fastpass; const isObject2 = isObject; const jit = !globalConfig.jitless; const allowsEval2 = allowsEval; const fastEnabled = jit && allowsEval2.value; const catchall = def.catchall; let value; inst._zod.parse = (payload, ctx) => { value ?? (value = _normalized.value); const input = payload.value; if (!isObject2(input)) { payload.issues.push({ expected: "object", code: "invalid_type", input, inst }); return payload; } if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) { if (!fastpass) fastpass = generateFastpass(def.shape); payload = fastpass(payload, ctx); if (!catchall) return payload; return handleCatchall([], input, payload, ctx, value, inst); } return superParse(payload, ctx); }; }); function handleUnionResults(results, final, inst, ctx) { for (const result of results) { if (result.issues.length === 0) { final.value = result.value; return final; } } const nonaborted = results.filter((r) => !aborted(r)); if (nonaborted.length === 1) { final.value = nonaborted[0].value; return nonaborted[0]; } final.issues.push({ code: "invalid_union", input: final.value, inst, errors: results.map((result) => result.issues.map((iss) => finalizeIssue(iss, ctx, config()))) }); return final; } var $ZodUnion = /* @__PURE__ */ $constructor("$ZodUnion", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : undefined); defineLazy(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined); defineLazy(inst._zod, "values", () => { if (def.options.every((o) => o._zod.values)) { return new Set(def.options.flatMap((option) => Array.from(option._zod.values))); } return; }); defineLazy(inst._zod, "pattern", () => { if (def.options.every((o) => o._zod.pattern)) { const patterns = def.options.map((o) => o._zod.pattern); return new RegExp(`^(${patterns.map((p) => cleanRegex(p.source)).join("|")})$`); } return; }); const single = def.options.length === 1; const first = def.options[0]._zod.run; inst._zod.parse = (payload, ctx) => { if (single) { return first(payload, ctx); } let async = false; const results = []; for (const option of def.options) { const result = option._zod.run({ value: payload.value, issues: [] }, ctx); if (result instanceof Promise) { results.push(result); async = true; } else { if (result.issues.length === 0) return result; results.push(result); } } if (!async) return handleUnionResults(results, payload, inst, ctx); return Promise.all(results).then((results2) => { return handleUnionResults(results2, payload, inst, ctx); }); }; }); var $ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("$ZodDiscriminatedUnion", (inst, def) => { def.inclusive = false; $ZodUnion.init(inst, def); const _super = inst._zod.parse; defineLazy(inst._zod, "propValues", () => { const propValues = {}; for (const option of def.options) { const pv = option._zod.propValues; if (!pv || Object.keys(pv).length === 0) throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`); for (const [k, v] of Object.entries(pv)) { if (!propValues[k]) propValues[k] = new Set; for (const val of v) { propValues[k].add(val); } } } return propValues; }); const disc = cached(() => { const opts = def.options; const map = new Map; for (const o of opts) { const values = o._zod.propValues?.[def.discriminator]; if (!values || values.size === 0) throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`); for (const v of values) { if (map.has(v)) { throw new Error(`Duplicate discriminator value "${String(v)}"`); } map.set(v, o); } } return map; }); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!isObject(input)) { payload.issues.push({ code: "invalid_type", expected: "object", input, inst }); return payload; } const opt = disc.value.get(input?.[def.discriminator]); if (opt) { return opt._zod.run(payload, ctx); } if (def.unionFallback) { return _super(payload, ctx); } payload.issues.push({ code: "invalid_union", errors: [], note: "No matching discriminator", discriminator: def.discriminator, input, path: [def.discriminator], inst }); return payload; }; }); var $ZodIntersection = /* @__PURE__ */ $constructor("$ZodIntersection", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; const left = def.left._zod.run({ value: input, issues: [] }, ctx); const right = def.right._zod.run({ value: input, issues: [] }, ctx); const async = left instanceof Promise || right instanceof Promise; if (async) { return Promise.all([left, right]).then(([left2, right2]) => { return handleIntersectionResults(payload, left2, right2); }); } return handleIntersectionResults(payload, left, right); }; }); function mergeValues(a, b) { if (a === b) { return { valid: true, data: a }; } if (a instanceof Date && b instanceof Date && +a === +b) { return { valid: true, data: a }; } if (isPlainObject(a) && isPlainObject(b)) { const bKeys = Object.keys(b); const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1); const newObj = { ...a, ...b }; for (const key of sharedKeys) { const sharedValue = mergeValues(a[key], b[key]); if (!sharedValue.valid) { return { valid: false, mergeErrorPath: [key, ...sharedValue.mergeErrorPath] }; } newObj[key] = sharedValue.data; } return { valid: true, data: newObj }; } if (Array.isArray(a) && Array.isArray(b)) { if (a.length !== b.length) { return { valid: false, mergeErrorPath: [] }; } const newArray = []; for (let index = 0;index < a.length; index++) { const itemA = a[index]; const itemB = b[index]; const sharedValue = mergeValues(itemA, itemB); if (!sharedValue.valid) { return { valid: false, mergeErrorPath: [index, ...sharedValue.mergeErrorPath] }; } newArray.push(sharedValue.data); } return { valid: true, data: newArray }; } return { valid: false, mergeErrorPath: [] }; } function handleIntersectionResults(result, left, right) { const unrecKeys = new Map; let unrecIssue; for (const iss of left.issues) { if (iss.code === "unrecognized_keys") { unrecIssue ?? (unrecIssue = iss); for (const k of iss.keys) { if (!unrecKeys.has(k)) unrecKeys.set(k, {}); unrecKeys.get(k).l = true; } } else { result.issues.push(iss); } } for (const iss of right.issues) { if (iss.code === "unrecognized_keys") { for (const k of iss.keys) { if (!unrecKeys.has(k)) unrecKeys.set(k, {}); unrecKeys.get(k).r = true; } } else { result.issues.push(iss); } } const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k); if (bothKeys.length && unrecIssue) { result.issues.push({ ...unrecIssue, keys: bothKeys }); } if (aborted(result)) return result; const merged = mergeValues(left.value, right.value); if (!merged.valid) { throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`); } result.value = merged.data; return result; } var $ZodRecord = /* @__PURE__ */ $constructor("$ZodRecord", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!isPlainObject(input)) { payload.issues.push({ expected: "record", code: "invalid_type", input, inst }); return payload; } const proms = []; const values = def.keyType._zod.values; if (values) { payload.value = {}; const recordKeys = new Set; for (const key of values) { if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") { recordKeys.add(typeof key === "number" ? key.toString() : key); const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => { if (result2.issues.length) { payload.issues.push(...prefixIssues(key, result2.issues)); } payload.value[key] = result2.value; })); } else { if (result.issues.length) { payload.issues.push(...prefixIssues(key, result.issues)); } payload.value[key] = result.value; } } } let unrecognized; for (const key in input) { if (!recordKeys.has(key)) { unrecognized = unrecognized ?? []; unrecognized.push(key); } } if (unrecognized && unrecognized.length > 0) { payload.issues.push({ code: "unrecognized_keys", input, inst, keys: unrecognized }); } } else { payload.value = {}; for (const key of Reflect.ownKeys(input)) { if (key === "__proto__") continue; let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); if (keyResult instanceof Promise) { throw new Error("Async schemas not supported in object keys currently"); } const checkNumericKey = typeof key === "string" && number.test(key) && keyResult.issues.length; if (checkNumericKey) { const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx); if (retryResult instanceof Promise) { throw new Error("Async schemas not supported in object keys currently"); } if (retryResult.issues.length === 0) { keyResult = retryResult; } } if (keyResult.issues.length) { if (def.mode === "loose") { payload.value[key] = input[key]; } else { payload.issues.push({ code: "invalid_key", origin: "record", issues: keyResult.issues.map((iss) => finalizeIssue(iss, ctx, config())), input: key, path: [key], inst }); } continue; } const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => { if (result2.issues.length) { payload.issues.push(...prefixIssues(key, result2.issues)); } payload.value[keyResult.value] = result2.value; })); } else { if (result.issues.length) { payload.issues.push(...prefixIssues(key, result.issues)); } payload.value[keyResult.value] = result.value; } } } if (proms.length) { return Promise.all(proms).then(() => payload); } return payload; }; }); var $ZodEnum = /* @__PURE__ */ $constructor("$ZodEnum", (inst, def) => { $ZodType.init(inst, def); const values = getEnumValues(def.entries); const valuesSet = new Set(values); inst._zod.values = valuesSet; inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex(o) : o.toString()).join("|")})$`); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (valuesSet.has(input)) { return payload; } payload.issues.push({ code: "invalid_value", values, input, inst }); return payload; }; }); var $ZodLiteral = /* @__PURE__ */ $constructor("$ZodLiteral", (inst, def) => { $ZodType.init(inst, def); if (def.values.length === 0) { throw new Error("Cannot create literal schema with no valid values"); } const values = new Set(def.values); inst._zod.values = values; inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex(o) : o ? escapeRegex(o.toString()) : String(o)).join("|")})$`); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (values.has(input)) { return payload; } payload.issues.push({ code: "invalid_value", values: def.values, input, inst }); return payload; }; }); var $ZodTransform = /* @__PURE__ */ $constructor("$ZodTransform", (inst, def) => { $ZodType.init(inst, def); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { throw new $ZodEncodeError(inst.constructor.name); } const _out = def.transform(payload.value, payload); if (ctx.async) { const output = _out instanceof Promise ? _out : Promise.resolve(_out); return output.then((output2) => { payload.value = output2; return payload; }); } if (_out instanceof Promise) { throw new $ZodAsyncError; } payload.value = _out; return payload; }; }); function handleOptionalResult(result, input) { if (result.issues.length && input === undefined) { return { issues: [], value: undefined }; } return result; } var $ZodOptional = /* @__PURE__ */ $constructor("$ZodOptional", (inst, def) => { $ZodType.init(inst, def); inst._zod.optin = "optional"; inst._zod.optout = "optional"; defineLazy(inst._zod, "values", () => { return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined; }); defineLazy(inst._zod, "pattern", () => { const pattern = def.innerType._zod.pattern; return pattern ? new RegExp(`^(${cleanRegex(pattern.source)})?$`) : undefined; }); inst._zod.parse = (payload, ctx) => { if (def.innerType._zod.optin === "optional") { const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) return result.then((r) => handleOptionalResult(r, payload.value)); return handleOptionalResult(result, payload.value); } if (payload.value === undefined) { return payload; } return def.innerType._zod.run(payload, ctx); }; }); var $ZodExactOptional = /* @__PURE__ */ $constructor("$ZodExactOptional", (inst, def) => { $ZodOptional.init(inst, def); defineLazy(inst._zod, "values", () => def.innerType._zod.values); defineLazy(inst._zod, "pattern", () => def.innerType._zod.pattern); inst._zod.parse = (payload, ctx) => { return def.innerType._zod.run(payload, ctx); }; }); var $ZodNullable = /* @__PURE__ */ $constructor("$ZodNullable", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); defineLazy(inst._zod, "pattern", () => { const pattern = def.innerType._zod.pattern; return pattern ? new RegExp(`^(${cleanRegex(pattern.source)}|null)$`) : undefined; }); defineLazy(inst._zod, "values", () => { return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined; }); inst._zod.parse = (payload, ctx) => { if (payload.value === null) return payload; return def.innerType._zod.run(payload, ctx); }; }); var $ZodDefault = /* @__PURE__ */ $constructor("$ZodDefault", (inst, def) => { $ZodType.init(inst, def); inst._zod.optin = "optional"; defineLazy(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { return def.innerType._zod.run(payload, ctx); } if (payload.value === undefined) { payload.value = def.defaultValue; return payload; } const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => handleDefaultResult(result2, def)); } return handleDefaultResult(result, def); }; }); function handleDefaultResult(payload, def) { if (payload.value === undefined) { payload.value = def.defaultValue; } return payload; } var $ZodPrefault = /* @__PURE__ */ $constructor("$ZodPrefault", (inst, def) => { $ZodType.init(inst, def); inst._zod.optin = "optional"; defineLazy(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { return def.innerType._zod.run(payload, ctx); } if (payload.value === undefined) { payload.value = def.defaultValue; } return def.innerType._zod.run(payload, ctx); }; }); var $ZodNonOptional = /* @__PURE__ */ $constructor("$ZodNonOptional", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "values", () => { const v = def.innerType._zod.values; return v ? new Set([...v].filter((x) => x !== undefined)) : undefined; }); inst._zod.parse = (payload, ctx) => { const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => handleNonOptionalResult(result2, inst)); } return handleNonOptionalResult(result, inst); }; }); function handleNonOptionalResult(payload, inst) { if (!payload.issues.length && payload.value === undefined) { payload.issues.push({ code: "invalid_type", expected: "nonoptional", input: payload.value, inst }); } return payload; } var $ZodCatch = /* @__PURE__ */ $constructor("$ZodCatch", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "optin", () => def.innerType._zod.optin); defineLazy(inst._zod, "optout", () => def.innerType._zod.optout); defineLazy(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { return def.innerType._zod.run(payload, ctx); } const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => { payload.value = result2.value; if (result2.issues.length) { payload.value = def.catchValue({ ...payload, error: { issues: result2.issues.map((iss) => finalizeIssue(iss, ctx, config())) }, input: payload.value }); payload.issues = []; } return payload; }); } payload.value = result.value; if (result.issues.length) { payload.value = def.catchValue({ ...payload, error: { issues: result.issues.map((iss) => finalizeIssue(iss, ctx, config())) }, input: payload.value }); payload.issues = []; } return payload; }; }); var $ZodPipe = /* @__PURE__ */ $constructor("$ZodPipe", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "values", () => def.in._zod.values); defineLazy(inst._zod, "optin", () => def.in._zod.optin); defineLazy(inst._zod, "optout", () => def.out._zod.optout); defineLazy(inst._zod, "propValues", () => def.in._zod.propValues); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { const right = def.out._zod.run(payload, ctx); if (right instanceof Promise) { return right.then((right2) => handlePipeResult(right2, def.in, ctx)); } return handlePipeResult(right, def.in, ctx); } const left = def.in._zod.run(payload, ctx); if (left instanceof Promise) { return left.then((left2) => handlePipeResult(left2, def.out, ctx)); } return handlePipeResult(left, def.out, ctx); }; }); function handlePipeResult(left, next, ctx) { if (left.issues.length) { left.aborted = true; return left; } return next._zod.run({ value: left.value, issues: left.issues }, ctx); } var $ZodReadonly = /* @__PURE__ */ $constructor("$ZodReadonly", (inst, def) => { $ZodType.init(inst, def); defineLazy(inst._zod, "propValues", () => def.innerType._zod.propValues); defineLazy(inst._zod, "values", () => def.innerType._zod.values); defineLazy(inst._zod, "optin", () => def.innerType?._zod?.optin); defineLazy(inst._zod, "optout", () => def.innerType?._zod?.optout); inst._zod.parse = (payload, ctx) => { if (ctx.direction === "backward") { return def.innerType._zod.run(payload, ctx); } const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then(handleReadonlyResult); } return handleReadonlyResult(result); }; }); function handleReadonlyResult(payload) { payload.value = Object.freeze(payload.value); return payload; } var $ZodCustom = /* @__PURE__ */ $constructor("$ZodCustom", (inst, def) => { $ZodCheck.init(inst, def); $ZodType.init(inst, def); inst._zod.parse = (payload, _) => { return payload; }; inst._zod.check = (payload) => { const input = payload.value; const r = def.fn(input); if (r instanceof Promise) { return r.then((r2) => handleRefineResult(r2, payload, input, inst)); } handleRefineResult(r, payload, input, inst); return; }; }); function handleRefineResult(result, payload, input, inst) { if (!result) { const _iss = { code: "custom", input, inst, path: [...inst._zod.def.path ?? []], continue: !inst._zod.def.abort }; if (inst._zod.def.params) _iss.params = inst._zod.def.params; payload.issues.push(issue(_iss)); } } // node_modules/zod/v4/locales/en.js var error = () => { const Sizable = { string: { unit: "characters", verb: "to have" }, file: { unit: "bytes", verb: "to have" }, array: { unit: "items", verb: "to have" }, set: { unit: "items", verb: "to have" }, map: { unit: "entries", verb: "to have" } }; function getSizing(origin) { return Sizable[origin] ?? null; } const FormatDictionary = { regex: "input", email: "email address", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datetime", date: "ISO date", time: "ISO time", duration: "ISO duration", ipv4: "IPv4 address", ipv6: "IPv6 address", mac: "MAC address", cidrv4: "IPv4 range", cidrv6: "IPv6 range", base64: "base64-encoded string", base64url: "base64url-encoded string", json_string: "JSON string", e164: "E.164 number", jwt: "JWT", template_literal: "input" }; const TypeDictionary = { nan: "NaN" }; return (issue2) => { switch (issue2.code) { case "invalid_type": { const expected = TypeDictionary[issue2.expected] ?? issue2.expected; const receivedType = parsedType(issue2.input); const received = TypeDictionary[receivedType] ?? receivedType; return `Invalid input: expected ${expected}, received ${received}`; } case "invalid_value": if (issue2.values.length === 1) return `Invalid input: expected ${stringifyPrimitive(issue2.values[0])}`; return `Invalid option: expected one of ${joinValues(issue2.values, "|")}`; case "too_big": { const adj = issue2.inclusive ? "<=" : "<"; const sizing = getSizing(issue2.origin); if (sizing) return `Too big: expected ${issue2.origin ?? "value"} to have ${adj}${issue2.maximum.toString()} ${sizing.unit ?? "elements"}`; return `Too big: expected ${issue2.origin ?? "value"} to be ${adj}${issue2.maximum.toString()}`; } case "too_small": { const adj = issue2.inclusive ? ">=" : ">"; const sizing = getSizing(issue2.origin); if (sizing) { return `Too small: expected ${issue2.origin} to have ${adj}${issue2.minimum.toString()} ${sizing.unit}`; } return `Too small: expected ${issue2.origin} to be ${adj}${issue2.minimum.toString()}`; } case "invalid_format": { const _issue = issue2; if (_issue.format === "starts_with") { return `Invalid string: must start with "${_issue.prefix}"`; } if (_issue.format === "ends_with") return `Invalid string: must end with "${_issue.suffix}"`; if (_issue.format === "includes") return `Invalid string: must include "${_issue.includes}"`; if (_issue.format === "regex") return `Invalid string: must match pattern ${_issue.pattern}`; return `Invalid ${FormatDictionary[_issue.format] ?? issue2.format}`; } case "not_multiple_of": return `Invalid number: must be a multiple of ${issue2.divisor}`; case "unrecognized_keys": return `Unrecognized key${issue2.keys.length > 1 ? "s" : ""}: ${joinValues(issue2.keys, ", ")}`; case "invalid_key": return `Invalid key in ${issue2.origin}`; case "invalid_union": return "Invalid input"; case "invalid_element": return `Invalid value in ${issue2.origin}`; default: return `Invalid input`; } }; }; function en_default() { return { localeError: error() }; } // node_modules/zod/v4/core/registries.js var _a; var $output = Symbol("ZodOutput"); var $input = Symbol("ZodInput"); class $ZodRegistry { constructor() { this._map = new WeakMap; this._idmap = new Map; } add(schema, ..._meta) { const meta = _meta[0]; this._map.set(schema, meta); if (meta && typeof meta === "object" && "id" in meta) { this._idmap.set(meta.id, schema); } return this; } clear() { this._map = new WeakMap; this._idmap = new Map; return this; } remove(schema) { const meta = this._map.get(schema); if (meta && typeof meta === "object" && "id" in meta) { this._idmap.delete(meta.id); } this._map.delete(schema); return this; } get(schema) { const p = schema._zod.parent; if (p) { const pm = { ...this.get(p) ?? {} }; delete pm.id; const f = { ...pm, ...this._map.get(schema) }; return Object.keys(f).length ? f : undefined; } return this._map.get(schema); } has(schema) { return this._map.has(schema); } } function registry() { return new $ZodRegistry; } (_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry()); var globalRegistry = globalThis.__zod_globalRegistry; // node_modules/zod/v4/core/api.js function _string(Class2, params) { return new Class2({ type: "string", ...normalizeParams(params) }); } function _email(Class2, params) { return new Class2({ type: "string", format: "email", check: "string_format", abort: false, ...normalizeParams(params) }); } function _guid(Class2, params) { return new Class2({ type: "string", format: "guid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _uuid(Class2, params) { return new Class2({ type: "string", format: "uuid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _uuidv4(Class2, params) { return new Class2({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v4", ...normalizeParams(params) }); } function _uuidv6(Class2, params) { return new Class2({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v6", ...normalizeParams(params) }); } function _uuidv7(Class2, params) { return new Class2({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v7", ...normalizeParams(params) }); } function _url(Class2, params) { return new Class2({ type: "string", format: "url", check: "string_format", abort: false, ...normalizeParams(params) }); } function _emoji2(Class2, params) { return new Class2({ type: "string", format: "emoji", check: "string_format", abort: false, ...normalizeParams(params) }); } function _nanoid(Class2, params) { return new Class2({ type: "string", format: "nanoid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _cuid(Class2, params) { return new Class2({ type: "string", format: "cuid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _cuid2(Class2, params) { return new Class2({ type: "string", format: "cuid2", check: "string_format", abort: false, ...normalizeParams(params) }); } function _ulid(Class2, params) { return new Class2({ type: "string", format: "ulid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _xid(Class2, params) { return new Class2({ type: "string", format: "xid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _ksuid(Class2, params) { return new Class2({ type: "string", format: "ksuid", check: "string_format", abort: false, ...normalizeParams(params) }); } function _ipv4(Class2, params) { return new Class2({ type: "string", format: "ipv4", check: "string_format", abort: false, ...normalizeParams(params) }); } function _ipv6(Class2, params) { return new Class2({ type: "string", format: "ipv6", check: "string_format", abort: false, ...normalizeParams(params) }); } function _cidrv4(Class2, params) { return new Class2({ type: "string", format: "cidrv4", check: "string_format", abort: false, ...normalizeParams(params) }); } function _cidrv6(Class2, params) { return new Class2({ type: "string", format: "cidrv6", check: "string_format", abort: false, ...normalizeParams(params) }); } function _base64(Class2, params) { return new Class2({ type: "string", format: "base64", check: "string_format", abort: false, ...normalizeParams(params) }); } function _base64url(Class2, params) { return new Class2({ type: "string", format: "base64url", check: "string_format", abort: false, ...normalizeParams(params) }); } function _e164(Class2, params) { return new Class2({ type: "string", format: "e164", check: "string_format", abort: false, ...normalizeParams(params) }); } function _jwt(Class2, params) { return new Class2({ type: "string", format: "jwt", check: "string_format", abort: false, ...normalizeParams(params) }); } function _isoDateTime(Class2, params) { return new Class2({ type: "string", format: "datetime", check: "string_format", offset: false, local: false, precision: null, ...normalizeParams(params) }); } function _isoDate(Class2, params) { return new Class2({ type: "string", format: "date", check: "string_format", ...normalizeParams(params) }); } function _isoTime(Class2, params) { return new Class2({ type: "string", format: "time", check: "string_format", precision: null, ...normalizeParams(params) }); } function _isoDuration(Class2, params) { return new Class2({ type: "string", format: "duration", check: "string_format", ...normalizeParams(params) }); } function _number(Class2, params) { return new Class2({ type: "number", checks: [], ...normalizeParams(params) }); } function _int(Class2, params) { return new Class2({ type: "number", check: "number_format", abort: false, format: "safeint", ...normalizeParams(params) }); } function _boolean(Class2, params) { return new Class2({ type: "boolean", ...normalizeParams(params) }); } function _null2(Class2, params) { return new Class2({ type: "null", ...normalizeParams(params) }); } function _unknown(Class2) { return new Class2({ type: "unknown" }); } function _never(Class2, params) { return new Class2({ type: "never", ...normalizeParams(params) }); } function _lt(value, params) { return new $ZodCheckLessThan({ check: "less_than", ...normalizeParams(params), value, inclusive: false }); } function _lte(value, params) { return new $ZodCheckLessThan({ check: "less_than", ...normalizeParams(params), value, inclusive: true }); } function _gt(value, params) { return new $ZodCheckGreaterThan({ check: "greater_than", ...normalizeParams(params), value, inclusive: false }); } function _gte(value, params) { return new $ZodCheckGreaterThan({ check: "greater_than", ...normalizeParams(params), value, inclusive: true }); } function _multipleOf(value, params) { return new $ZodCheckMultipleOf({ check: "multiple_of", ...normalizeParams(params), value }); } function _maxLength(maximum, params) { const ch = new $ZodCheckMaxLength({ check: "max_length", ...normalizeParams(params), maximum }); return ch; } function _minLength(minimum, params) { return new $ZodCheckMinLength({ check: "min_length", ...normalizeParams(params), minimum }); } function _length(length, params) { return new $ZodCheckLengthEquals({ check: "length_equals", ...normalizeParams(params), length }); } function _regex(pattern, params) { return new $ZodCheckRegex({ check: "string_format", format: "regex", ...normalizeParams(params), pattern }); } function _lowercase(params) { return new $ZodCheckLowerCase({ check: "string_format", format: "lowercase", ...normalizeParams(params) }); } function _uppercase(params) { return new $ZodCheckUpperCase({ check: "string_format", format: "uppercase", ...normalizeParams(params) }); } function _includes(includes, params) { return new $ZodCheckIncludes({ check: "string_format", format: "includes", ...normalizeParams(params), includes }); } function _startsWith(prefix, params) { return new $ZodCheckStartsWith({ check: "string_format", format: "starts_with", ...normalizeParams(params), prefix }); } function _endsWith(suffix, params) { return new $ZodCheckEndsWith({ check: "string_format", format: "ends_with", ...normalizeParams(params), suffix }); } function _overwrite(tx) { return new $ZodCheckOverwrite({ check: "overwrite", tx }); } function _normalize(form) { return _overwrite((input) => input.normalize(form)); } function _trim() { return _overwrite((input) => input.trim()); } function _toLowerCase() { return _overwrite((input) => input.toLowerCase()); } function _toUpperCase() { return _overwrite((input) => input.toUpperCase()); } function _slugify() { return _overwrite((input) => slugify(input)); } function _array(Class2, element, params) { return new Class2({ type: "array", element, ...normalizeParams(params) }); } function _custom(Class2, fn, _params) { const norm = normalizeParams(_params); norm.abort ?? (norm.abort = true); const schema = new Class2({ type: "custom", check: "custom", fn, ...norm }); return schema; } function _refine(Class2, fn, _params) { const schema = new Class2({ type: "custom", check: "custom", fn, ...normalizeParams(_params) }); return schema; } function _superRefine(fn) { const ch = _check((payload) => { payload.addIssue = (issue2) => { if (typeof issue2 === "string") { payload.issues.push(issue(issue2, payload.value, ch._zod.def)); } else { const _issue = issue2; if (_issue.fatal) _issue.continue = false; _issue.code ?? (_issue.code = "custom"); _issue.input ?? (_issue.input = payload.value); _issue.inst ?? (_issue.inst = ch); _issue.continue ?? (_issue.continue = !ch._zod.def.abort); payload.issues.push(issue(_issue)); } }; return fn(payload.value, payload); }); return ch; } function _check(fn, params) { const ch = new $ZodCheck({ check: "custom", ...normalizeParams(params) }); ch._zod.check = fn; return ch; } // node_modules/zod/v4/core/to-json-schema.js function initializeContext(params) { let target = params?.target ?? "draft-2020-12"; if (target === "draft-4") target = "draft-04"; if (target === "draft-7") target = "draft-07"; return { processors: params.processors ?? {}, metadataRegistry: params?.metadata ?? globalRegistry, target, unrepresentable: params?.unrepresentable ?? "throw", override: params?.override ?? (() => {}), io: params?.io ?? "output", counter: 0, seen: new Map, cycles: params?.cycles ?? "ref", reused: params?.reused ?? "inline", external: params?.external ?? undefined }; } function process2(schema, ctx, _params = { path: [], schemaPath: [] }) { var _a2; const def = schema._zod.def; const seen = ctx.seen.get(schema); if (seen) { seen.count++; const isCycle = _params.schemaPath.includes(schema); if (isCycle) { seen.cycle = _params.path; } return seen.schema; } const result = { schema: {}, count: 1, cycle: undefined, path: _params.path }; ctx.seen.set(schema, result); const overrideSchema = schema._zod.toJSONSchema?.(); if (overrideSchema) { result.schema = overrideSchema; } else { const params = { ..._params, schemaPath: [..._params.schemaPath, schema], path: _params.path }; if (schema._zod.processJSONSchema) { schema._zod.processJSONSchema(ctx, result.schema, params); } else { const _json = result.schema; const processor = ctx.processors[def.type]; if (!processor) { throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`); } processor(schema, ctx, _json, params); } const parent = schema._zod.parent; if (parent) { if (!result.ref) result.ref = parent; process2(parent, ctx, params); ctx.seen.get(parent).isParent = true; } } const meta = ctx.metadataRegistry.get(schema); if (meta) Object.assign(result.schema, meta); if (ctx.io === "input" && isTransforming(schema)) { delete result.schema.examples; delete result.schema.default; } if (ctx.io === "input" && result.schema._prefault) (_a2 = result.schema).default ?? (_a2.default = result.schema._prefault); delete result.schema._prefault; const _result = ctx.seen.get(schema); return _result.schema; } function extractDefs(ctx, schema) { const root = ctx.seen.get(schema); if (!root) throw new Error("Unprocessed schema. This is a bug in Zod."); const idToSchema = new Map; for (const entry of ctx.seen.entries()) { const id = ctx.metadataRegistry.get(entry[0])?.id; if (id) { const existing = idToSchema.get(id); if (existing && existing !== entry[0]) { throw new Error(`Duplicate schema id "${id}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`); } idToSchema.set(id, entry[0]); } } const makeURI = (entry) => { const defsSegment = ctx.target === "draft-2020-12" ? "$defs" : "definitions"; if (ctx.external) { const externalId = ctx.external.registry.get(entry[0])?.id; const uriGenerator = ctx.external.uri ?? ((id2) => id2); if (externalId) { return { ref: uriGenerator(externalId) }; } const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`; entry[1].defId = id; return { defId: id, ref: `${uriGenerator("__shared")}#/${defsSegment}/${id}` }; } if (entry[1] === root) { return { ref: "#" }; } const uriPrefix = `#`; const defUriPrefix = `${uriPrefix}/${defsSegment}/`; const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`; return { defId, ref: defUriPrefix + defId }; }; const extractToDef = (entry) => { if (entry[1].schema.$ref) { return; } const seen = entry[1]; const { ref, defId } = makeURI(entry); seen.def = { ...seen.schema }; if (defId) seen.defId = defId; const schema2 = seen.schema; for (const key in schema2) { delete schema2[key]; } schema2.$ref = ref; }; if (ctx.cycles === "throw") { for (const entry of ctx.seen.entries()) { const seen = entry[1]; if (seen.cycle) { throw new Error("Cycle detected: " + `#/${seen.cycle?.join("/")}/` + '\n\nSet the `cycles` parameter to `"ref"` to resolve cyclical schemas with defs.'); } } } for (const entry of ctx.seen.entries()) { const seen = entry[1]; if (schema === entry[0]) { extractToDef(entry); continue; } if (ctx.external) { const ext = ctx.external.registry.get(entry[0])?.id; if (schema !== entry[0] && ext) { extractToDef(entry); continue; } } const id = ctx.metadataRegistry.get(entry[0])?.id; if (id) { extractToDef(entry); continue; } if (seen.cycle) { extractToDef(entry); continue; } if (seen.count > 1) { if (ctx.reused === "ref") { extractToDef(entry); continue; } } } } function finalize(ctx, schema) { const root = ctx.seen.get(schema); if (!root) throw new Error("Unprocessed schema. This is a bug in Zod."); const flattenRef = (zodSchema) => { const seen = ctx.seen.get(zodSchema); if (seen.ref === null) return; const schema2 = seen.def ?? seen.schema; const _cached = { ...schema2 }; const ref = seen.ref; seen.ref = null; if (ref) { flattenRef(ref); const refSeen = ctx.seen.get(ref); const refSchema = refSeen.schema; if (refSchema.$ref && (ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0")) { schema2.allOf = schema2.allOf ?? []; schema2.allOf.push(refSchema); } else { Object.assign(schema2, refSchema); } Object.assign(schema2, _cached); const isParentRef = zodSchema._zod.parent === ref; if (isParentRef) { for (const key in schema2) { if (key === "$ref" || key === "allOf") continue; if (!(key in _cached)) { delete schema2[key]; } } } if (refSchema.$ref && refSeen.def) { for (const key in schema2) { if (key === "$ref" || key === "allOf") continue; if (key in refSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(refSeen.def[key])) { delete schema2[key]; } } } } const parent = zodSchema._zod.parent; if (parent && parent !== ref) { flattenRef(parent); const parentSeen = ctx.seen.get(parent); if (parentSeen?.schema.$ref) { schema2.$ref = parentSeen.schema.$ref; if (parentSeen.def) { for (const key in schema2) { if (key === "$ref" || key === "allOf") continue; if (key in parentSeen.def && JSON.stringify(schema2[key]) === JSON.stringify(parentSeen.def[key])) { delete schema2[key]; } } } } } ctx.override({ zodSchema, jsonSchema: schema2, path: seen.path ?? [] }); }; for (const entry of [...ctx.seen.entries()].reverse()) { flattenRef(entry[0]); } const result = {}; if (ctx.target === "draft-2020-12") { result.$schema = "https://json-schema.org/draft/2020-12/schema"; } else if (ctx.target === "draft-07") { result.$schema = "http://json-schema.org/draft-07/schema#"; } else if (ctx.target === "draft-04") { result.$schema = "http://json-schema.org/draft-04/schema#"; } else if (ctx.target === "openapi-3.0") {} else {} if (ctx.external?.uri) { const id = ctx.external.registry.get(schema)?.id; if (!id) throw new Error("Schema is missing an `id` property"); result.$id = ctx.external.uri(id); } Object.assign(result, root.def ?? root.schema); const defs = ctx.external?.defs ?? {}; for (const entry of ctx.seen.entries()) { const seen = entry[1]; if (seen.def && seen.defId) { defs[seen.defId] = seen.def; } } if (ctx.external) {} else { if (Object.keys(defs).length > 0) { if (ctx.target === "draft-2020-12") { result.$defs = defs; } else { result.definitions = defs; } } } try { const finalized = JSON.parse(JSON.stringify(result)); Object.defineProperty(finalized, "~standard", { value: { ...schema["~standard"], jsonSchema: { input: createStandardJSONSchemaMethod(schema, "input", ctx.processors), output: createStandardJSONSchemaMethod(schema, "output", ctx.processors) } }, enumerable: false, writable: false }); return finalized; } catch (_err) { throw new Error("Error converting schema to JSON."); } } function isTransforming(_schema, _ctx) { const ctx = _ctx ?? { seen: new Set }; if (ctx.seen.has(_schema)) return false; ctx.seen.add(_schema); const def = _schema._zod.def; if (def.type === "transform") return true; if (def.type === "array") return isTransforming(def.element, ctx); if (def.type === "set") return isTransforming(def.valueType, ctx); if (def.type === "lazy") return isTransforming(def.getter(), ctx); if (def.type === "promise" || def.type === "optional" || def.type === "nonoptional" || def.type === "nullable" || def.type === "readonly" || def.type === "default" || def.type === "prefault") { return isTransforming(def.innerType, ctx); } if (def.type === "intersection") { return isTransforming(def.left, ctx) || isTransforming(def.right, ctx); } if (def.type === "record" || def.type === "map") { return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx); } if (def.type === "pipe") { return isTransforming(def.in, ctx) || isTransforming(def.out, ctx); } if (def.type === "object") { for (const key in def.shape) { if (isTransforming(def.shape[key], ctx)) return true; } return false; } if (def.type === "union") { for (const option of def.options) { if (isTransforming(option, ctx)) return true; } return false; } if (def.type === "tuple") { for (const item of def.items) { if (isTransforming(item, ctx)) return true; } if (def.rest && isTransforming(def.rest, ctx)) return true; return false; } return false; } var createToJSONSchemaMethod = (schema, processors = {}) => (params) => { const ctx = initializeContext({ ...params, processors }); process2(schema, ctx); extractDefs(ctx, schema); return finalize(ctx, schema); }; var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => { const { libraryOptions, target } = params ?? {}; const ctx = initializeContext({ ...libraryOptions ?? {}, target, io, processors }); process2(schema, ctx); extractDefs(ctx, schema); return finalize(ctx, schema); }; // node_modules/zod/v4/core/json-schema-processors.js var formatMap = { guid: "uuid", url: "uri", datetime: "date-time", json_string: "json-string", regex: "" }; var stringProcessor = (schema, ctx, _json, _params) => { const json = _json; json.type = "string"; const { minimum, maximum, format, patterns, contentEncoding } = schema._zod.bag; if (typeof minimum === "number") json.minLength = minimum; if (typeof maximum === "number") json.maxLength = maximum; if (format) { json.format = formatMap[format] ?? format; if (json.format === "") delete json.format; if (format === "time") { delete json.format; } } if (contentEncoding) json.contentEncoding = contentEncoding; if (patterns && patterns.size > 0) { const regexes = [...patterns]; if (regexes.length === 1) json.pattern = regexes[0].source; else if (regexes.length > 1) { json.allOf = [ ...regexes.map((regex) => ({ ...ctx.target === "draft-07" || ctx.target === "draft-04" || ctx.target === "openapi-3.0" ? { type: "string" } : {}, pattern: regex.source })) ]; } } }; var numberProcessor = (schema, ctx, _json, _params) => { const json = _json; const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag; if (typeof format === "string" && format.includes("int")) json.type = "integer"; else json.type = "number"; if (typeof exclusiveMinimum === "number") { if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { json.minimum = exclusiveMinimum; json.exclusiveMinimum = true; } else { json.exclusiveMinimum = exclusiveMinimum; } } if (typeof minimum === "number") { json.minimum = minimum; if (typeof exclusiveMinimum === "number" && ctx.target !== "draft-04") { if (exclusiveMinimum >= minimum) delete json.minimum; else delete json.exclusiveMinimum; } } if (typeof exclusiveMaximum === "number") { if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { json.maximum = exclusiveMaximum; json.exclusiveMaximum = true; } else { json.exclusiveMaximum = exclusiveMaximum; } } if (typeof maximum === "number") { json.maximum = maximum; if (typeof exclusiveMaximum === "number" && ctx.target !== "draft-04") { if (exclusiveMaximum <= maximum) delete json.maximum; else delete json.exclusiveMaximum; } } if (typeof multipleOf === "number") json.multipleOf = multipleOf; }; var booleanProcessor = (_schema, _ctx, json, _params) => { json.type = "boolean"; }; var nullProcessor = (_schema, ctx, json, _params) => { if (ctx.target === "openapi-3.0") { json.type = "string"; json.nullable = true; json.enum = [null]; } else { json.type = "null"; } }; var neverProcessor = (_schema, _ctx, json, _params) => { json.not = {}; }; var unknownProcessor = (_schema, _ctx, _json, _params) => {}; var enumProcessor = (schema, _ctx, json, _params) => { const def = schema._zod.def; const values = getEnumValues(def.entries); if (values.every((v) => typeof v === "number")) json.type = "number"; if (values.every((v) => typeof v === "string")) json.type = "string"; json.enum = values; }; var literalProcessor = (schema, ctx, json, _params) => { const def = schema._zod.def; const vals = []; for (const val of def.values) { if (val === undefined) { if (ctx.unrepresentable === "throw") { throw new Error("Literal `undefined` cannot be represented in JSON Schema"); } else {} } else if (typeof val === "bigint") { if (ctx.unrepresentable === "throw") { throw new Error("BigInt literals cannot be represented in JSON Schema"); } else { vals.push(Number(val)); } } else { vals.push(val); } } if (vals.length === 0) {} else if (vals.length === 1) { const val = vals[0]; json.type = val === null ? "null" : typeof val; if (ctx.target === "draft-04" || ctx.target === "openapi-3.0") { json.enum = [val]; } else { json.const = val; } } else { if (vals.every((v) => typeof v === "number")) json.type = "number"; if (vals.every((v) => typeof v === "string")) json.type = "string"; if (vals.every((v) => typeof v === "boolean")) json.type = "boolean"; if (vals.every((v) => v === null)) json.type = "null"; json.enum = vals; } }; var customProcessor = (_schema, ctx, _json, _params) => { if (ctx.unrepresentable === "throw") { throw new Error("Custom types cannot be represented in JSON Schema"); } }; var transformProcessor = (_schema, ctx, _json, _params) => { if (ctx.unrepresentable === "throw") { throw new Error("Transforms cannot be represented in JSON Schema"); } }; var arrayProcessor = (schema, ctx, _json, params) => { const json = _json; const def = schema._zod.def; const { minimum, maximum } = schema._zod.bag; if (typeof minimum === "number") json.minItems = minimum; if (typeof maximum === "number") json.maxItems = maximum; json.type = "array"; json.items = process2(def.element, ctx, { ...params, path: [...params.path, "items"] }); }; var objectProcessor = (schema, ctx, _json, params) => { const json = _json; const def = schema._zod.def; json.type = "object"; json.properties = {}; const shape = def.shape; for (const key in shape) { json.properties[key] = process2(shape[key], ctx, { ...params, path: [...params.path, "properties", key] }); } const allKeys = new Set(Object.keys(shape)); const requiredKeys = new Set([...allKeys].filter((key) => { const v = def.shape[key]._zod; if (ctx.io === "input") { return v.optin === undefined; } else { return v.optout === undefined; } })); if (requiredKeys.size > 0) { json.required = Array.from(requiredKeys); } if (def.catchall?._zod.def.type === "never") { json.additionalProperties = false; } else if (!def.catchall) { if (ctx.io === "output") json.additionalProperties = false; } else if (def.catchall) { json.additionalProperties = process2(def.catchall, ctx, { ...params, path: [...params.path, "additionalProperties"] }); } }; var unionProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; const isExclusive = def.inclusive === false; const options = def.options.map((x, i) => process2(x, ctx, { ...params, path: [...params.path, isExclusive ? "oneOf" : "anyOf", i] })); if (isExclusive) { json.oneOf = options; } else { json.anyOf = options; } }; var intersectionProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; const a = process2(def.left, ctx, { ...params, path: [...params.path, "allOf", 0] }); const b = process2(def.right, ctx, { ...params, path: [...params.path, "allOf", 1] }); const isSimpleIntersection = (val) => ("allOf" in val) && Object.keys(val).length === 1; const allOf = [ ...isSimpleIntersection(a) ? a.allOf : [a], ...isSimpleIntersection(b) ? b.allOf : [b] ]; json.allOf = allOf; }; var recordProcessor = (schema, ctx, _json, params) => { const json = _json; const def = schema._zod.def; json.type = "object"; const keyType = def.keyType; const keyBag = keyType._zod.bag; const patterns = keyBag?.patterns; if (def.mode === "loose" && patterns && patterns.size > 0) { const valueSchema = process2(def.valueType, ctx, { ...params, path: [...params.path, "patternProperties", "*"] }); json.patternProperties = {}; for (const pattern of patterns) { json.patternProperties[pattern.source] = valueSchema; } } else { if (ctx.target === "draft-07" || ctx.target === "draft-2020-12") { json.propertyNames = process2(def.keyType, ctx, { ...params, path: [...params.path, "propertyNames"] }); } json.additionalProperties = process2(def.valueType, ctx, { ...params, path: [...params.path, "additionalProperties"] }); } const keyValues = keyType._zod.values; if (keyValues) { const validKeyValues = [...keyValues].filter((v) => typeof v === "string" || typeof v === "number"); if (validKeyValues.length > 0) { json.required = validKeyValues; } } }; var nullableProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; const inner = process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); if (ctx.target === "openapi-3.0") { seen.ref = def.innerType; json.nullable = true; } else { json.anyOf = [inner, { type: "null" }]; } }; var nonoptionalProcessor = (schema, ctx, _json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; }; var defaultProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; json.default = JSON.parse(JSON.stringify(def.defaultValue)); }; var prefaultProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; if (ctx.io === "input") json._prefault = JSON.parse(JSON.stringify(def.defaultValue)); }; var catchProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; let catchValue; try { catchValue = def.catchValue(undefined); } catch { throw new Error("Dynamic catch values are not supported in JSON Schema"); } json.default = catchValue; }; var pipeProcessor = (schema, ctx, _json, params) => { const def = schema._zod.def; const innerType = ctx.io === "input" ? def.in._zod.def.type === "transform" ? def.out : def.in : def.out; process2(innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = innerType; }; var readonlyProcessor = (schema, ctx, json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; json.readOnly = true; }; var optionalProcessor = (schema, ctx, _json, params) => { const def = schema._zod.def; process2(def.innerType, ctx, params); const seen = ctx.seen.get(schema); seen.ref = def.innerType; }; // node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js function isZ4Schema(s) { const schema = s; return !!schema._zod; } function safeParse2(schema, data) { if (isZ4Schema(schema)) { const result2 = safeParse(schema, data); return result2; } const v3Schema = schema; const result = v3Schema.safeParse(data); return result; } function getObjectShape(schema) { if (!schema) return; let rawShape; if (isZ4Schema(schema)) { const v4Schema = schema; rawShape = v4Schema._zod?.def?.shape; } else { const v3Schema = schema; rawShape = v3Schema.shape; } if (!rawShape) return; if (typeof rawShape === "function") { try { return rawShape(); } catch { return; } } return rawShape; } function getLiteralValue(schema) { if (isZ4Schema(schema)) { const v4Schema = schema; const def2 = v4Schema._zod?.def; if (def2) { if (def2.value !== undefined) return def2.value; if (Array.isArray(def2.values) && def2.values.length > 0) { return def2.values[0]; } } } const v3Schema = schema; const def = v3Schema._def; if (def) { if (def.value !== undefined) return def.value; if (Array.isArray(def.values) && def.values.length > 0) { return def.values[0]; } } const directValue = schema.value; if (directValue !== undefined) return directValue; return; } // node_modules/zod/v4/classic/iso.js var exports_iso = {}; __export(exports_iso, { time: () => time2, duration: () => duration2, datetime: () => datetime2, date: () => date2, ZodISOTime: () => ZodISOTime, ZodISODuration: () => ZodISODuration, ZodISODateTime: () => ZodISODateTime, ZodISODate: () => ZodISODate }); var ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => { $ZodISODateTime.init(inst, def); ZodStringFormat.init(inst, def); }); function datetime2(params) { return _isoDateTime(ZodISODateTime, params); } var ZodISODate = /* @__PURE__ */ $constructor("ZodISODate", (inst, def) => { $ZodISODate.init(inst, def); ZodStringFormat.init(inst, def); }); function date2(params) { return _isoDate(ZodISODate, params); } var ZodISOTime = /* @__PURE__ */ $constructor("ZodISOTime", (inst, def) => { $ZodISOTime.init(inst, def); ZodStringFormat.init(inst, def); }); function time2(params) { return _isoTime(ZodISOTime, params); } var ZodISODuration = /* @__PURE__ */ $constructor("ZodISODuration", (inst, def) => { $ZodISODuration.init(inst, def); ZodStringFormat.init(inst, def); }); function duration2(params) { return _isoDuration(ZodISODuration, params); } // node_modules/zod/v4/classic/errors.js var initializer2 = (inst, issues) => { $ZodError.init(inst, issues); inst.name = "ZodError"; Object.defineProperties(inst, { format: { value: (mapper) => formatError(inst, mapper) }, flatten: { value: (mapper) => flattenError(inst, mapper) }, addIssue: { value: (issue2) => { inst.issues.push(issue2); inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); } }, addIssues: { value: (issues2) => { inst.issues.push(...issues2); inst.message = JSON.stringify(inst.issues, jsonStringifyReplacer, 2); } }, isEmpty: { get() { return inst.issues.length === 0; } } }); }; var ZodError = $constructor("ZodError", initializer2); var ZodRealError = $constructor("ZodError", initializer2, { Parent: Error }); // node_modules/zod/v4/classic/parse.js var parse3 = /* @__PURE__ */ _parse(ZodRealError); var parseAsync2 = /* @__PURE__ */ _parseAsync(ZodRealError); var safeParse3 = /* @__PURE__ */ _safeParse(ZodRealError); var safeParseAsync2 = /* @__PURE__ */ _safeParseAsync(ZodRealError); var encode2 = /* @__PURE__ */ _encode(ZodRealError); var decode2 = /* @__PURE__ */ _decode(ZodRealError); var encodeAsync2 = /* @__PURE__ */ _encodeAsync(ZodRealError); var decodeAsync2 = /* @__PURE__ */ _decodeAsync(ZodRealError); var safeEncode2 = /* @__PURE__ */ _safeEncode(ZodRealError); var safeDecode2 = /* @__PURE__ */ _safeDecode(ZodRealError); var safeEncodeAsync2 = /* @__PURE__ */ _safeEncodeAsync(ZodRealError); var safeDecodeAsync2 = /* @__PURE__ */ _safeDecodeAsync(ZodRealError); // node_modules/zod/v4/classic/schemas.js var ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => { $ZodType.init(inst, def); Object.assign(inst["~standard"], { jsonSchema: { input: createStandardJSONSchemaMethod(inst, "input"), output: createStandardJSONSchemaMethod(inst, "output") } }); inst.toJSONSchema = createToJSONSchemaMethod(inst, {}); inst.def = def; inst.type = def.type; Object.defineProperty(inst, "_def", { value: def }); inst.check = (...checks2) => { return inst.clone(exports_util.mergeDefs(def, { checks: [ ...def.checks ?? [], ...checks2.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch) ] }), { parent: true }); }; inst.with = inst.check; inst.clone = (def2, params) => clone(inst, def2, params); inst.brand = () => inst; inst.register = (reg, meta2) => { reg.add(inst, meta2); return inst; }; inst.parse = (data, params) => parse3(inst, data, params, { callee: inst.parse }); inst.safeParse = (data, params) => safeParse3(inst, data, params); inst.parseAsync = async (data, params) => parseAsync2(inst, data, params, { callee: inst.parseAsync }); inst.safeParseAsync = async (data, params) => safeParseAsync2(inst, data, params); inst.spa = inst.safeParseAsync; inst.encode = (data, params) => encode2(inst, data, params); inst.decode = (data, params) => decode2(inst, data, params); inst.encodeAsync = async (data, params) => encodeAsync2(inst, data, params); inst.decodeAsync = async (data, params) => decodeAsync2(inst, data, params); inst.safeEncode = (data, params) => safeEncode2(inst, data, params); inst.safeDecode = (data, params) => safeDecode2(inst, data, params); inst.safeEncodeAsync = async (data, params) => safeEncodeAsync2(inst, data, params); inst.safeDecodeAsync = async (data, params) => safeDecodeAsync2(inst, data, params); inst.refine = (check, params) => inst.check(refine(check, params)); inst.superRefine = (refinement) => inst.check(superRefine(refinement)); inst.overwrite = (fn) => inst.check(_overwrite(fn)); inst.optional = () => optional(inst); inst.exactOptional = () => exactOptional(inst); inst.nullable = () => nullable(inst); inst.nullish = () => optional(nullable(inst)); inst.nonoptional = (params) => nonoptional(inst, params); inst.array = () => array(inst); inst.or = (arg) => union([inst, arg]); inst.and = (arg) => intersection(inst, arg); inst.transform = (tx) => pipe(inst, transform(tx)); inst.default = (def2) => _default(inst, def2); inst.prefault = (def2) => prefault(inst, def2); inst.catch = (params) => _catch(inst, params); inst.pipe = (target) => pipe(inst, target); inst.readonly = () => readonly(inst); inst.describe = (description) => { const cl = inst.clone(); globalRegistry.add(cl, { description }); return cl; }; Object.defineProperty(inst, "description", { get() { return globalRegistry.get(inst)?.description; }, configurable: true }); inst.meta = (...args) => { if (args.length === 0) { return globalRegistry.get(inst); } const cl = inst.clone(); globalRegistry.add(cl, args[0]); return cl; }; inst.isOptional = () => inst.safeParse(undefined).success; inst.isNullable = () => inst.safeParse(null).success; inst.apply = (fn) => fn(inst); return inst; }); var _ZodString = /* @__PURE__ */ $constructor("_ZodString", (inst, def) => { $ZodString.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => stringProcessor(inst, ctx, json, params); const bag = inst._zod.bag; inst.format = bag.format ?? null; inst.minLength = bag.minimum ?? null; inst.maxLength = bag.maximum ?? null; inst.regex = (...args) => inst.check(_regex(...args)); inst.includes = (...args) => inst.check(_includes(...args)); inst.startsWith = (...args) => inst.check(_startsWith(...args)); inst.endsWith = (...args) => inst.check(_endsWith(...args)); inst.min = (...args) => inst.check(_minLength(...args)); inst.max = (...args) => inst.check(_maxLength(...args)); inst.length = (...args) => inst.check(_length(...args)); inst.nonempty = (...args) => inst.check(_minLength(1, ...args)); inst.lowercase = (params) => inst.check(_lowercase(params)); inst.uppercase = (params) => inst.check(_uppercase(params)); inst.trim = () => inst.check(_trim()); inst.normalize = (...args) => inst.check(_normalize(...args)); inst.toLowerCase = () => inst.check(_toLowerCase()); inst.toUpperCase = () => inst.check(_toUpperCase()); inst.slugify = () => inst.check(_slugify()); }); var ZodString = /* @__PURE__ */ $constructor("ZodString", (inst, def) => { $ZodString.init(inst, def); _ZodString.init(inst, def); inst.email = (params) => inst.check(_email(ZodEmail, params)); inst.url = (params) => inst.check(_url(ZodURL, params)); inst.jwt = (params) => inst.check(_jwt(ZodJWT, params)); inst.emoji = (params) => inst.check(_emoji2(ZodEmoji, params)); inst.guid = (params) => inst.check(_guid(ZodGUID, params)); inst.uuid = (params) => inst.check(_uuid(ZodUUID, params)); inst.uuidv4 = (params) => inst.check(_uuidv4(ZodUUID, params)); inst.uuidv6 = (params) => inst.check(_uuidv6(ZodUUID, params)); inst.uuidv7 = (params) => inst.check(_uuidv7(ZodUUID, params)); inst.nanoid = (params) => inst.check(_nanoid(ZodNanoID, params)); inst.guid = (params) => inst.check(_guid(ZodGUID, params)); inst.cuid = (params) => inst.check(_cuid(ZodCUID, params)); inst.cuid2 = (params) => inst.check(_cuid2(ZodCUID2, params)); inst.ulid = (params) => inst.check(_ulid(ZodULID, params)); inst.base64 = (params) => inst.check(_base64(ZodBase64, params)); inst.base64url = (params) => inst.check(_base64url(ZodBase64URL, params)); inst.xid = (params) => inst.check(_xid(ZodXID, params)); inst.ksuid = (params) => inst.check(_ksuid(ZodKSUID, params)); inst.ipv4 = (params) => inst.check(_ipv4(ZodIPv4, params)); inst.ipv6 = (params) => inst.check(_ipv6(ZodIPv6, params)); inst.cidrv4 = (params) => inst.check(_cidrv4(ZodCIDRv4, params)); inst.cidrv6 = (params) => inst.check(_cidrv6(ZodCIDRv6, params)); inst.e164 = (params) => inst.check(_e164(ZodE164, params)); inst.datetime = (params) => inst.check(datetime2(params)); inst.date = (params) => inst.check(date2(params)); inst.time = (params) => inst.check(time2(params)); inst.duration = (params) => inst.check(duration2(params)); }); function string2(params) { return _string(ZodString, params); } var ZodStringFormat = /* @__PURE__ */ $constructor("ZodStringFormat", (inst, def) => { $ZodStringFormat.init(inst, def); _ZodString.init(inst, def); }); var ZodEmail = /* @__PURE__ */ $constructor("ZodEmail", (inst, def) => { $ZodEmail.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodGUID = /* @__PURE__ */ $constructor("ZodGUID", (inst, def) => { $ZodGUID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodUUID = /* @__PURE__ */ $constructor("ZodUUID", (inst, def) => { $ZodUUID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => { $ZodURL.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => { $ZodEmoji.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodNanoID = /* @__PURE__ */ $constructor("ZodNanoID", (inst, def) => { $ZodNanoID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodCUID = /* @__PURE__ */ $constructor("ZodCUID", (inst, def) => { $ZodCUID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodCUID2 = /* @__PURE__ */ $constructor("ZodCUID2", (inst, def) => { $ZodCUID2.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodULID = /* @__PURE__ */ $constructor("ZodULID", (inst, def) => { $ZodULID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodXID = /* @__PURE__ */ $constructor("ZodXID", (inst, def) => { $ZodXID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodKSUID = /* @__PURE__ */ $constructor("ZodKSUID", (inst, def) => { $ZodKSUID.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodIPv4 = /* @__PURE__ */ $constructor("ZodIPv4", (inst, def) => { $ZodIPv4.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodIPv6 = /* @__PURE__ */ $constructor("ZodIPv6", (inst, def) => { $ZodIPv6.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodCIDRv4 = /* @__PURE__ */ $constructor("ZodCIDRv4", (inst, def) => { $ZodCIDRv4.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodCIDRv6 = /* @__PURE__ */ $constructor("ZodCIDRv6", (inst, def) => { $ZodCIDRv6.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodBase64 = /* @__PURE__ */ $constructor("ZodBase64", (inst, def) => { $ZodBase64.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodBase64URL = /* @__PURE__ */ $constructor("ZodBase64URL", (inst, def) => { $ZodBase64URL.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodE164 = /* @__PURE__ */ $constructor("ZodE164", (inst, def) => { $ZodE164.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodJWT = /* @__PURE__ */ $constructor("ZodJWT", (inst, def) => { $ZodJWT.init(inst, def); ZodStringFormat.init(inst, def); }); var ZodNumber = /* @__PURE__ */ $constructor("ZodNumber", (inst, def) => { $ZodNumber.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => numberProcessor(inst, ctx, json, params); inst.gt = (value, params) => inst.check(_gt(value, params)); inst.gte = (value, params) => inst.check(_gte(value, params)); inst.min = (value, params) => inst.check(_gte(value, params)); inst.lt = (value, params) => inst.check(_lt(value, params)); inst.lte = (value, params) => inst.check(_lte(value, params)); inst.max = (value, params) => inst.check(_lte(value, params)); inst.int = (params) => inst.check(int(params)); inst.safe = (params) => inst.check(int(params)); inst.positive = (params) => inst.check(_gt(0, params)); inst.nonnegative = (params) => inst.check(_gte(0, params)); inst.negative = (params) => inst.check(_lt(0, params)); inst.nonpositive = (params) => inst.check(_lte(0, params)); inst.multipleOf = (value, params) => inst.check(_multipleOf(value, params)); inst.step = (value, params) => inst.check(_multipleOf(value, params)); inst.finite = () => inst; const bag = inst._zod.bag; inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null; inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null; inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5); inst.isFinite = true; inst.format = bag.format ?? null; }); function number2(params) { return _number(ZodNumber, params); } var ZodNumberFormat = /* @__PURE__ */ $constructor("ZodNumberFormat", (inst, def) => { $ZodNumberFormat.init(inst, def); ZodNumber.init(inst, def); }); function int(params) { return _int(ZodNumberFormat, params); } var ZodBoolean = /* @__PURE__ */ $constructor("ZodBoolean", (inst, def) => { $ZodBoolean.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => booleanProcessor(inst, ctx, json, params); }); function boolean2(params) { return _boolean(ZodBoolean, params); } var ZodNull = /* @__PURE__ */ $constructor("ZodNull", (inst, def) => { $ZodNull.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => nullProcessor(inst, ctx, json, params); }); function _null3(params) { return _null2(ZodNull, params); } var ZodUnknown = /* @__PURE__ */ $constructor("ZodUnknown", (inst, def) => { $ZodUnknown.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => unknownProcessor(inst, ctx, json, params); }); function unknown() { return _unknown(ZodUnknown); } var ZodNever = /* @__PURE__ */ $constructor("ZodNever", (inst, def) => { $ZodNever.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => neverProcessor(inst, ctx, json, params); }); function never(params) { return _never(ZodNever, params); } var ZodArray = /* @__PURE__ */ $constructor("ZodArray", (inst, def) => { $ZodArray.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => arrayProcessor(inst, ctx, json, params); inst.element = def.element; inst.min = (minLength, params) => inst.check(_minLength(minLength, params)); inst.nonempty = (params) => inst.check(_minLength(1, params)); inst.max = (maxLength, params) => inst.check(_maxLength(maxLength, params)); inst.length = (len, params) => inst.check(_length(len, params)); inst.unwrap = () => inst.element; }); function array(element, params) { return _array(ZodArray, element, params); } var ZodObject = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => { $ZodObjectJIT.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => objectProcessor(inst, ctx, json, params); exports_util.defineLazy(inst, "shape", () => { return def.shape; }); inst.keyof = () => _enum(Object.keys(inst._zod.def.shape)); inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall }); inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() }); inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() }); inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined }); inst.extend = (incoming) => { return exports_util.extend(inst, incoming); }; inst.safeExtend = (incoming) => { return exports_util.safeExtend(inst, incoming); }; inst.merge = (other) => exports_util.merge(inst, other); inst.pick = (mask) => exports_util.pick(inst, mask); inst.omit = (mask) => exports_util.omit(inst, mask); inst.partial = (...args) => exports_util.partial(ZodOptional, inst, args[0]); inst.required = (...args) => exports_util.required(ZodNonOptional, inst, args[0]); }); function object2(shape, params) { const def = { type: "object", shape: shape ?? {}, ...exports_util.normalizeParams(params) }; return new ZodObject(def); } function looseObject(shape, params) { return new ZodObject({ type: "object", shape, catchall: unknown(), ...exports_util.normalizeParams(params) }); } var ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => { $ZodUnion.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => unionProcessor(inst, ctx, json, params); inst.options = def.options; }); function union(options, params) { return new ZodUnion({ type: "union", options, ...exports_util.normalizeParams(params) }); } var ZodDiscriminatedUnion = /* @__PURE__ */ $constructor("ZodDiscriminatedUnion", (inst, def) => { ZodUnion.init(inst, def); $ZodDiscriminatedUnion.init(inst, def); }); function discriminatedUnion(discriminator, options, params) { return new ZodDiscriminatedUnion({ type: "union", options, discriminator, ...exports_util.normalizeParams(params) }); } var ZodIntersection = /* @__PURE__ */ $constructor("ZodIntersection", (inst, def) => { $ZodIntersection.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => intersectionProcessor(inst, ctx, json, params); }); function intersection(left, right) { return new ZodIntersection({ type: "intersection", left, right }); } var ZodRecord = /* @__PURE__ */ $constructor("ZodRecord", (inst, def) => { $ZodRecord.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => recordProcessor(inst, ctx, json, params); inst.keyType = def.keyType; inst.valueType = def.valueType; }); function record(keyType, valueType, params) { return new ZodRecord({ type: "record", keyType, valueType, ...exports_util.normalizeParams(params) }); } var ZodEnum = /* @__PURE__ */ $constructor("ZodEnum", (inst, def) => { $ZodEnum.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => enumProcessor(inst, ctx, json, params); inst.enum = def.entries; inst.options = Object.values(def.entries); const keys = new Set(Object.keys(def.entries)); inst.extract = (values, params) => { const newEntries = {}; for (const value of values) { if (keys.has(value)) { newEntries[value] = def.entries[value]; } else throw new Error(`Key ${value} not found in enum`); } return new ZodEnum({ ...def, checks: [], ...exports_util.normalizeParams(params), entries: newEntries }); }; inst.exclude = (values, params) => { const newEntries = { ...def.entries }; for (const value of values) { if (keys.has(value)) { delete newEntries[value]; } else throw new Error(`Key ${value} not found in enum`); } return new ZodEnum({ ...def, checks: [], ...exports_util.normalizeParams(params), entries: newEntries }); }; }); function _enum(values, params) { const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; return new ZodEnum({ type: "enum", entries, ...exports_util.normalizeParams(params) }); } var ZodLiteral = /* @__PURE__ */ $constructor("ZodLiteral", (inst, def) => { $ZodLiteral.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => literalProcessor(inst, ctx, json, params); inst.values = new Set(def.values); Object.defineProperty(inst, "value", { get() { if (def.values.length > 1) { throw new Error("This schema contains multiple valid literal values. Use `.values` instead."); } return def.values[0]; } }); }); function literal(value, params) { return new ZodLiteral({ type: "literal", values: Array.isArray(value) ? value : [value], ...exports_util.normalizeParams(params) }); } var ZodTransform = /* @__PURE__ */ $constructor("ZodTransform", (inst, def) => { $ZodTransform.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => transformProcessor(inst, ctx, json, params); inst._zod.parse = (payload, _ctx) => { if (_ctx.direction === "backward") { throw new $ZodEncodeError(inst.constructor.name); } payload.addIssue = (issue2) => { if (typeof issue2 === "string") { payload.issues.push(exports_util.issue(issue2, payload.value, def)); } else { const _issue = issue2; if (_issue.fatal) _issue.continue = false; _issue.code ?? (_issue.code = "custom"); _issue.input ?? (_issue.input = payload.value); _issue.inst ?? (_issue.inst = inst); payload.issues.push(exports_util.issue(_issue)); } }; const output = def.transform(payload.value, payload); if (output instanceof Promise) { return output.then((output2) => { payload.value = output2; return payload; }); } payload.value = output; return payload; }; }); function transform(fn) { return new ZodTransform({ type: "transform", transform: fn }); } var ZodOptional = /* @__PURE__ */ $constructor("ZodOptional", (inst, def) => { $ZodOptional.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function optional(innerType) { return new ZodOptional({ type: "optional", innerType }); } var ZodExactOptional = /* @__PURE__ */ $constructor("ZodExactOptional", (inst, def) => { $ZodExactOptional.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => optionalProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function exactOptional(innerType) { return new ZodExactOptional({ type: "optional", innerType }); } var ZodNullable = /* @__PURE__ */ $constructor("ZodNullable", (inst, def) => { $ZodNullable.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => nullableProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function nullable(innerType) { return new ZodNullable({ type: "nullable", innerType }); } var ZodDefault = /* @__PURE__ */ $constructor("ZodDefault", (inst, def) => { $ZodDefault.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => defaultProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; inst.removeDefault = inst.unwrap; }); function _default(innerType, defaultValue) { return new ZodDefault({ type: "default", innerType, get defaultValue() { return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue); } }); } var ZodPrefault = /* @__PURE__ */ $constructor("ZodPrefault", (inst, def) => { $ZodPrefault.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => prefaultProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function prefault(innerType, defaultValue) { return new ZodPrefault({ type: "prefault", innerType, get defaultValue() { return typeof defaultValue === "function" ? defaultValue() : exports_util.shallowClone(defaultValue); } }); } var ZodNonOptional = /* @__PURE__ */ $constructor("ZodNonOptional", (inst, def) => { $ZodNonOptional.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => nonoptionalProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function nonoptional(innerType, params) { return new ZodNonOptional({ type: "nonoptional", innerType, ...exports_util.normalizeParams(params) }); } var ZodCatch = /* @__PURE__ */ $constructor("ZodCatch", (inst, def) => { $ZodCatch.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => catchProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; inst.removeCatch = inst.unwrap; }); function _catch(innerType, catchValue) { return new ZodCatch({ type: "catch", innerType, catchValue: typeof catchValue === "function" ? catchValue : () => catchValue }); } var ZodPipe = /* @__PURE__ */ $constructor("ZodPipe", (inst, def) => { $ZodPipe.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => pipeProcessor(inst, ctx, json, params); inst.in = def.in; inst.out = def.out; }); function pipe(in_, out) { return new ZodPipe({ type: "pipe", in: in_, out }); } var ZodReadonly = /* @__PURE__ */ $constructor("ZodReadonly", (inst, def) => { $ZodReadonly.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => readonlyProcessor(inst, ctx, json, params); inst.unwrap = () => inst._zod.def.innerType; }); function readonly(innerType) { return new ZodReadonly({ type: "readonly", innerType }); } var ZodCustom = /* @__PURE__ */ $constructor("ZodCustom", (inst, def) => { $ZodCustom.init(inst, def); ZodType.init(inst, def); inst._zod.processJSONSchema = (ctx, json, params) => customProcessor(inst, ctx, json, params); }); function custom(fn, _params) { return _custom(ZodCustom, fn ?? (() => true), _params); } function refine(fn, _params = {}) { return _refine(ZodCustom, fn, _params); } function superRefine(fn) { return _superRefine(fn); } function preprocess(fn, schema) { return pipe(transform(fn), schema); } // node_modules/zod/v4/classic/external.js config(en_default()); // node_modules/@modelcontextprotocol/sdk/dist/esm/types.js var LATEST_PROTOCOL_VERSION = "2025-11-25"; var SUPPORTED_PROTOCOL_VERSIONS = [LATEST_PROTOCOL_VERSION, "2025-06-18", "2025-03-26", "2024-11-05", "2024-10-07"]; var RELATED_TASK_META_KEY = "io.modelcontextprotocol/related-task"; var JSONRPC_VERSION = "2.0"; var AssertObjectSchema = custom((v) => v !== null && (typeof v === "object" || typeof v === "function")); var ProgressTokenSchema = union([string2(), number2().int()]); var CursorSchema = string2(); var TaskCreationParamsSchema = looseObject({ ttl: union([number2(), _null3()]).optional(), pollInterval: number2().optional() }); var TaskMetadataSchema = object2({ ttl: number2().optional() }); var RelatedTaskMetadataSchema = object2({ taskId: string2() }); var RequestMetaSchema = looseObject({ progressToken: ProgressTokenSchema.optional(), [RELATED_TASK_META_KEY]: RelatedTaskMetadataSchema.optional() }); var BaseRequestParamsSchema = object2({ _meta: RequestMetaSchema.optional() }); var TaskAugmentedRequestParamsSchema = BaseRequestParamsSchema.extend({ task: TaskMetadataSchema.optional() }); var isTaskAugmentedRequestParams = (value) => TaskAugmentedRequestParamsSchema.safeParse(value).success; var RequestSchema = object2({ method: string2(), params: BaseRequestParamsSchema.loose().optional() }); var NotificationsParamsSchema = object2({ _meta: RequestMetaSchema.optional() }); var NotificationSchema = object2({ method: string2(), params: NotificationsParamsSchema.loose().optional() }); var ResultSchema = looseObject({ _meta: RequestMetaSchema.optional() }); var RequestIdSchema = union([string2(), number2().int()]); var JSONRPCRequestSchema = object2({ jsonrpc: literal(JSONRPC_VERSION), id: RequestIdSchema, ...RequestSchema.shape }).strict(); var isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success; var JSONRPCNotificationSchema = object2({ jsonrpc: literal(JSONRPC_VERSION), ...NotificationSchema.shape }).strict(); var isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success; var JSONRPCResultResponseSchema = object2({ jsonrpc: literal(JSONRPC_VERSION), id: RequestIdSchema, result: ResultSchema }).strict(); var isJSONRPCResultResponse = (value) => JSONRPCResultResponseSchema.safeParse(value).success; var ErrorCode; (function(ErrorCode2) { ErrorCode2[ErrorCode2["ConnectionClosed"] = -32000] = "ConnectionClosed"; ErrorCode2[ErrorCode2["RequestTimeout"] = -32001] = "RequestTimeout"; ErrorCode2[ErrorCode2["ParseError"] = -32700] = "ParseError"; ErrorCode2[ErrorCode2["InvalidRequest"] = -32600] = "InvalidRequest"; ErrorCode2[ErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound"; ErrorCode2[ErrorCode2["InvalidParams"] = -32602] = "InvalidParams"; ErrorCode2[ErrorCode2["InternalError"] = -32603] = "InternalError"; ErrorCode2[ErrorCode2["UrlElicitationRequired"] = -32042] = "UrlElicitationRequired"; })(ErrorCode || (ErrorCode = {})); var JSONRPCErrorResponseSchema = object2({ jsonrpc: literal(JSONRPC_VERSION), id: RequestIdSchema.optional(), error: object2({ code: number2().int(), message: string2(), data: unknown().optional() }) }).strict(); var isJSONRPCErrorResponse = (value) => JSONRPCErrorResponseSchema.safeParse(value).success; var JSONRPCMessageSchema = union([ JSONRPCRequestSchema, JSONRPCNotificationSchema, JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema ]); var JSONRPCResponseSchema = union([JSONRPCResultResponseSchema, JSONRPCErrorResponseSchema]); var EmptyResultSchema = ResultSchema.strict(); var CancelledNotificationParamsSchema = NotificationsParamsSchema.extend({ requestId: RequestIdSchema.optional(), reason: string2().optional() }); var CancelledNotificationSchema = NotificationSchema.extend({ method: literal("notifications/cancelled"), params: CancelledNotificationParamsSchema }); var IconSchema = object2({ src: string2(), mimeType: string2().optional(), sizes: array(string2()).optional(), theme: _enum(["light", "dark"]).optional() }); var IconsSchema = object2({ icons: array(IconSchema).optional() }); var BaseMetadataSchema = object2({ name: string2(), title: string2().optional() }); var ImplementationSchema = BaseMetadataSchema.extend({ ...BaseMetadataSchema.shape, ...IconsSchema.shape, version: string2(), websiteUrl: string2().optional(), description: string2().optional() }); var FormElicitationCapabilitySchema = intersection(object2({ applyDefaults: boolean2().optional() }), record(string2(), unknown())); var ElicitationCapabilitySchema = preprocess((value) => { if (value && typeof value === "object" && !Array.isArray(value)) { if (Object.keys(value).length === 0) { return { form: {} }; } } return value; }, intersection(object2({ form: FormElicitationCapabilitySchema.optional(), url: AssertObjectSchema.optional() }), record(string2(), unknown()).optional())); var ClientTasksCapabilitySchema = looseObject({ list: AssertObjectSchema.optional(), cancel: AssertObjectSchema.optional(), requests: looseObject({ sampling: looseObject({ createMessage: AssertObjectSchema.optional() }).optional(), elicitation: looseObject({ create: AssertObjectSchema.optional() }).optional() }).optional() }); var ServerTasksCapabilitySchema = looseObject({ list: AssertObjectSchema.optional(), cancel: AssertObjectSchema.optional(), requests: looseObject({ tools: looseObject({ call: AssertObjectSchema.optional() }).optional() }).optional() }); var ClientCapabilitiesSchema = object2({ experimental: record(string2(), AssertObjectSchema).optional(), sampling: object2({ context: AssertObjectSchema.optional(), tools: AssertObjectSchema.optional() }).optional(), elicitation: ElicitationCapabilitySchema.optional(), roots: object2({ listChanged: boolean2().optional() }).optional(), tasks: ClientTasksCapabilitySchema.optional() }); var InitializeRequestParamsSchema = BaseRequestParamsSchema.extend({ protocolVersion: string2(), capabilities: ClientCapabilitiesSchema, clientInfo: ImplementationSchema }); var InitializeRequestSchema = RequestSchema.extend({ method: literal("initialize"), params: InitializeRequestParamsSchema }); var ServerCapabilitiesSchema = object2({ experimental: record(string2(), AssertObjectSchema).optional(), logging: AssertObjectSchema.optional(), completions: AssertObjectSchema.optional(), prompts: object2({ listChanged: boolean2().optional() }).optional(), resources: object2({ subscribe: boolean2().optional(), listChanged: boolean2().optional() }).optional(), tools: object2({ listChanged: boolean2().optional() }).optional(), tasks: ServerTasksCapabilitySchema.optional() }); var InitializeResultSchema = ResultSchema.extend({ protocolVersion: string2(), capabilities: ServerCapabilitiesSchema, serverInfo: ImplementationSchema, instructions: string2().optional() }); var InitializedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/initialized"), params: NotificationsParamsSchema.optional() }); var PingRequestSchema = RequestSchema.extend({ method: literal("ping"), params: BaseRequestParamsSchema.optional() }); var ProgressSchema = object2({ progress: number2(), total: optional(number2()), message: optional(string2()) }); var ProgressNotificationParamsSchema = object2({ ...NotificationsParamsSchema.shape, ...ProgressSchema.shape, progressToken: ProgressTokenSchema }); var ProgressNotificationSchema = NotificationSchema.extend({ method: literal("notifications/progress"), params: ProgressNotificationParamsSchema }); var PaginatedRequestParamsSchema = BaseRequestParamsSchema.extend({ cursor: CursorSchema.optional() }); var PaginatedRequestSchema = RequestSchema.extend({ params: PaginatedRequestParamsSchema.optional() }); var PaginatedResultSchema = ResultSchema.extend({ nextCursor: CursorSchema.optional() }); var TaskStatusSchema = _enum(["working", "input_required", "completed", "failed", "cancelled"]); var TaskSchema = object2({ taskId: string2(), status: TaskStatusSchema, ttl: union([number2(), _null3()]), createdAt: string2(), lastUpdatedAt: string2(), pollInterval: optional(number2()), statusMessage: optional(string2()) }); var CreateTaskResultSchema = ResultSchema.extend({ task: TaskSchema }); var TaskStatusNotificationParamsSchema = NotificationsParamsSchema.merge(TaskSchema); var TaskStatusNotificationSchema = NotificationSchema.extend({ method: literal("notifications/tasks/status"), params: TaskStatusNotificationParamsSchema }); var GetTaskRequestSchema = RequestSchema.extend({ method: literal("tasks/get"), params: BaseRequestParamsSchema.extend({ taskId: string2() }) }); var GetTaskResultSchema = ResultSchema.merge(TaskSchema); var GetTaskPayloadRequestSchema = RequestSchema.extend({ method: literal("tasks/result"), params: BaseRequestParamsSchema.extend({ taskId: string2() }) }); var GetTaskPayloadResultSchema = ResultSchema.loose(); var ListTasksRequestSchema = PaginatedRequestSchema.extend({ method: literal("tasks/list") }); var ListTasksResultSchema = PaginatedResultSchema.extend({ tasks: array(TaskSchema) }); var CancelTaskRequestSchema = RequestSchema.extend({ method: literal("tasks/cancel"), params: BaseRequestParamsSchema.extend({ taskId: string2() }) }); var CancelTaskResultSchema = ResultSchema.merge(TaskSchema); var ResourceContentsSchema = object2({ uri: string2(), mimeType: optional(string2()), _meta: record(string2(), unknown()).optional() }); var TextResourceContentsSchema = ResourceContentsSchema.extend({ text: string2() }); var Base64Schema = string2().refine((val) => { try { atob(val); return true; } catch { return false; } }, { message: "Invalid Base64 string" }); var BlobResourceContentsSchema = ResourceContentsSchema.extend({ blob: Base64Schema }); var RoleSchema = _enum(["user", "assistant"]); var AnnotationsSchema = object2({ audience: array(RoleSchema).optional(), priority: number2().min(0).max(1).optional(), lastModified: exports_iso.datetime({ offset: true }).optional() }); var ResourceSchema = object2({ ...BaseMetadataSchema.shape, ...IconsSchema.shape, uri: string2(), description: optional(string2()), mimeType: optional(string2()), annotations: AnnotationsSchema.optional(), _meta: optional(looseObject({})) }); var ResourceTemplateSchema = object2({ ...BaseMetadataSchema.shape, ...IconsSchema.shape, uriTemplate: string2(), description: optional(string2()), mimeType: optional(string2()), annotations: AnnotationsSchema.optional(), _meta: optional(looseObject({})) }); var ListResourcesRequestSchema = PaginatedRequestSchema.extend({ method: literal("resources/list") }); var ListResourcesResultSchema = PaginatedResultSchema.extend({ resources: array(ResourceSchema) }); var ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({ method: literal("resources/templates/list") }); var ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({ resourceTemplates: array(ResourceTemplateSchema) }); var ResourceRequestParamsSchema = BaseRequestParamsSchema.extend({ uri: string2() }); var ReadResourceRequestParamsSchema = ResourceRequestParamsSchema; var ReadResourceRequestSchema = RequestSchema.extend({ method: literal("resources/read"), params: ReadResourceRequestParamsSchema }); var ReadResourceResultSchema = ResultSchema.extend({ contents: array(union([TextResourceContentsSchema, BlobResourceContentsSchema])) }); var ResourceListChangedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/resources/list_changed"), params: NotificationsParamsSchema.optional() }); var SubscribeRequestParamsSchema = ResourceRequestParamsSchema; var SubscribeRequestSchema = RequestSchema.extend({ method: literal("resources/subscribe"), params: SubscribeRequestParamsSchema }); var UnsubscribeRequestParamsSchema = ResourceRequestParamsSchema; var UnsubscribeRequestSchema = RequestSchema.extend({ method: literal("resources/unsubscribe"), params: UnsubscribeRequestParamsSchema }); var ResourceUpdatedNotificationParamsSchema = NotificationsParamsSchema.extend({ uri: string2() }); var ResourceUpdatedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/resources/updated"), params: ResourceUpdatedNotificationParamsSchema }); var PromptArgumentSchema = object2({ name: string2(), description: optional(string2()), required: optional(boolean2()) }); var PromptSchema = object2({ ...BaseMetadataSchema.shape, ...IconsSchema.shape, description: optional(string2()), arguments: optional(array(PromptArgumentSchema)), _meta: optional(looseObject({})) }); var ListPromptsRequestSchema = PaginatedRequestSchema.extend({ method: literal("prompts/list") }); var ListPromptsResultSchema = PaginatedResultSchema.extend({ prompts: array(PromptSchema) }); var GetPromptRequestParamsSchema = BaseRequestParamsSchema.extend({ name: string2(), arguments: record(string2(), string2()).optional() }); var GetPromptRequestSchema = RequestSchema.extend({ method: literal("prompts/get"), params: GetPromptRequestParamsSchema }); var TextContentSchema = object2({ type: literal("text"), text: string2(), annotations: AnnotationsSchema.optional(), _meta: record(string2(), unknown()).optional() }); var ImageContentSchema = object2({ type: literal("image"), data: Base64Schema, mimeType: string2(), annotations: AnnotationsSchema.optional(), _meta: record(string2(), unknown()).optional() }); var AudioContentSchema = object2({ type: literal("audio"), data: Base64Schema, mimeType: string2(), annotations: AnnotationsSchema.optional(), _meta: record(string2(), unknown()).optional() }); var ToolUseContentSchema = object2({ type: literal("tool_use"), name: string2(), id: string2(), input: record(string2(), unknown()), _meta: record(string2(), unknown()).optional() }); var EmbeddedResourceSchema = object2({ type: literal("resource"), resource: union([TextResourceContentsSchema, BlobResourceContentsSchema]), annotations: AnnotationsSchema.optional(), _meta: record(string2(), unknown()).optional() }); var ResourceLinkSchema = ResourceSchema.extend({ type: literal("resource_link") }); var ContentBlockSchema = union([ TextContentSchema, ImageContentSchema, AudioContentSchema, ResourceLinkSchema, EmbeddedResourceSchema ]); var PromptMessageSchema = object2({ role: RoleSchema, content: ContentBlockSchema }); var GetPromptResultSchema = ResultSchema.extend({ description: string2().optional(), messages: array(PromptMessageSchema) }); var PromptListChangedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/prompts/list_changed"), params: NotificationsParamsSchema.optional() }); var ToolAnnotationsSchema = object2({ title: string2().optional(), readOnlyHint: boolean2().optional(), destructiveHint: boolean2().optional(), idempotentHint: boolean2().optional(), openWorldHint: boolean2().optional() }); var ToolExecutionSchema = object2({ taskSupport: _enum(["required", "optional", "forbidden"]).optional() }); var ToolSchema = object2({ ...BaseMetadataSchema.shape, ...IconsSchema.shape, description: string2().optional(), inputSchema: object2({ type: literal("object"), properties: record(string2(), AssertObjectSchema).optional(), required: array(string2()).optional() }).catchall(unknown()), outputSchema: object2({ type: literal("object"), properties: record(string2(), AssertObjectSchema).optional(), required: array(string2()).optional() }).catchall(unknown()).optional(), annotations: ToolAnnotationsSchema.optional(), execution: ToolExecutionSchema.optional(), _meta: record(string2(), unknown()).optional() }); var ListToolsRequestSchema = PaginatedRequestSchema.extend({ method: literal("tools/list") }); var ListToolsResultSchema = PaginatedResultSchema.extend({ tools: array(ToolSchema) }); var CallToolResultSchema = ResultSchema.extend({ content: array(ContentBlockSchema).default([]), structuredContent: record(string2(), unknown()).optional(), isError: boolean2().optional() }); var CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({ toolResult: unknown() })); var CallToolRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({ name: string2(), arguments: record(string2(), unknown()).optional() }); var CallToolRequestSchema = RequestSchema.extend({ method: literal("tools/call"), params: CallToolRequestParamsSchema }); var ToolListChangedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/tools/list_changed"), params: NotificationsParamsSchema.optional() }); var ListChangedOptionsBaseSchema = object2({ autoRefresh: boolean2().default(true), debounceMs: number2().int().nonnegative().default(300) }); var LoggingLevelSchema = _enum(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]); var SetLevelRequestParamsSchema = BaseRequestParamsSchema.extend({ level: LoggingLevelSchema }); var SetLevelRequestSchema = RequestSchema.extend({ method: literal("logging/setLevel"), params: SetLevelRequestParamsSchema }); var LoggingMessageNotificationParamsSchema = NotificationsParamsSchema.extend({ level: LoggingLevelSchema, logger: string2().optional(), data: unknown() }); var LoggingMessageNotificationSchema = NotificationSchema.extend({ method: literal("notifications/message"), params: LoggingMessageNotificationParamsSchema }); var ModelHintSchema = object2({ name: string2().optional() }); var ModelPreferencesSchema = object2({ hints: array(ModelHintSchema).optional(), costPriority: number2().min(0).max(1).optional(), speedPriority: number2().min(0).max(1).optional(), intelligencePriority: number2().min(0).max(1).optional() }); var ToolChoiceSchema = object2({ mode: _enum(["auto", "required", "none"]).optional() }); var ToolResultContentSchema = object2({ type: literal("tool_result"), toolUseId: string2().describe("The unique identifier for the corresponding tool call."), content: array(ContentBlockSchema).default([]), structuredContent: object2({}).loose().optional(), isError: boolean2().optional(), _meta: record(string2(), unknown()).optional() }); var SamplingContentSchema = discriminatedUnion("type", [TextContentSchema, ImageContentSchema, AudioContentSchema]); var SamplingMessageContentBlockSchema = discriminatedUnion("type", [ TextContentSchema, ImageContentSchema, AudioContentSchema, ToolUseContentSchema, ToolResultContentSchema ]); var SamplingMessageSchema = object2({ role: RoleSchema, content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]), _meta: record(string2(), unknown()).optional() }); var CreateMessageRequestParamsSchema = TaskAugmentedRequestParamsSchema.extend({ messages: array(SamplingMessageSchema), modelPreferences: ModelPreferencesSchema.optional(), systemPrompt: string2().optional(), includeContext: _enum(["none", "thisServer", "allServers"]).optional(), temperature: number2().optional(), maxTokens: number2().int(), stopSequences: array(string2()).optional(), metadata: AssertObjectSchema.optional(), tools: array(ToolSchema).optional(), toolChoice: ToolChoiceSchema.optional() }); var CreateMessageRequestSchema = RequestSchema.extend({ method: literal("sampling/createMessage"), params: CreateMessageRequestParamsSchema }); var CreateMessageResultSchema = ResultSchema.extend({ model: string2(), stopReason: optional(_enum(["endTurn", "stopSequence", "maxTokens"]).or(string2())), role: RoleSchema, content: SamplingContentSchema }); var CreateMessageResultWithToolsSchema = ResultSchema.extend({ model: string2(), stopReason: optional(_enum(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(string2())), role: RoleSchema, content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]) }); var BooleanSchemaSchema = object2({ type: literal("boolean"), title: string2().optional(), description: string2().optional(), default: boolean2().optional() }); var StringSchemaSchema = object2({ type: literal("string"), title: string2().optional(), description: string2().optional(), minLength: number2().optional(), maxLength: number2().optional(), format: _enum(["email", "uri", "date", "date-time"]).optional(), default: string2().optional() }); var NumberSchemaSchema = object2({ type: _enum(["number", "integer"]), title: string2().optional(), description: string2().optional(), minimum: number2().optional(), maximum: number2().optional(), default: number2().optional() }); var UntitledSingleSelectEnumSchemaSchema = object2({ type: literal("string"), title: string2().optional(), description: string2().optional(), enum: array(string2()), default: string2().optional() }); var TitledSingleSelectEnumSchemaSchema = object2({ type: literal("string"), title: string2().optional(), description: string2().optional(), oneOf: array(object2({ const: string2(), title: string2() })), default: string2().optional() }); var LegacyTitledEnumSchemaSchema = object2({ type: literal("string"), title: string2().optional(), description: string2().optional(), enum: array(string2()), enumNames: array(string2()).optional(), default: string2().optional() }); var SingleSelectEnumSchemaSchema = union([UntitledSingleSelectEnumSchemaSchema, TitledSingleSelectEnumSchemaSchema]); var UntitledMultiSelectEnumSchemaSchema = object2({ type: literal("array"), title: string2().optional(), description: string2().optional(), minItems: number2().optional(), maxItems: number2().optional(), items: object2({ type: literal("string"), enum: array(string2()) }), default: array(string2()).optional() }); var TitledMultiSelectEnumSchemaSchema = object2({ type: literal("array"), title: string2().optional(), description: string2().optional(), minItems: number2().optional(), maxItems: number2().optional(), items: object2({ anyOf: array(object2({ const: string2(), title: string2() })) }), default: array(string2()).optional() }); var MultiSelectEnumSchemaSchema = union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]); var EnumSchemaSchema = union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]); var PrimitiveSchemaDefinitionSchema = union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]); var ElicitRequestFormParamsSchema = TaskAugmentedRequestParamsSchema.extend({ mode: literal("form").optional(), message: string2(), requestedSchema: object2({ type: literal("object"), properties: record(string2(), PrimitiveSchemaDefinitionSchema), required: array(string2()).optional() }) }); var ElicitRequestURLParamsSchema = TaskAugmentedRequestParamsSchema.extend({ mode: literal("url"), message: string2(), elicitationId: string2(), url: string2().url() }); var ElicitRequestParamsSchema = union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]); var ElicitRequestSchema = RequestSchema.extend({ method: literal("elicitation/create"), params: ElicitRequestParamsSchema }); var ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({ elicitationId: string2() }); var ElicitationCompleteNotificationSchema = NotificationSchema.extend({ method: literal("notifications/elicitation/complete"), params: ElicitationCompleteNotificationParamsSchema }); var ElicitResultSchema = ResultSchema.extend({ action: _enum(["accept", "decline", "cancel"]), content: preprocess((val) => val === null ? undefined : val, record(string2(), union([string2(), number2(), boolean2(), array(string2())])).optional()) }); var ResourceTemplateReferenceSchema = object2({ type: literal("ref/resource"), uri: string2() }); var PromptReferenceSchema = object2({ type: literal("ref/prompt"), name: string2() }); var CompleteRequestParamsSchema = BaseRequestParamsSchema.extend({ ref: union([PromptReferenceSchema, ResourceTemplateReferenceSchema]), argument: object2({ name: string2(), value: string2() }), context: object2({ arguments: record(string2(), string2()).optional() }).optional() }); var CompleteRequestSchema = RequestSchema.extend({ method: literal("completion/complete"), params: CompleteRequestParamsSchema }); var CompleteResultSchema = ResultSchema.extend({ completion: looseObject({ values: array(string2()).max(100), total: optional(number2().int()), hasMore: optional(boolean2()) }) }); var RootSchema = object2({ uri: string2().startsWith("file://"), name: string2().optional(), _meta: record(string2(), unknown()).optional() }); var ListRootsRequestSchema = RequestSchema.extend({ method: literal("roots/list"), params: BaseRequestParamsSchema.optional() }); var ListRootsResultSchema = ResultSchema.extend({ roots: array(RootSchema) }); var RootsListChangedNotificationSchema = NotificationSchema.extend({ method: literal("notifications/roots/list_changed"), params: NotificationsParamsSchema.optional() }); var ClientRequestSchema = union([ PingRequestSchema, InitializeRequestSchema, CompleteRequestSchema, SetLevelRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ReadResourceRequestSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, CallToolRequestSchema, ListToolsRequestSchema, GetTaskRequestSchema, GetTaskPayloadRequestSchema, ListTasksRequestSchema, CancelTaskRequestSchema ]); var ClientNotificationSchema = union([ CancelledNotificationSchema, ProgressNotificationSchema, InitializedNotificationSchema, RootsListChangedNotificationSchema, TaskStatusNotificationSchema ]); var ClientResultSchema = union([ EmptyResultSchema, CreateMessageResultSchema, CreateMessageResultWithToolsSchema, ElicitResultSchema, ListRootsResultSchema, GetTaskResultSchema, ListTasksResultSchema, CreateTaskResultSchema ]); var ServerRequestSchema = union([ PingRequestSchema, CreateMessageRequestSchema, ElicitRequestSchema, ListRootsRequestSchema, GetTaskRequestSchema, GetTaskPayloadRequestSchema, ListTasksRequestSchema, CancelTaskRequestSchema ]); var ServerNotificationSchema = union([ CancelledNotificationSchema, ProgressNotificationSchema, LoggingMessageNotificationSchema, ResourceUpdatedNotificationSchema, ResourceListChangedNotificationSchema, ToolListChangedNotificationSchema, PromptListChangedNotificationSchema, TaskStatusNotificationSchema, ElicitationCompleteNotificationSchema ]); var ServerResultSchema = union([ EmptyResultSchema, InitializeResultSchema, CompleteResultSchema, GetPromptResultSchema, ListPromptsResultSchema, ListResourcesResultSchema, ListResourceTemplatesResultSchema, ReadResourceResultSchema, CallToolResultSchema, ListToolsResultSchema, GetTaskResultSchema, ListTasksResultSchema, CreateTaskResultSchema ]); class McpError extends Error { constructor(code, message, data) { super(`MCP error ${code}: ${message}`); this.code = code; this.data = data; this.name = "McpError"; } static fromError(code, message, data) { if (code === ErrorCode.UrlElicitationRequired && data) { const errorData = data; if (errorData.elicitations) { return new UrlElicitationRequiredError(errorData.elicitations, message); } } return new McpError(code, message, data); } } class UrlElicitationRequiredError extends McpError { constructor(elicitations, message = `URL elicitation${elicitations.length > 1 ? "s" : ""} required`) { super(ErrorCode.UrlElicitationRequired, message, { elicitations }); } get elicitations() { return this.data?.elicitations ?? []; } } // node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/interfaces.js function isTerminal(status) { return status === "completed" || status === "failed" || status === "cancelled"; } // node_modules/zod-to-json-schema/dist/esm/Options.js var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use"); // node_modules/zod-to-json-schema/dist/esm/parsers/string.js var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); // node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js function getMethodLiteral(schema) { const shape = getObjectShape(schema); const methodSchema = shape?.method; if (!methodSchema) { throw new Error("Schema is missing a method literal"); } const value = getLiteralValue(methodSchema); if (typeof value !== "string") { throw new Error("Schema method literal must be a string"); } return value; } function parseWithCompat(schema, data) { const result = safeParse2(schema, data); if (!result.success) { throw result.error; } return result.data; } // node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js var DEFAULT_REQUEST_TIMEOUT_MSEC = 60000; class Protocol { constructor(_options) { this._options = _options; this._requestMessageId = 0; this._requestHandlers = new Map; this._requestHandlerAbortControllers = new Map; this._notificationHandlers = new Map; this._responseHandlers = new Map; this._progressHandlers = new Map; this._timeoutInfo = new Map; this._pendingDebouncedNotifications = new Set; this._taskProgressTokens = new Map; this._requestResolvers = new Map; this.setNotificationHandler(CancelledNotificationSchema, (notification) => { this._oncancel(notification); }); this.setNotificationHandler(ProgressNotificationSchema, (notification) => { this._onprogress(notification); }); this.setRequestHandler(PingRequestSchema, (_request) => ({})); this._taskStore = _options?.taskStore; this._taskMessageQueue = _options?.taskMessageQueue; if (this._taskStore) { this.setRequestHandler(GetTaskRequestSchema, async (request, extra) => { const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId); if (!task) { throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found"); } return { ...task }; }); this.setRequestHandler(GetTaskPayloadRequestSchema, async (request, extra) => { const handleTaskResult = async () => { const taskId = request.params.taskId; if (this._taskMessageQueue) { let queuedMessage; while (queuedMessage = await this._taskMessageQueue.dequeue(taskId, extra.sessionId)) { if (queuedMessage.type === "response" || queuedMessage.type === "error") { const message = queuedMessage.message; const requestId = message.id; const resolver = this._requestResolvers.get(requestId); if (resolver) { this._requestResolvers.delete(requestId); if (queuedMessage.type === "response") { resolver(message); } else { const errorMessage = message; const error2 = new McpError(errorMessage.error.code, errorMessage.error.message, errorMessage.error.data); resolver(error2); } } else { const messageType = queuedMessage.type === "response" ? "Response" : "Error"; this._onerror(new Error(`${messageType} handler missing for request ${requestId}`)); } continue; } await this._transport?.send(queuedMessage.message, { relatedRequestId: extra.requestId }); } } const task = await this._taskStore.getTask(taskId, extra.sessionId); if (!task) { throw new McpError(ErrorCode.InvalidParams, `Task not found: ${taskId}`); } if (!isTerminal(task.status)) { await this._waitForTaskUpdate(taskId, extra.signal); return await handleTaskResult(); } if (isTerminal(task.status)) { const result = await this._taskStore.getTaskResult(taskId, extra.sessionId); this._clearTaskQueue(taskId); return { ...result, _meta: { ...result._meta, [RELATED_TASK_META_KEY]: { taskId } } }; } return await handleTaskResult(); }; return await handleTaskResult(); }); this.setRequestHandler(ListTasksRequestSchema, async (request, extra) => { try { const { tasks, nextCursor } = await this._taskStore.listTasks(request.params?.cursor, extra.sessionId); return { tasks, nextCursor, _meta: {} }; } catch (error2) { throw new McpError(ErrorCode.InvalidParams, `Failed to list tasks: ${error2 instanceof Error ? error2.message : String(error2)}`); } }); this.setRequestHandler(CancelTaskRequestSchema, async (request, extra) => { try { const task = await this._taskStore.getTask(request.params.taskId, extra.sessionId); if (!task) { throw new McpError(ErrorCode.InvalidParams, `Task not found: ${request.params.taskId}`); } if (isTerminal(task.status)) { throw new McpError(ErrorCode.InvalidParams, `Cannot cancel task in terminal status: ${task.status}`); } await this._taskStore.updateTaskStatus(request.params.taskId, "cancelled", "Client cancelled task execution.", extra.sessionId); this._clearTaskQueue(request.params.taskId); const cancelledTask = await this._taskStore.getTask(request.params.taskId, extra.sessionId); if (!cancelledTask) { throw new McpError(ErrorCode.InvalidParams, `Task not found after cancellation: ${request.params.taskId}`); } return { _meta: {}, ...cancelledTask }; } catch (error2) { if (error2 instanceof McpError) { throw error2; } throw new McpError(ErrorCode.InvalidRequest, `Failed to cancel task: ${error2 instanceof Error ? error2.message : String(error2)}`); } }); } } async _oncancel(notification) { if (!notification.params.requestId) { return; } const controller = this._requestHandlerAbortControllers.get(notification.params.requestId); controller?.abort(notification.params.reason); } _setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) { this._timeoutInfo.set(messageId, { timeoutId: setTimeout(onTimeout, timeout), startTime: Date.now(), timeout, maxTotalTimeout, resetTimeoutOnProgress, onTimeout }); } _resetTimeout(messageId) { const info = this._timeoutInfo.get(messageId); if (!info) return false; const totalElapsed = Date.now() - info.startTime; if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) { this._timeoutInfo.delete(messageId); throw McpError.fromError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", { maxTotalTimeout: info.maxTotalTimeout, totalElapsed }); } clearTimeout(info.timeoutId); info.timeoutId = setTimeout(info.onTimeout, info.timeout); return true; } _cleanupTimeout(messageId) { const info = this._timeoutInfo.get(messageId); if (info) { clearTimeout(info.timeoutId); this._timeoutInfo.delete(messageId); } } async connect(transport) { if (this._transport) { throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection."); } this._transport = transport; const _onclose = this.transport?.onclose; this._transport.onclose = () => { _onclose?.(); this._onclose(); }; const _onerror = this.transport?.onerror; this._transport.onerror = (error2) => { _onerror?.(error2); this._onerror(error2); }; const _onmessage = this._transport?.onmessage; this._transport.onmessage = (message, extra) => { _onmessage?.(message, extra); if (isJSONRPCResultResponse(message) || isJSONRPCErrorResponse(message)) { this._onresponse(message); } else if (isJSONRPCRequest(message)) { this._onrequest(message, extra); } else if (isJSONRPCNotification(message)) { this._onnotification(message); } else { this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`)); } }; await this._transport.start(); } _onclose() { const responseHandlers = this._responseHandlers; this._responseHandlers = new Map; this._progressHandlers.clear(); this._taskProgressTokens.clear(); this._pendingDebouncedNotifications.clear(); for (const controller of this._requestHandlerAbortControllers.values()) { controller.abort(); } this._requestHandlerAbortControllers.clear(); const error2 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed"); this._transport = undefined; this.onclose?.(); for (const handler of responseHandlers.values()) { handler(error2); } } _onerror(error2) { this.onerror?.(error2); } _onnotification(notification) { const handler = this._notificationHandlers.get(notification.method) ?? this.fallbackNotificationHandler; if (handler === undefined) { return; } Promise.resolve().then(() => handler(notification)).catch((error2) => this._onerror(new Error(`Uncaught error in notification handler: ${error2}`))); } _onrequest(request, extra) { const handler = this._requestHandlers.get(request.method) ?? this.fallbackRequestHandler; const capturedTransport = this._transport; const relatedTaskId = request.params?._meta?.[RELATED_TASK_META_KEY]?.taskId; if (handler === undefined) { const errorResponse = { jsonrpc: "2.0", id: request.id, error: { code: ErrorCode.MethodNotFound, message: "Method not found" } }; if (relatedTaskId && this._taskMessageQueue) { this._enqueueTaskMessage(relatedTaskId, { type: "error", message: errorResponse, timestamp: Date.now() }, capturedTransport?.sessionId).catch((error2) => this._onerror(new Error(`Failed to enqueue error response: ${error2}`))); } else { capturedTransport?.send(errorResponse).catch((error2) => this._onerror(new Error(`Failed to send an error response: ${error2}`))); } return; } const abortController = new AbortController; this._requestHandlerAbortControllers.set(request.id, abortController); const taskCreationParams = isTaskAugmentedRequestParams(request.params) ? request.params.task : undefined; const taskStore = this._taskStore ? this.requestTaskStore(request, capturedTransport?.sessionId) : undefined; const fullExtra = { signal: abortController.signal, sessionId: capturedTransport?.sessionId, _meta: request.params?._meta, sendNotification: async (notification) => { if (abortController.signal.aborted) return; const notificationOptions = { relatedRequestId: request.id }; if (relatedTaskId) { notificationOptions.relatedTask = { taskId: relatedTaskId }; } await this.notification(notification, notificationOptions); }, sendRequest: async (r, resultSchema, options) => { if (abortController.signal.aborted) { throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled"); } const requestOptions = { ...options, relatedRequestId: request.id }; if (relatedTaskId && !requestOptions.relatedTask) { requestOptions.relatedTask = { taskId: relatedTaskId }; } const effectiveTaskId = requestOptions.relatedTask?.taskId ?? relatedTaskId; if (effectiveTaskId && taskStore) { await taskStore.updateTaskStatus(effectiveTaskId, "input_required"); } return await this.request(r, resultSchema, requestOptions); }, authInfo: extra?.authInfo, requestId: request.id, requestInfo: extra?.requestInfo, taskId: relatedTaskId, taskStore, taskRequestedTtl: taskCreationParams?.ttl, closeSSEStream: extra?.closeSSEStream, closeStandaloneSSEStream: extra?.closeStandaloneSSEStream }; Promise.resolve().then(() => { if (taskCreationParams) { this.assertTaskHandlerCapability(request.method); } }).then(() => handler(request, fullExtra)).then(async (result) => { if (abortController.signal.aborted) { return; } const response = { result, jsonrpc: "2.0", id: request.id }; if (relatedTaskId && this._taskMessageQueue) { await this._enqueueTaskMessage(relatedTaskId, { type: "response", message: response, timestamp: Date.now() }, capturedTransport?.sessionId); } else { await capturedTransport?.send(response); } }, async (error2) => { if (abortController.signal.aborted) { return; } const errorResponse = { jsonrpc: "2.0", id: request.id, error: { code: Number.isSafeInteger(error2["code"]) ? error2["code"] : ErrorCode.InternalError, message: error2.message ?? "Internal error", ...error2["data"] !== undefined && { data: error2["data"] } } }; if (relatedTaskId && this._taskMessageQueue) { await this._enqueueTaskMessage(relatedTaskId, { type: "error", message: errorResponse, timestamp: Date.now() }, capturedTransport?.sessionId); } else { await capturedTransport?.send(errorResponse); } }).catch((error2) => this._onerror(new Error(`Failed to send response: ${error2}`))).finally(() => { this._requestHandlerAbortControllers.delete(request.id); }); } _onprogress(notification) { const { progressToken, ...params } = notification.params; const messageId = Number(progressToken); const handler = this._progressHandlers.get(messageId); if (!handler) { this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`)); return; } const responseHandler = this._responseHandlers.get(messageId); const timeoutInfo = this._timeoutInfo.get(messageId); if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) { try { this._resetTimeout(messageId); } catch (error2) { this._responseHandlers.delete(messageId); this._progressHandlers.delete(messageId); this._cleanupTimeout(messageId); responseHandler(error2); return; } } handler(params); } _onresponse(response) { const messageId = Number(response.id); const resolver = this._requestResolvers.get(messageId); if (resolver) { this._requestResolvers.delete(messageId); if (isJSONRPCResultResponse(response)) { resolver(response); } else { const error2 = new McpError(response.error.code, response.error.message, response.error.data); resolver(error2); } return; } const handler = this._responseHandlers.get(messageId); if (handler === undefined) { this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`)); return; } this._responseHandlers.delete(messageId); this._cleanupTimeout(messageId); let isTaskResponse = false; if (isJSONRPCResultResponse(response) && response.result && typeof response.result === "object") { const result = response.result; if (result.task && typeof result.task === "object") { const task = result.task; if (typeof task.taskId === "string") { isTaskResponse = true; this._taskProgressTokens.set(task.taskId, messageId); } } } if (!isTaskResponse) { this._progressHandlers.delete(messageId); } if (isJSONRPCResultResponse(response)) { handler(response); } else { const error2 = McpError.fromError(response.error.code, response.error.message, response.error.data); handler(error2); } } get transport() { return this._transport; } async close() { await this._transport?.close(); } async* requestStream(request, resultSchema, options) { const { task } = options ?? {}; if (!task) { try { const result = await this.request(request, resultSchema, options); yield { type: "result", result }; } catch (error2) { yield { type: "error", error: error2 instanceof McpError ? error2 : new McpError(ErrorCode.InternalError, String(error2)) }; } return; } let taskId; try { const createResult = await this.request(request, CreateTaskResultSchema, options); if (createResult.task) { taskId = createResult.task.taskId; yield { type: "taskCreated", task: createResult.task }; } else { throw new McpError(ErrorCode.InternalError, "Task creation did not return a task"); } while (true) { const task2 = await this.getTask({ taskId }, options); yield { type: "taskStatus", task: task2 }; if (isTerminal(task2.status)) { if (task2.status === "completed") { const result = await this.getTaskResult({ taskId }, resultSchema, options); yield { type: "result", result }; } else if (task2.status === "failed") { yield { type: "error", error: new McpError(ErrorCode.InternalError, `Task ${taskId} failed`) }; } else if (task2.status === "cancelled") { yield { type: "error", error: new McpError(ErrorCode.InternalError, `Task ${taskId} was cancelled`) }; } return; } if (task2.status === "input_required") { const result = await this.getTaskResult({ taskId }, resultSchema, options); yield { type: "result", result }; return; } const pollInterval = task2.pollInterval ?? this._options?.defaultTaskPollInterval ?? 1000; await new Promise((resolve) => setTimeout(resolve, pollInterval)); options?.signal?.throwIfAborted(); } } catch (error2) { yield { type: "error", error: error2 instanceof McpError ? error2 : new McpError(ErrorCode.InternalError, String(error2)) }; } } request(request, resultSchema, options) { const { relatedRequestId, resumptionToken, onresumptiontoken, task, relatedTask } = options ?? {}; return new Promise((resolve, reject) => { const earlyReject = (error2) => { reject(error2); }; if (!this._transport) { earlyReject(new Error("Not connected")); return; } if (this._options?.enforceStrictCapabilities === true) { try { this.assertCapabilityForMethod(request.method); if (task) { this.assertTaskCapability(request.method); } } catch (e) { earlyReject(e); return; } } options?.signal?.throwIfAborted(); const messageId = this._requestMessageId++; const jsonrpcRequest = { ...request, jsonrpc: "2.0", id: messageId }; if (options?.onprogress) { this._progressHandlers.set(messageId, options.onprogress); jsonrpcRequest.params = { ...request.params, _meta: { ...request.params?._meta || {}, progressToken: messageId } }; } if (task) { jsonrpcRequest.params = { ...jsonrpcRequest.params, task }; } if (relatedTask) { jsonrpcRequest.params = { ...jsonrpcRequest.params, _meta: { ...jsonrpcRequest.params?._meta || {}, [RELATED_TASK_META_KEY]: relatedTask } }; } const cancel = (reason) => { this._responseHandlers.delete(messageId); this._progressHandlers.delete(messageId); this._cleanupTimeout(messageId); this._transport?.send({ jsonrpc: "2.0", method: "notifications/cancelled", params: { requestId: messageId, reason: String(reason) } }, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error3) => this._onerror(new Error(`Failed to send cancellation: ${error3}`))); const error2 = reason instanceof McpError ? reason : new McpError(ErrorCode.RequestTimeout, String(reason)); reject(error2); }; this._responseHandlers.set(messageId, (response) => { if (options?.signal?.aborted) { return; } if (response instanceof Error) { return reject(response); } try { const parseResult = safeParse2(resultSchema, response.result); if (!parseResult.success) { reject(parseResult.error); } else { resolve(parseResult.data); } } catch (error2) { reject(error2); } }); options?.signal?.addEventListener("abort", () => { cancel(options?.signal?.reason); }); const timeout = options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MSEC; const timeoutHandler = () => cancel(McpError.fromError(ErrorCode.RequestTimeout, "Request timed out", { timeout })); this._setupTimeout(messageId, timeout, options?.maxTotalTimeout, timeoutHandler, options?.resetTimeoutOnProgress ?? false); const relatedTaskId = relatedTask?.taskId; if (relatedTaskId) { const responseResolver = (response) => { const handler = this._responseHandlers.get(messageId); if (handler) { handler(response); } else { this._onerror(new Error(`Response handler missing for side-channeled request ${messageId}`)); } }; this._requestResolvers.set(messageId, responseResolver); this._enqueueTaskMessage(relatedTaskId, { type: "request", message: jsonrpcRequest, timestamp: Date.now() }).catch((error2) => { this._cleanupTimeout(messageId); reject(error2); }); } else { this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error2) => { this._cleanupTimeout(messageId); reject(error2); }); } }); } async getTask(params, options) { return this.request({ method: "tasks/get", params }, GetTaskResultSchema, options); } async getTaskResult(params, resultSchema, options) { return this.request({ method: "tasks/result", params }, resultSchema, options); } async listTasks(params, options) { return this.request({ method: "tasks/list", params }, ListTasksResultSchema, options); } async cancelTask(params, options) { return this.request({ method: "tasks/cancel", params }, CancelTaskResultSchema, options); } async notification(notification, options) { if (!this._transport) { throw new Error("Not connected"); } this.assertNotificationCapability(notification.method); const relatedTaskId = options?.relatedTask?.taskId; if (relatedTaskId) { const jsonrpcNotification2 = { ...notification, jsonrpc: "2.0", params: { ...notification.params, _meta: { ...notification.params?._meta || {}, [RELATED_TASK_META_KEY]: options.relatedTask } } }; await this._enqueueTaskMessage(relatedTaskId, { type: "notification", message: jsonrpcNotification2, timestamp: Date.now() }); return; } const debouncedMethods = this._options?.debouncedNotificationMethods ?? []; const canDebounce = debouncedMethods.includes(notification.method) && !notification.params && !options?.relatedRequestId && !options?.relatedTask; if (canDebounce) { if (this._pendingDebouncedNotifications.has(notification.method)) { return; } this._pendingDebouncedNotifications.add(notification.method); Promise.resolve().then(() => { this._pendingDebouncedNotifications.delete(notification.method); if (!this._transport) { return; } let jsonrpcNotification2 = { ...notification, jsonrpc: "2.0" }; if (options?.relatedTask) { jsonrpcNotification2 = { ...jsonrpcNotification2, params: { ...jsonrpcNotification2.params, _meta: { ...jsonrpcNotification2.params?._meta || {}, [RELATED_TASK_META_KEY]: options.relatedTask } } }; } this._transport?.send(jsonrpcNotification2, options).catch((error2) => this._onerror(error2)); }); return; } let jsonrpcNotification = { ...notification, jsonrpc: "2.0" }; if (options?.relatedTask) { jsonrpcNotification = { ...jsonrpcNotification, params: { ...jsonrpcNotification.params, _meta: { ...jsonrpcNotification.params?._meta || {}, [RELATED_TASK_META_KEY]: options.relatedTask } } }; } await this._transport.send(jsonrpcNotification, options); } setRequestHandler(requestSchema, handler) { const method = getMethodLiteral(requestSchema); this.assertRequestHandlerCapability(method); this._requestHandlers.set(method, (request, extra) => { const parsed = parseWithCompat(requestSchema, request); return Promise.resolve(handler(parsed, extra)); }); } removeRequestHandler(method) { this._requestHandlers.delete(method); } assertCanSetRequestHandler(method) { if (this._requestHandlers.has(method)) { throw new Error(`A request handler for ${method} already exists, which would be overridden`); } } setNotificationHandler(notificationSchema, handler) { const method = getMethodLiteral(notificationSchema); this._notificationHandlers.set(method, (notification) => { const parsed = parseWithCompat(notificationSchema, notification); return Promise.resolve(handler(parsed)); }); } removeNotificationHandler(method) { this._notificationHandlers.delete(method); } _cleanupTaskProgressHandler(taskId) { const progressToken = this._taskProgressTokens.get(taskId); if (progressToken !== undefined) { this._progressHandlers.delete(progressToken); this._taskProgressTokens.delete(taskId); } } async _enqueueTaskMessage(taskId, message, sessionId) { if (!this._taskStore || !this._taskMessageQueue) { throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured"); } const maxQueueSize = this._options?.maxTaskQueueSize; await this._taskMessageQueue.enqueue(taskId, message, sessionId, maxQueueSize); } async _clearTaskQueue(taskId, sessionId) { if (this._taskMessageQueue) { const messages = await this._taskMessageQueue.dequeueAll(taskId, sessionId); for (const message of messages) { if (message.type === "request" && isJSONRPCRequest(message.message)) { const requestId = message.message.id; const resolver = this._requestResolvers.get(requestId); if (resolver) { resolver(new McpError(ErrorCode.InternalError, "Task cancelled or completed")); this._requestResolvers.delete(requestId); } else { this._onerror(new Error(`Resolver missing for request ${requestId} during task ${taskId} cleanup`)); } } } } } async _waitForTaskUpdate(taskId, signal) { let interval = this._options?.defaultTaskPollInterval ?? 1000; try { const task = await this._taskStore?.getTask(taskId); if (task?.pollInterval) { interval = task.pollInterval; } } catch {} return new Promise((resolve, reject) => { if (signal.aborted) { reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); return; } const timeoutId = setTimeout(resolve, interval); signal.addEventListener("abort", () => { clearTimeout(timeoutId); reject(new McpError(ErrorCode.InvalidRequest, "Request cancelled")); }, { once: true }); }); } requestTaskStore(request, sessionId) { const taskStore = this._taskStore; if (!taskStore) { throw new Error("No task store configured"); } return { createTask: async (taskParams) => { if (!request) { throw new Error("No request provided"); } return await taskStore.createTask(taskParams, request.id, { method: request.method, params: request.params }, sessionId); }, getTask: async (taskId) => { const task = await taskStore.getTask(taskId, sessionId); if (!task) { throw new McpError(ErrorCode.InvalidParams, "Failed to retrieve task: Task not found"); } return task; }, storeTaskResult: async (taskId, status, result) => { await taskStore.storeTaskResult(taskId, status, result, sessionId); const task = await taskStore.getTask(taskId, sessionId); if (task) { const notification = TaskStatusNotificationSchema.parse({ method: "notifications/tasks/status", params: task }); await this.notification(notification); if (isTerminal(task.status)) { this._cleanupTaskProgressHandler(taskId); } } }, getTaskResult: (taskId) => { return taskStore.getTaskResult(taskId, sessionId); }, updateTaskStatus: async (taskId, status, statusMessage) => { const task = await taskStore.getTask(taskId, sessionId); if (!task) { throw new McpError(ErrorCode.InvalidParams, `Task "${taskId}" not found - it may have been cleaned up`); } if (isTerminal(task.status)) { throw new McpError(ErrorCode.InvalidParams, `Cannot update task "${taskId}" from terminal status "${task.status}" to "${status}". Terminal states (completed, failed, cancelled) cannot transition to other states.`); } await taskStore.updateTaskStatus(taskId, status, statusMessage, sessionId); const updatedTask = await taskStore.getTask(taskId, sessionId); if (updatedTask) { const notification = TaskStatusNotificationSchema.parse({ method: "notifications/tasks/status", params: updatedTask }); await this.notification(notification); if (isTerminal(updatedTask.status)) { this._cleanupTaskProgressHandler(taskId); } } }, listTasks: (cursor) => { return taskStore.listTasks(cursor, sessionId); } }; } } function isPlainObject2(value) { return value !== null && typeof value === "object" && !Array.isArray(value); } function mergeCapabilities(base, additional) { const result = { ...base }; for (const key in additional) { const k = key; const addValue = additional[k]; if (addValue === undefined) continue; const baseValue = result[k]; if (isPlainObject2(baseValue) && isPlainObject2(addValue)) { result[k] = { ...baseValue, ...addValue }; } else { result[k] = addValue; } } return result; } // node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js var import_ajv = __toESM(require_ajv(), 1); var import_ajv_formats = __toESM(require_dist(), 1); function createDefaultAjvInstance() { const ajv = new import_ajv.default({ strict: false, validateFormats: true, validateSchema: false, allErrors: true }); const addFormats = import_ajv_formats.default; addFormats(ajv); return ajv; } class AjvJsonSchemaValidator { constructor(ajv) { this._ajv = ajv ?? createDefaultAjvInstance(); } getValidator(schema) { const ajvValidator = "$id" in schema && typeof schema.$id === "string" ? this._ajv.getSchema(schema.$id) ?? this._ajv.compile(schema) : this._ajv.compile(schema); return (input) => { const valid = ajvValidator(input); if (valid) { return { valid: true, data: input, errorMessage: undefined }; } else { return { valid: false, data: undefined, errorMessage: this._ajv.errorsText(ajvValidator.errors) }; } }; } } // node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/client.js class ExperimentalClientTasks { constructor(_client) { this._client = _client; } async* callToolStream(params, resultSchema = CallToolResultSchema, options) { const clientInternal = this._client; const optionsWithTask = { ...options, task: options?.task ?? (clientInternal.isToolTask(params.name) ? {} : undefined) }; const stream = clientInternal.requestStream({ method: "tools/call", params }, resultSchema, optionsWithTask); const validator = clientInternal.getToolOutputValidator(params.name); for await (const message of stream) { if (message.type === "result" && validator) { const result = message.result; if (!result.structuredContent && !result.isError) { yield { type: "error", error: new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`) }; return; } if (result.structuredContent) { try { const validationResult = validator(result.structuredContent); if (!validationResult.valid) { yield { type: "error", error: new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`) }; return; } } catch (error2) { if (error2 instanceof McpError) { yield { type: "error", error: error2 }; return; } yield { type: "error", error: new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error2 instanceof Error ? error2.message : String(error2)}`) }; return; } } } yield message; } } async getTask(taskId, options) { return this._client.getTask({ taskId }, options); } async getTaskResult(taskId, resultSchema, options) { return this._client.getTaskResult({ taskId }, resultSchema, options); } async listTasks(cursor, options) { return this._client.listTasks(cursor ? { cursor } : undefined, options); } async cancelTask(taskId, options) { return this._client.cancelTask({ taskId }, options); } requestStream(request, resultSchema, options) { return this._client.requestStream(request, resultSchema, options); } } // node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/helpers.js function assertToolsCallTaskCapability(requests, method, entityName) { if (!requests) { throw new Error(`${entityName} does not support task creation (required for ${method})`); } switch (method) { case "tools/call": if (!requests.tools?.call) { throw new Error(`${entityName} does not support task creation for tools/call (required for ${method})`); } break; default: break; } } function assertClientRequestTaskCapability(requests, method, entityName) { if (!requests) { throw new Error(`${entityName} does not support task creation (required for ${method})`); } switch (method) { case "sampling/createMessage": if (!requests.sampling?.createMessage) { throw new Error(`${entityName} does not support task creation for sampling/createMessage (required for ${method})`); } break; case "elicitation/create": if (!requests.elicitation?.create) { throw new Error(`${entityName} does not support task creation for elicitation/create (required for ${method})`); } break; default: break; } } // node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js function applyElicitationDefaults(schema, data) { if (!schema || data === null || typeof data !== "object") return; if (schema.type === "object" && schema.properties && typeof schema.properties === "object") { const obj = data; const props = schema.properties; for (const key of Object.keys(props)) { const propSchema = props[key]; if (obj[key] === undefined && Object.prototype.hasOwnProperty.call(propSchema, "default")) { obj[key] = propSchema.default; } if (obj[key] !== undefined) { applyElicitationDefaults(propSchema, obj[key]); } } } if (Array.isArray(schema.anyOf)) { for (const sub of schema.anyOf) { if (typeof sub !== "boolean") { applyElicitationDefaults(sub, data); } } } if (Array.isArray(schema.oneOf)) { for (const sub of schema.oneOf) { if (typeof sub !== "boolean") { applyElicitationDefaults(sub, data); } } } } function getSupportedElicitationModes(capabilities) { if (!capabilities) { return { supportsFormMode: false, supportsUrlMode: false }; } const hasFormCapability = capabilities.form !== undefined; const hasUrlCapability = capabilities.url !== undefined; const supportsFormMode = hasFormCapability || !hasFormCapability && !hasUrlCapability; const supportsUrlMode = hasUrlCapability; return { supportsFormMode, supportsUrlMode }; } class Client extends Protocol { constructor(_clientInfo, options) { super(options); this._clientInfo = _clientInfo; this._cachedToolOutputValidators = new Map; this._cachedKnownTaskTools = new Set; this._cachedRequiredTaskTools = new Set; this._listChangedDebounceTimers = new Map; this._capabilities = options?.capabilities ?? {}; this._jsonSchemaValidator = options?.jsonSchemaValidator ?? new AjvJsonSchemaValidator; if (options?.listChanged) { this._pendingListChangedConfig = options.listChanged; } } _setupListChangedHandlers(config2) { if (config2.tools && this._serverCapabilities?.tools?.listChanged) { this._setupListChangedHandler("tools", ToolListChangedNotificationSchema, config2.tools, async () => { const result = await this.listTools(); return result.tools; }); } if (config2.prompts && this._serverCapabilities?.prompts?.listChanged) { this._setupListChangedHandler("prompts", PromptListChangedNotificationSchema, config2.prompts, async () => { const result = await this.listPrompts(); return result.prompts; }); } if (config2.resources && this._serverCapabilities?.resources?.listChanged) { this._setupListChangedHandler("resources", ResourceListChangedNotificationSchema, config2.resources, async () => { const result = await this.listResources(); return result.resources; }); } } get experimental() { if (!this._experimental) { this._experimental = { tasks: new ExperimentalClientTasks(this) }; } return this._experimental; } registerCapabilities(capabilities) { if (this.transport) { throw new Error("Cannot register capabilities after connecting to transport"); } this._capabilities = mergeCapabilities(this._capabilities, capabilities); } setRequestHandler(requestSchema, handler) { const shape = getObjectShape(requestSchema); const methodSchema = shape?.method; if (!methodSchema) { throw new Error("Schema is missing a method literal"); } let methodValue; if (isZ4Schema(methodSchema)) { const v4Schema = methodSchema; const v4Def = v4Schema._zod?.def; methodValue = v4Def?.value ?? v4Schema.value; } else { const v3Schema = methodSchema; const legacyDef = v3Schema._def; methodValue = legacyDef?.value ?? v3Schema.value; } if (typeof methodValue !== "string") { throw new Error("Schema method literal must be a string"); } const method = methodValue; if (method === "elicitation/create") { const wrappedHandler = async (request, extra) => { const validatedRequest = safeParse2(ElicitRequestSchema, request); if (!validatedRequest.success) { const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error); throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation request: ${errorMessage}`); } const { params } = validatedRequest.data; params.mode = params.mode ?? "form"; const { supportsFormMode, supportsUrlMode } = getSupportedElicitationModes(this._capabilities.elicitation); if (params.mode === "form" && !supportsFormMode) { throw new McpError(ErrorCode.InvalidParams, "Client does not support form-mode elicitation requests"); } if (params.mode === "url" && !supportsUrlMode) { throw new McpError(ErrorCode.InvalidParams, "Client does not support URL-mode elicitation requests"); } const result = await Promise.resolve(handler(request, extra)); if (params.task) { const taskValidationResult = safeParse2(CreateTaskResultSchema, result); if (!taskValidationResult.success) { const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error); throw new McpError(ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`); } return taskValidationResult.data; } const validationResult = safeParse2(ElicitResultSchema, result); if (!validationResult.success) { const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error); throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation result: ${errorMessage}`); } const validatedResult = validationResult.data; const requestedSchema = params.mode === "form" ? params.requestedSchema : undefined; if (params.mode === "form" && validatedResult.action === "accept" && validatedResult.content && requestedSchema) { if (this._capabilities.elicitation?.form?.applyDefaults) { try { applyElicitationDefaults(requestedSchema, validatedResult.content); } catch {} } } return validatedResult; }; return super.setRequestHandler(requestSchema, wrappedHandler); } if (method === "sampling/createMessage") { const wrappedHandler = async (request, extra) => { const validatedRequest = safeParse2(CreateMessageRequestSchema, request); if (!validatedRequest.success) { const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error); throw new McpError(ErrorCode.InvalidParams, `Invalid sampling request: ${errorMessage}`); } const { params } = validatedRequest.data; const result = await Promise.resolve(handler(request, extra)); if (params.task) { const taskValidationResult = safeParse2(CreateTaskResultSchema, result); if (!taskValidationResult.success) { const errorMessage = taskValidationResult.error instanceof Error ? taskValidationResult.error.message : String(taskValidationResult.error); throw new McpError(ErrorCode.InvalidParams, `Invalid task creation result: ${errorMessage}`); } return taskValidationResult.data; } const hasTools = params.tools || params.toolChoice; const resultSchema = hasTools ? CreateMessageResultWithToolsSchema : CreateMessageResultSchema; const validationResult = safeParse2(resultSchema, result); if (!validationResult.success) { const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error); throw new McpError(ErrorCode.InvalidParams, `Invalid sampling result: ${errorMessage}`); } return validationResult.data; }; return super.setRequestHandler(requestSchema, wrappedHandler); } return super.setRequestHandler(requestSchema, handler); } assertCapability(capability, method) { if (!this._serverCapabilities?.[capability]) { throw new Error(`Server does not support ${capability} (required for ${method})`); } } async connect(transport, options) { await super.connect(transport); if (transport.sessionId !== undefined) { return; } try { const result = await this.request({ method: "initialize", params: { protocolVersion: LATEST_PROTOCOL_VERSION, capabilities: this._capabilities, clientInfo: this._clientInfo } }, InitializeResultSchema, options); if (result === undefined) { throw new Error(`Server sent invalid initialize result: ${result}`); } if (!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) { throw new Error(`Server's protocol version is not supported: ${result.protocolVersion}`); } this._serverCapabilities = result.capabilities; this._serverVersion = result.serverInfo; if (transport.setProtocolVersion) { transport.setProtocolVersion(result.protocolVersion); } this._instructions = result.instructions; await this.notification({ method: "notifications/initialized" }); if (this._pendingListChangedConfig) { this._setupListChangedHandlers(this._pendingListChangedConfig); this._pendingListChangedConfig = undefined; } } catch (error2) { this.close(); throw error2; } } getServerCapabilities() { return this._serverCapabilities; } getServerVersion() { return this._serverVersion; } getInstructions() { return this._instructions; } assertCapabilityForMethod(method) { switch (method) { case "logging/setLevel": if (!this._serverCapabilities?.logging) { throw new Error(`Server does not support logging (required for ${method})`); } break; case "prompts/get": case "prompts/list": if (!this._serverCapabilities?.prompts) { throw new Error(`Server does not support prompts (required for ${method})`); } break; case "resources/list": case "resources/templates/list": case "resources/read": case "resources/subscribe": case "resources/unsubscribe": if (!this._serverCapabilities?.resources) { throw new Error(`Server does not support resources (required for ${method})`); } if (method === "resources/subscribe" && !this._serverCapabilities.resources.subscribe) { throw new Error(`Server does not support resource subscriptions (required for ${method})`); } break; case "tools/call": case "tools/list": if (!this._serverCapabilities?.tools) { throw new Error(`Server does not support tools (required for ${method})`); } break; case "completion/complete": if (!this._serverCapabilities?.completions) { throw new Error(`Server does not support completions (required for ${method})`); } break; case "initialize": break; case "ping": break; } } assertNotificationCapability(method) { switch (method) { case "notifications/roots/list_changed": if (!this._capabilities.roots?.listChanged) { throw new Error(`Client does not support roots list changed notifications (required for ${method})`); } break; case "notifications/initialized": break; case "notifications/cancelled": break; case "notifications/progress": break; } } assertRequestHandlerCapability(method) { if (!this._capabilities) { return; } switch (method) { case "sampling/createMessage": if (!this._capabilities.sampling) { throw new Error(`Client does not support sampling capability (required for ${method})`); } break; case "elicitation/create": if (!this._capabilities.elicitation) { throw new Error(`Client does not support elicitation capability (required for ${method})`); } break; case "roots/list": if (!this._capabilities.roots) { throw new Error(`Client does not support roots capability (required for ${method})`); } break; case "tasks/get": case "tasks/list": case "tasks/result": case "tasks/cancel": if (!this._capabilities.tasks) { throw new Error(`Client does not support tasks capability (required for ${method})`); } break; case "ping": break; } } assertTaskCapability(method) { assertToolsCallTaskCapability(this._serverCapabilities?.tasks?.requests, method, "Server"); } assertTaskHandlerCapability(method) { if (!this._capabilities) { return; } assertClientRequestTaskCapability(this._capabilities.tasks?.requests, method, "Client"); } async ping(options) { return this.request({ method: "ping" }, EmptyResultSchema, options); } async complete(params, options) { return this.request({ method: "completion/complete", params }, CompleteResultSchema, options); } async setLoggingLevel(level, options) { return this.request({ method: "logging/setLevel", params: { level } }, EmptyResultSchema, options); } async getPrompt(params, options) { return this.request({ method: "prompts/get", params }, GetPromptResultSchema, options); } async listPrompts(params, options) { return this.request({ method: "prompts/list", params }, ListPromptsResultSchema, options); } async listResources(params, options) { return this.request({ method: "resources/list", params }, ListResourcesResultSchema, options); } async listResourceTemplates(params, options) { return this.request({ method: "resources/templates/list", params }, ListResourceTemplatesResultSchema, options); } async readResource(params, options) { return this.request({ method: "resources/read", params }, ReadResourceResultSchema, options); } async subscribeResource(params, options) { return this.request({ method: "resources/subscribe", params }, EmptyResultSchema, options); } async unsubscribeResource(params, options) { return this.request({ method: "resources/unsubscribe", params }, EmptyResultSchema, options); } async callTool(params, resultSchema = CallToolResultSchema, options) { if (this.isToolTaskRequired(params.name)) { throw new McpError(ErrorCode.InvalidRequest, `Tool "${params.name}" requires task-based execution. Use client.experimental.tasks.callToolStream() instead.`); } const result = await this.request({ method: "tools/call", params }, resultSchema, options); const validator = this.getToolOutputValidator(params.name); if (validator) { if (!result.structuredContent && !result.isError) { throw new McpError(ErrorCode.InvalidRequest, `Tool ${params.name} has an output schema but did not return structured content`); } if (result.structuredContent) { try { const validationResult = validator(result.structuredContent); if (!validationResult.valid) { throw new McpError(ErrorCode.InvalidParams, `Structured content does not match the tool's output schema: ${validationResult.errorMessage}`); } } catch (error2) { if (error2 instanceof McpError) { throw error2; } throw new McpError(ErrorCode.InvalidParams, `Failed to validate structured content: ${error2 instanceof Error ? error2.message : String(error2)}`); } } } return result; } isToolTask(toolName) { if (!this._serverCapabilities?.tasks?.requests?.tools?.call) { return false; } return this._cachedKnownTaskTools.has(toolName); } isToolTaskRequired(toolName) { return this._cachedRequiredTaskTools.has(toolName); } cacheToolMetadata(tools) { this._cachedToolOutputValidators.clear(); this._cachedKnownTaskTools.clear(); this._cachedRequiredTaskTools.clear(); for (const tool of tools) { if (tool.outputSchema) { const toolValidator = this._jsonSchemaValidator.getValidator(tool.outputSchema); this._cachedToolOutputValidators.set(tool.name, toolValidator); } const taskSupport = tool.execution?.taskSupport; if (taskSupport === "required" || taskSupport === "optional") { this._cachedKnownTaskTools.add(tool.name); } if (taskSupport === "required") { this._cachedRequiredTaskTools.add(tool.name); } } } getToolOutputValidator(toolName) { return this._cachedToolOutputValidators.get(toolName); } async listTools(params, options) { const result = await this.request({ method: "tools/list", params }, ListToolsResultSchema, options); this.cacheToolMetadata(result.tools); return result; } _setupListChangedHandler(listType, notificationSchema, options, fetcher) { const parseResult = ListChangedOptionsBaseSchema.safeParse(options); if (!parseResult.success) { throw new Error(`Invalid ${listType} listChanged options: ${parseResult.error.message}`); } if (typeof options.onChanged !== "function") { throw new Error(`Invalid ${listType} listChanged options: onChanged must be a function`); } const { autoRefresh, debounceMs } = parseResult.data; const { onChanged } = options; const refresh = async () => { if (!autoRefresh) { onChanged(null, null); return; } try { const items = await fetcher(); onChanged(null, items); } catch (e) { const error2 = e instanceof Error ? e : new Error(String(e)); onChanged(error2, null); } }; const handler = () => { if (debounceMs) { const existingTimer = this._listChangedDebounceTimers.get(listType); if (existingTimer) { clearTimeout(existingTimer); } const timer = setTimeout(refresh, debounceMs); this._listChangedDebounceTimers.set(listType, timer); } else { refresh(); } }; this.setNotificationHandler(notificationSchema, handler); } async sendRootsListChanged() { return this.notification({ method: "notifications/roots/list_changed" }); } } // node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js var import_cross_spawn = __toESM(require_cross_spawn(), 1); import process3 from "node:process"; import { PassThrough } from "node:stream"; // node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js class ReadBuffer { append(chunk) { this._buffer = this._buffer ? Buffer.concat([this._buffer, chunk]) : chunk; } readMessage() { if (!this._buffer) { return null; } const index = this._buffer.indexOf(` `); if (index === -1) { return null; } const line = this._buffer.toString("utf8", 0, index).replace(/\r$/, ""); this._buffer = this._buffer.subarray(index + 1); return deserializeMessage(line); } clear() { this._buffer = undefined; } } function deserializeMessage(line) { return JSONRPCMessageSchema.parse(JSON.parse(line)); } function serializeMessage(message) { return JSON.stringify(message) + ` `; } // node_modules/@modelcontextprotocol/sdk/dist/esm/client/stdio.js var DEFAULT_INHERITED_ENV_VARS = process3.platform === "win32" ? [ "APPDATA", "HOMEDRIVE", "HOMEPATH", "LOCALAPPDATA", "PATH", "PROCESSOR_ARCHITECTURE", "SYSTEMDRIVE", "SYSTEMROOT", "TEMP", "USERNAME", "USERPROFILE", "PROGRAMFILES" ] : ["HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER"]; function getDefaultEnvironment() { const env = {}; for (const key of DEFAULT_INHERITED_ENV_VARS) { const value = process3.env[key]; if (value === undefined) { continue; } if (value.startsWith("()")) { continue; } env[key] = value; } return env; } class StdioClientTransport { constructor(server) { this._readBuffer = new ReadBuffer; this._stderrStream = null; this._serverParams = server; if (server.stderr === "pipe" || server.stderr === "overlapped") { this._stderrStream = new PassThrough; } } async start() { if (this._process) { throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically."); } return new Promise((resolve, reject) => { this._process = import_cross_spawn.default(this._serverParams.command, this._serverParams.args ?? [], { env: { ...getDefaultEnvironment(), ...this._serverParams.env }, stdio: ["pipe", "pipe", this._serverParams.stderr ?? "inherit"], shell: false, windowsHide: process3.platform === "win32" && isElectron(), cwd: this._serverParams.cwd }); this._process.on("error", (error2) => { reject(error2); this.onerror?.(error2); }); this._process.on("spawn", () => { resolve(); }); this._process.on("close", (_code) => { this._process = undefined; this.onclose?.(); }); this._process.stdin?.on("error", (error2) => { this.onerror?.(error2); }); this._process.stdout?.on("data", (chunk) => { this._readBuffer.append(chunk); this.processReadBuffer(); }); this._process.stdout?.on("error", (error2) => { this.onerror?.(error2); }); if (this._stderrStream && this._process.stderr) { this._process.stderr.pipe(this._stderrStream); } }); } get stderr() { if (this._stderrStream) { return this._stderrStream; } return this._process?.stderr ?? null; } get pid() { return this._process?.pid ?? null; } processReadBuffer() { while (true) { try { const message = this._readBuffer.readMessage(); if (message === null) { break; } this.onmessage?.(message); } catch (error2) { this.onerror?.(error2); } } } async close() { if (this._process) { const processToClose = this._process; this._process = undefined; const closePromise = new Promise((resolve) => { processToClose.once("close", () => { resolve(); }); }); try { processToClose.stdin?.end(); } catch {} await Promise.race([closePromise, new Promise((resolve) => setTimeout(resolve, 2000).unref())]); if (processToClose.exitCode === null) { try { processToClose.kill("SIGTERM"); } catch {} await Promise.race([closePromise, new Promise((resolve) => setTimeout(resolve, 2000).unref())]); } if (processToClose.exitCode === null) { try { processToClose.kill("SIGKILL"); } catch {} } } this._readBuffer.clear(); } send(message) { return new Promise((resolve) => { if (!this._process?.stdin) { throw new Error("Not connected"); } const json = serializeMessage(message); if (this._process.stdin.write(json)) { resolve(); } else { this._process.stdin.once("drain", resolve); } }); } } function isElectron() { return "type" in process3; } // src/services/worker-service.ts init_worker_utils(); init_hook_constants(); init_SettingsDefaultsManager(); // src/shared/EnvManager.ts init_logger(); import { existsSync as existsSync4, readFileSync as readFileSync4, writeFileSync as writeFileSync2, mkdirSync as mkdirSync4 } from "fs"; import { join as join4 } from "path"; import { homedir as homedir4 } from "os"; var DATA_DIR2 = join4(homedir4(), ".claude-mem"); var ENV_FILE_PATH = join4(DATA_DIR2, ".env"); var BLOCKED_ENV_VARS = [ "ANTHROPIC_API_KEY", "CLAUDECODE" ]; function parseEnvFile(content) { const result = {}; for (const line of content.split(` `)) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith("#")) continue; const eqIndex = trimmed.indexOf("="); if (eqIndex === -1) continue; const key = trimmed.slice(0, eqIndex).trim(); let value = trimmed.slice(eqIndex + 1).trim(); if (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'")) { value = value.slice(1, -1); } if (key) { result[key] = value; } } return result; } function loadClaudeMemEnv() { if (!existsSync4(ENV_FILE_PATH)) { return {}; } try { const content = readFileSync4(ENV_FILE_PATH, "utf-8"); const parsed = parseEnvFile(content); const result = {}; if (parsed.ANTHROPIC_API_KEY) result.ANTHROPIC_API_KEY = parsed.ANTHROPIC_API_KEY; if (parsed.GEMINI_API_KEY) result.GEMINI_API_KEY = parsed.GEMINI_API_KEY; if (parsed.OPENROUTER_API_KEY) result.OPENROUTER_API_KEY = parsed.OPENROUTER_API_KEY; return result; } catch (error2) { logger.warn("ENV", "Failed to load .env file", { path: ENV_FILE_PATH }, error2); return {}; } } function buildIsolatedEnv(includeCredentials = true) { const isolatedEnv = {}; for (const [key, value] of Object.entries(process.env)) { if (value !== undefined && !BLOCKED_ENV_VARS.includes(key)) { isolatedEnv[key] = value; } } isolatedEnv.CLAUDE_CODE_ENTRYPOINT = "sdk-ts"; if (includeCredentials) { const credentials = loadClaudeMemEnv(); if (credentials.ANTHROPIC_API_KEY) { isolatedEnv.ANTHROPIC_API_KEY = credentials.ANTHROPIC_API_KEY; } if (credentials.GEMINI_API_KEY) { isolatedEnv.GEMINI_API_KEY = credentials.GEMINI_API_KEY; } if (credentials.OPENROUTER_API_KEY) { isolatedEnv.OPENROUTER_API_KEY = credentials.OPENROUTER_API_KEY; } if (!isolatedEnv.ANTHROPIC_API_KEY && process.env.CLAUDE_CODE_OAUTH_TOKEN) { isolatedEnv.CLAUDE_CODE_OAUTH_TOKEN = process.env.CLAUDE_CODE_OAUTH_TOKEN; } } return isolatedEnv; } function getCredential(key) { const env = loadClaudeMemEnv(); return env[key]; } function hasAnthropicApiKey() { const env = loadClaudeMemEnv(); return !!env.ANTHROPIC_API_KEY; } function getAuthMethodDescription() { if (hasAnthropicApiKey()) { return "API key (from ~/.claude-mem/.env)"; } if (process.env.CLAUDE_CODE_OAUTH_TOKEN) { return "Claude Code OAuth token (from parent process)"; } return "Claude Code CLI (subscription billing)"; } // src/services/worker-service.ts init_logger(); // src/services/sync/ChromaMcpManager.ts init_logger(); init_SettingsDefaultsManager(); init_paths(); import { execSync as execSync2 } from "child_process"; import path5 from "path"; import os from "os"; import fs from "fs"; // src/supervisor/env-sanitizer.ts var ENV_PREFIXES = ["CLAUDECODE_", "CLAUDE_CODE_"]; var ENV_EXACT_MATCHES = new Set([ "CLAUDECODE", "CLAUDE_CODE_SESSION", "CLAUDE_CODE_ENTRYPOINT", "MCP_SESSION_ID" ]); function sanitizeEnv(env = process.env) { const sanitized = {}; for (const [key, value] of Object.entries(env)) { if (value === undefined) continue; if (ENV_EXACT_MATCHES.has(key)) continue; if (ENV_PREFIXES.some((prefix) => key.startsWith(prefix))) continue; sanitized[key] = value; } return sanitized; } // src/supervisor/index.ts init_logger(); import { existsSync as existsSync6, readFileSync as readFileSync6, rmSync as rmSync2 } from "fs"; import { homedir as homedir7 } from "os"; import path4 from "path"; // src/supervisor/process-registry.ts init_logger(); import { existsSync as existsSync5, mkdirSync as mkdirSync5, readFileSync as readFileSync5, writeFileSync as writeFileSync3 } from "fs"; import { homedir as homedir5 } from "os"; import path2 from "path"; var REAP_SESSION_SIGTERM_TIMEOUT_MS = 5000; var REAP_SESSION_SIGKILL_TIMEOUT_MS = 1000; var DATA_DIR3 = path2.join(homedir5(), ".claude-mem"); var DEFAULT_REGISTRY_PATH = path2.join(DATA_DIR3, "supervisor.json"); function isPidAlive(pid) { if (!Number.isInteger(pid) || pid < 0) return false; if (pid === 0) return false; try { process.kill(pid, 0); return true; } catch (error2) { const code = error2.code; return code === "EPERM"; } } class ProcessRegistry { registryPath; entries = new Map; runtimeProcesses = new Map; initialized = false; constructor(registryPath = DEFAULT_REGISTRY_PATH) { this.registryPath = registryPath; } initialize() { if (this.initialized) return; this.initialized = true; mkdirSync5(path2.dirname(this.registryPath), { recursive: true }); if (!existsSync5(this.registryPath)) { this.persist(); return; } try { const raw = JSON.parse(readFileSync5(this.registryPath, "utf-8")); const processes = raw.processes ?? {}; for (const [id, info] of Object.entries(processes)) { this.entries.set(id, info); } } catch (error2) { logger.warn("SYSTEM", "Failed to parse supervisor registry, rebuilding", { path: this.registryPath }, error2); this.entries.clear(); } const removed = this.pruneDeadEntries(); if (removed > 0) { logger.info("SYSTEM", "Removed dead processes from supervisor registry", { removed }); } this.persist(); } register(id, processInfo, processRef) { this.initialize(); this.entries.set(id, processInfo); if (processRef) { this.runtimeProcesses.set(id, processRef); } this.persist(); } unregister(id) { this.initialize(); this.entries.delete(id); this.runtimeProcesses.delete(id); this.persist(); } clear() { this.entries.clear(); this.runtimeProcesses.clear(); this.persist(); } getAll() { this.initialize(); return Array.from(this.entries.entries()).map(([id, info]) => ({ id, ...info })).sort((a, b) => { const left = Date.parse(a.startedAt); const right = Date.parse(b.startedAt); return (Number.isNaN(left) ? 0 : left) - (Number.isNaN(right) ? 0 : right); }); } getBySession(sessionId) { const normalized = String(sessionId); return this.getAll().filter((record3) => record3.sessionId !== undefined && String(record3.sessionId) === normalized); } getRuntimeProcess(id) { return this.runtimeProcesses.get(id); } getByPid(pid) { return this.getAll().filter((record3) => record3.pid === pid); } pruneDeadEntries() { this.initialize(); let removed = 0; for (const [id, info] of this.entries) { if (isPidAlive(info.pid)) continue; this.entries.delete(id); this.runtimeProcesses.delete(id); removed += 1; } if (removed > 0) { this.persist(); } return removed; } async reapSession(sessionId) { this.initialize(); const sessionRecords = this.getBySession(sessionId); if (sessionRecords.length === 0) { return 0; } const sessionIdNum = typeof sessionId === "number" ? sessionId : Number(sessionId) || undefined; logger.info("SYSTEM", `Reaping ${sessionRecords.length} process(es) for session ${sessionId}`, { sessionId: sessionIdNum, pids: sessionRecords.map((r) => r.pid) }); const aliveRecords = sessionRecords.filter((r) => isPidAlive(r.pid)); for (const record3 of aliveRecords) { try { process.kill(record3.pid, "SIGTERM"); } catch (error2) { const code = error2.code; if (code !== "ESRCH") { logger.debug("SYSTEM", `Failed to SIGTERM session process PID ${record3.pid}`, { pid: record3.pid }, error2); } } } const deadline = Date.now() + REAP_SESSION_SIGTERM_TIMEOUT_MS; while (Date.now() < deadline) { const survivors2 = aliveRecords.filter((r) => isPidAlive(r.pid)); if (survivors2.length === 0) break; await new Promise((resolve) => setTimeout(resolve, 100)); } const survivors = aliveRecords.filter((r) => isPidAlive(r.pid)); for (const record3 of survivors) { logger.warn("SYSTEM", `Session process PID ${record3.pid} did not exit after SIGTERM, sending SIGKILL`, { pid: record3.pid, sessionId: sessionIdNum }); try { process.kill(record3.pid, "SIGKILL"); } catch (error2) { const code = error2.code; if (code !== "ESRCH") { logger.debug("SYSTEM", `Failed to SIGKILL session process PID ${record3.pid}`, { pid: record3.pid }, error2); } } } if (survivors.length > 0) { const sigkillDeadline = Date.now() + REAP_SESSION_SIGKILL_TIMEOUT_MS; while (Date.now() < sigkillDeadline) { const remaining = survivors.filter((r) => isPidAlive(r.pid)); if (remaining.length === 0) break; await new Promise((resolve) => setTimeout(resolve, 100)); } } for (const record3 of sessionRecords) { this.entries.delete(record3.id); this.runtimeProcesses.delete(record3.id); } this.persist(); logger.info("SYSTEM", `Reaped ${sessionRecords.length} process(es) for session ${sessionId}`, { sessionId: sessionIdNum, reaped: sessionRecords.length }); return sessionRecords.length; } persist() { const payload = { processes: Object.fromEntries(this.entries.entries()) }; mkdirSync5(path2.dirname(this.registryPath), { recursive: true }); writeFileSync3(this.registryPath, JSON.stringify(payload, null, 2)); } } var registrySingleton = null; function getProcessRegistry() { if (!registrySingleton) { registrySingleton = new ProcessRegistry; } return registrySingleton; } // src/supervisor/shutdown.ts init_logger(); init_hook_constants(); import { execFile } from "child_process"; import { rmSync } from "fs"; import { homedir as homedir6 } from "os"; import path3 from "path"; import { promisify } from "util"; var execFileAsync = promisify(execFile); var DATA_DIR4 = path3.join(homedir6(), ".claude-mem"); var PID_FILE = path3.join(DATA_DIR4, "worker.pid"); async function runShutdownCascade(options) { const currentPid = options.currentPid ?? process.pid; const pidFilePath = options.pidFilePath ?? PID_FILE; const allRecords = options.registry.getAll(); const childRecords = [...allRecords].filter((record3) => record3.pid !== currentPid).sort((a, b) => Date.parse(b.startedAt) - Date.parse(a.startedAt)); for (const record3 of childRecords) { if (!isPidAlive(record3.pid)) { options.registry.unregister(record3.id); continue; } try { await signalProcess(record3.pid, "SIGTERM"); } catch (error2) { logger.debug("SYSTEM", "Failed to send SIGTERM to child process", { pid: record3.pid, type: record3.type }, error2); } } await waitForExit(childRecords, 5000); const survivors = childRecords.filter((record3) => isPidAlive(record3.pid)); for (const record3 of survivors) { try { await signalProcess(record3.pid, "SIGKILL"); } catch (error2) { logger.debug("SYSTEM", "Failed to force kill child process", { pid: record3.pid, type: record3.type }, error2); } } await waitForExit(survivors, 1000); for (const record3 of childRecords) { options.registry.unregister(record3.id); } for (const record3 of allRecords.filter((record4) => record4.pid === currentPid)) { options.registry.unregister(record3.id); } try { rmSync(pidFilePath, { force: true }); } catch (error2) { logger.debug("SYSTEM", "Failed to remove PID file during shutdown", { pidFilePath }, error2); } options.registry.pruneDeadEntries(); } async function waitForExit(records, timeoutMs) { const deadline = Date.now() + timeoutMs; while (Date.now() < deadline) { const survivors = records.filter((record3) => isPidAlive(record3.pid)); if (survivors.length === 0) { return; } await new Promise((resolve) => setTimeout(resolve, 100)); } } async function signalProcess(pid, signal) { if (signal === "SIGTERM") { try { process.kill(pid, signal); } catch (error2) { const errno = error2.code; if (errno === "ESRCH") { return; } throw error2; } return; } if (process.platform === "win32") { const treeKill = await loadTreeKill(); if (treeKill) { await new Promise((resolve, reject) => { treeKill(pid, signal, (error2) => { if (!error2) { resolve(); return; } const errno = error2.code; if (errno === "ESRCH") { resolve(); return; } reject(error2); }); }); return; } const args = ["/PID", String(pid), "/T"]; if (signal === "SIGKILL") { args.push("/F"); } await execFileAsync("taskkill", args, { timeout: HOOK_TIMEOUTS.POWERSHELL_COMMAND, windowsHide: true }); return; } try { process.kill(pid, signal); } catch (error2) { const errno = error2.code; if (errno === "ESRCH") { return; } throw error2; } } async function loadTreeKill() { const moduleName = "tree-kill"; try { const treeKillModule = await import(moduleName); return treeKillModule.default ?? treeKillModule; } catch { return null; } } // src/supervisor/health-checker.ts init_logger(); var HEALTH_CHECK_INTERVAL_MS = 30000; var healthCheckInterval = null; function runHealthCheck() { const registry2 = getProcessRegistry(); const removedProcessCount = registry2.pruneDeadEntries(); if (removedProcessCount > 0) { logger.info("SYSTEM", `Health check: pruned ${removedProcessCount} dead process(es) from registry`); } } function startHealthChecker() { if (healthCheckInterval !== null) return; healthCheckInterval = setInterval(runHealthCheck, HEALTH_CHECK_INTERVAL_MS); healthCheckInterval.unref(); logger.debug("SYSTEM", "Health checker started", { intervalMs: HEALTH_CHECK_INTERVAL_MS }); } function stopHealthChecker() { if (healthCheckInterval === null) return; clearInterval(healthCheckInterval); healthCheckInterval = null; logger.debug("SYSTEM", "Health checker stopped"); } // src/supervisor/index.ts var DATA_DIR5 = path4.join(homedir7(), ".claude-mem"); var PID_FILE2 = path4.join(DATA_DIR5, "worker.pid"); class Supervisor { registry; started = false; stopPromise = null; signalHandlersRegistered = false; shutdownInitiated = false; shutdownHandler = null; constructor(registry2) { this.registry = registry2; } async start() { if (this.started) return; this.registry.initialize(); const pidStatus = validateWorkerPidFile({ logAlive: false }); if (pidStatus === "alive") { throw new Error("Worker already running"); } this.started = true; startHealthChecker(); } configureSignalHandlers(shutdownHandler) { this.shutdownHandler = shutdownHandler; if (this.signalHandlersRegistered) return; this.signalHandlersRegistered = true; const handleSignal = async (signal) => { if (this.shutdownInitiated) { logger.warn("SYSTEM", `Received ${signal} but shutdown already in progress`); return; } this.shutdownInitiated = true; logger.info("SYSTEM", `Received ${signal}, shutting down...`); try { if (this.shutdownHandler) { await this.shutdownHandler(); } else { await this.stop(); } } catch (error2) { logger.error("SYSTEM", "Error during shutdown", {}, error2); try { await this.stop(); } catch (stopError) { logger.debug("SYSTEM", "Supervisor shutdown fallback failed", {}, stopError); } } process.exit(0); }; process.on("SIGTERM", () => void handleSignal("SIGTERM")); process.on("SIGINT", () => void handleSignal("SIGINT")); if (process.platform !== "win32") { if (process.argv.includes("--daemon")) { process.on("SIGHUP", () => { logger.debug("SYSTEM", "Ignoring SIGHUP in daemon mode"); }); } else { process.on("SIGHUP", () => void handleSignal("SIGHUP")); } } } async stop() { if (this.stopPromise) { await this.stopPromise; return; } stopHealthChecker(); this.stopPromise = runShutdownCascade({ registry: this.registry, currentPid: process.pid }).finally(() => { this.started = false; this.stopPromise = null; }); await this.stopPromise; } assertCanSpawn(type) { if (this.stopPromise !== null) { throw new Error(`Supervisor is shutting down, refusing to spawn ${type}`); } } registerProcess(id, processInfo, processRef) { this.registry.register(id, processInfo, processRef); } unregisterProcess(id) { this.registry.unregister(id); } getRegistry() { return this.registry; } } var supervisorSingleton = new Supervisor(getProcessRegistry()); async function startSupervisor() { await supervisorSingleton.start(); } async function stopSupervisor() { await supervisorSingleton.stop(); } function getSupervisor() { return supervisorSingleton; } function configureSupervisorSignalHandlers(shutdownHandler) { supervisorSingleton.configureSignalHandlers(shutdownHandler); } function validateWorkerPidFile(options = {}) { const pidFilePath = options.pidFilePath ?? PID_FILE2; if (!existsSync6(pidFilePath)) { return "missing"; } let pidInfo = null; try { pidInfo = JSON.parse(readFileSync6(pidFilePath, "utf-8")); } catch (error2) { logger.warn("SYSTEM", "Failed to parse worker PID file, removing it", { path: pidFilePath }, error2); rmSync2(pidFilePath, { force: true }); return "invalid"; } if (isPidAlive(pidInfo.pid)) { if (options.logAlive ?? true) { logger.info("SYSTEM", "Worker already running (PID alive)", { existingPid: pidInfo.pid, existingPort: pidInfo.port, startedAt: pidInfo.startedAt }); } return "alive"; } logger.info("SYSTEM", "Removing stale PID file (worker process is dead)", { pid: pidInfo.pid, port: pidInfo.port, startedAt: pidInfo.startedAt }); rmSync2(pidFilePath, { force: true }); return "stale"; } // src/services/sync/ChromaMcpManager.ts var CHROMA_MCP_CLIENT_NAME = "claude-mem-chroma"; var CHROMA_MCP_CLIENT_VERSION = "1.0.0"; var MCP_CONNECTION_TIMEOUT_MS = 30000; var RECONNECT_BACKOFF_MS = 1e4; var DEFAULT_CHROMA_DATA_DIR = path5.join(os.homedir(), ".claude-mem", "chroma"); var CHROMA_SUPERVISOR_ID = "chroma-mcp"; class ChromaMcpManager { static instance = null; client = null; transport = null; connected = false; lastConnectionFailureTimestamp = 0; connecting = null; constructor() {} static getInstance() { if (!ChromaMcpManager.instance) { ChromaMcpManager.instance = new ChromaMcpManager; } return ChromaMcpManager.instance; } async ensureConnected() { if (this.connected && this.client) { return; } const timeSinceLastFailure = Date.now() - this.lastConnectionFailureTimestamp; if (this.lastConnectionFailureTimestamp > 0 && timeSinceLastFailure < RECONNECT_BACKOFF_MS) { throw new Error(`chroma-mcp connection in backoff (${Math.ceil((RECONNECT_BACKOFF_MS - timeSinceLastFailure) / 1000)}s remaining)`); } if (this.connecting) { await this.connecting; return; } this.connecting = this.connectInternal(); try { await this.connecting; } catch (error2) { this.lastConnectionFailureTimestamp = Date.now(); throw error2; } finally { this.connecting = null; } } async connectInternal() { if (this.transport) { try { await this.transport.close(); } catch {} } if (this.client) { try { await this.client.close(); } catch {} } this.client = null; this.transport = null; this.connected = false; const commandArgs = this.buildCommandArgs(); const spawnEnvironment = this.getSpawnEnv(); getSupervisor().assertCanSpawn("chroma mcp"); const isWindows = process.platform === "win32"; const uvxSpawnCommand = isWindows ? process.env.ComSpec || "cmd.exe" : "uvx"; const uvxSpawnArgs = isWindows ? ["/c", "uvx", ...commandArgs] : commandArgs; logger.info("CHROMA_MCP", "Connecting to chroma-mcp via MCP stdio", { command: uvxSpawnCommand, args: uvxSpawnArgs.join(" ") }); this.transport = new StdioClientTransport({ command: uvxSpawnCommand, args: uvxSpawnArgs, env: spawnEnvironment, stderr: "pipe" }); this.client = new Client({ name: CHROMA_MCP_CLIENT_NAME, version: CHROMA_MCP_CLIENT_VERSION }, { capabilities: {} }); const mcpConnectionPromise = this.client.connect(this.transport); let timeoutId; const timeoutPromise = new Promise((_, reject) => { timeoutId = setTimeout(() => reject(new Error(`MCP connection to chroma-mcp timed out after ${MCP_CONNECTION_TIMEOUT_MS}ms`)), MCP_CONNECTION_TIMEOUT_MS); }); try { await Promise.race([mcpConnectionPromise, timeoutPromise]); } catch (connectionError) { clearTimeout(timeoutId); logger.warn("CHROMA_MCP", "Connection failed, killing subprocess to prevent zombie", { error: connectionError instanceof Error ? connectionError.message : String(connectionError) }); try { await this.transport.close(); } catch {} try { await this.client.close(); } catch {} this.client = null; this.transport = null; this.connected = false; throw connectionError; } clearTimeout(timeoutId); this.connected = true; this.registerManagedProcess(); logger.info("CHROMA_MCP", "Connected to chroma-mcp successfully"); const currentTransport = this.transport; this.transport.onclose = () => { if (this.transport !== currentTransport) { logger.debug("CHROMA_MCP", "Ignoring stale onclose from previous transport"); return; } logger.warn("CHROMA_MCP", "chroma-mcp subprocess closed unexpectedly, applying reconnect backoff"); this.connected = false; getSupervisor().unregisterProcess(CHROMA_SUPERVISOR_ID); this.client = null; this.transport = null; this.lastConnectionFailureTimestamp = Date.now(); }; } buildCommandArgs() { const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const chromaMode = settings.CLAUDE_MEM_CHROMA_MODE || "local"; const pythonVersion = process.env.CLAUDE_MEM_PYTHON_VERSION || settings.CLAUDE_MEM_PYTHON_VERSION || "3.13"; if (chromaMode === "remote") { const chromaHost = settings.CLAUDE_MEM_CHROMA_HOST || "127.0.0.1"; const chromaPort = settings.CLAUDE_MEM_CHROMA_PORT || "8000"; const chromaSsl = settings.CLAUDE_MEM_CHROMA_SSL === "true"; const chromaTenant = settings.CLAUDE_MEM_CHROMA_TENANT || "default_tenant"; const chromaDatabase = settings.CLAUDE_MEM_CHROMA_DATABASE || "default_database"; const chromaApiKey = settings.CLAUDE_MEM_CHROMA_API_KEY || ""; const args = [ "--python", pythonVersion, "chroma-mcp", "--client-type", "http", "--host", chromaHost, "--port", chromaPort ]; args.push("--ssl", chromaSsl ? "true" : "false"); if (chromaTenant !== "default_tenant") { args.push("--tenant", chromaTenant); } if (chromaDatabase !== "default_database") { args.push("--database", chromaDatabase); } if (chromaApiKey) { args.push("--api-key", chromaApiKey); } return args; } return [ "--python", pythonVersion, "chroma-mcp", "--client-type", "persistent", "--data-dir", DEFAULT_CHROMA_DATA_DIR.replace(/\\/g, "/") ]; } async callTool(toolName, toolArguments) { await this.ensureConnected(); logger.debug("CHROMA_MCP", `Calling tool: ${toolName}`, { arguments: JSON.stringify(toolArguments).slice(0, 200) }); let result; try { result = await this.client.callTool({ name: toolName, arguments: toolArguments }); } catch (transportError) { this.connected = false; this.client = null; this.transport = null; logger.warn("CHROMA_MCP", `Transport error during "${toolName}", reconnecting and retrying once`, { error: transportError instanceof Error ? transportError.message : String(transportError) }); try { await this.ensureConnected(); result = await this.client.callTool({ name: toolName, arguments: toolArguments }); } catch (retryError) { this.connected = false; throw new Error(`chroma-mcp transport error during "${toolName}" (retry failed): ${retryError instanceof Error ? retryError.message : String(retryError)}`); } } if (result.isError) { const errorText = result.content?.find((item) => item.type === "text")?.text || "Unknown chroma-mcp error"; throw new Error(`chroma-mcp tool "${toolName}" returned error: ${errorText}`); } const contentArray = result.content; if (!contentArray || contentArray.length === 0) { return null; } const firstTextContent = contentArray.find((item) => item.type === "text" && item.text); if (!firstTextContent || !firstTextContent.text) { return null; } try { return JSON.parse(firstTextContent.text); } catch { return null; } } async isHealthy() { try { await this.callTool("chroma_list_collections", { limit: 1 }); return true; } catch { return false; } } async stop() { if (!this.client) { logger.debug("CHROMA_MCP", "No active MCP connection to stop"); return; } logger.info("CHROMA_MCP", "Stopping chroma-mcp MCP connection"); try { await this.client.close(); } catch (error2) { logger.debug("CHROMA_MCP", "Error during client close (subprocess may already be dead)", {}, error2); } getSupervisor().unregisterProcess(CHROMA_SUPERVISOR_ID); this.client = null; this.transport = null; this.connected = false; this.connecting = null; logger.info("CHROMA_MCP", "chroma-mcp MCP connection stopped"); } static async reset() { if (ChromaMcpManager.instance) { await ChromaMcpManager.instance.stop(); } ChromaMcpManager.instance = null; } getCombinedCertPath() { const combinedCertPath = path5.join(os.homedir(), ".claude-mem", "combined_certs.pem"); if (fs.existsSync(combinedCertPath)) { const stats = fs.statSync(combinedCertPath); const ageMs = Date.now() - stats.mtimeMs; if (ageMs < 24 * 60 * 60 * 1000) { return combinedCertPath; } } if (process.platform !== "darwin") { return; } try { let certifiPath; try { certifiPath = execSync2('uvx --with certifi python -c "import certifi; print(certifi.where())"', { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"], timeout: 1e4 }).trim(); } catch { return; } if (!certifiPath || !fs.existsSync(certifiPath)) { return; } let zscalerCert = ""; try { zscalerCert = execSync2('security find-certificate -a -c "Zscaler" -p /Library/Keychains/System.keychain', { encoding: "utf8", stdio: ["pipe", "pipe", "pipe"], timeout: 5000 }); } catch { return; } if (!zscalerCert || !zscalerCert.includes("-----BEGIN CERTIFICATE-----") || !zscalerCert.includes("-----END CERTIFICATE-----")) { return; } const certifiContent = fs.readFileSync(certifiPath, "utf8"); const tempPath = combinedCertPath + ".tmp"; fs.writeFileSync(tempPath, certifiContent + ` ` + zscalerCert); fs.renameSync(tempPath, combinedCertPath); logger.info("CHROMA_MCP", "Created combined SSL certificate bundle for Zscaler", { path: combinedCertPath }); return combinedCertPath; } catch (error2) { logger.debug("CHROMA_MCP", "Could not create combined cert bundle", {}, error2); return; } } getSpawnEnv() { const baseEnv = {}; for (const [key, value] of Object.entries(sanitizeEnv(process.env))) { if (value !== undefined) { baseEnv[key] = value; } } const combinedCertPath = this.getCombinedCertPath(); if (!combinedCertPath) { return baseEnv; } logger.info("CHROMA_MCP", "Using combined SSL certificates for enterprise compatibility", { certPath: combinedCertPath }); return { ...baseEnv, SSL_CERT_FILE: combinedCertPath, REQUESTS_CA_BUNDLE: combinedCertPath, CURL_CA_BUNDLE: combinedCertPath, NODE_EXTRA_CA_CERTS: combinedCertPath }; } registerManagedProcess() { const chromaProcess = this.transport._process; if (!chromaProcess?.pid) { return; } getSupervisor().registerProcess(CHROMA_SUPERVISOR_ID, { pid: chromaProcess.pid, type: "chroma", startedAt: new Date().toISOString() }, chromaProcess); chromaProcess.once("exit", () => { getSupervisor().unregisterProcess(CHROMA_SUPERVISOR_ID); }); } } // src/services/sync/ChromaSync.ts init_SessionStore(); init_logger(); class ChromaSync { project; collectionName; collectionCreated = false; BATCH_SIZE = 100; constructor(project) { this.project = project; const sanitized = project.replace(/[^a-zA-Z0-9._-]/g, "_").replace(/[^a-zA-Z0-9]+$/, ""); this.collectionName = `cm__${sanitized || "unknown"}`; } async ensureCollectionExists() { if (this.collectionCreated) { return; } const chromaMcp = ChromaMcpManager.getInstance(); try { await chromaMcp.callTool("chroma_create_collection", { collection_name: this.collectionName }); } catch (error2) { const message = error2 instanceof Error ? error2.message : String(error2); if (!message.includes("already exists")) { throw error2; } } this.collectionCreated = true; logger.debug("CHROMA_SYNC", "Collection ready", { collection: this.collectionName }); } formatObservationDocs(obs) { const documents = []; const facts = obs.facts ? JSON.parse(obs.facts) : []; const concepts = obs.concepts ? JSON.parse(obs.concepts) : []; const files_read = obs.files_read ? JSON.parse(obs.files_read) : []; const files_modified = obs.files_modified ? JSON.parse(obs.files_modified) : []; const baseMetadata = { sqlite_id: obs.id, doc_type: "observation", memory_session_id: obs.memory_session_id, project: obs.project, created_at_epoch: obs.created_at_epoch, type: obs.type || "discovery", title: obs.title || "Untitled" }; if (obs.subtitle) { baseMetadata.subtitle = obs.subtitle; } if (concepts.length > 0) { baseMetadata.concepts = concepts.join(","); } if (files_read.length > 0) { baseMetadata.files_read = files_read.join(","); } if (files_modified.length > 0) { baseMetadata.files_modified = files_modified.join(","); } if (obs.narrative) { documents.push({ id: `obs_${obs.id}_narrative`, document: obs.narrative, metadata: { ...baseMetadata, field_type: "narrative" } }); } if (obs.text) { documents.push({ id: `obs_${obs.id}_text`, document: obs.text, metadata: { ...baseMetadata, field_type: "text" } }); } facts.forEach((fact, index) => { documents.push({ id: `obs_${obs.id}_fact_${index}`, document: fact, metadata: { ...baseMetadata, field_type: "fact", fact_index: index } }); }); return documents; } formatSummaryDocs(summary) { const documents = []; const baseMetadata = { sqlite_id: summary.id, doc_type: "session_summary", memory_session_id: summary.memory_session_id, project: summary.project, created_at_epoch: summary.created_at_epoch, prompt_number: summary.prompt_number || 0 }; if (summary.request) { documents.push({ id: `summary_${summary.id}_request`, document: summary.request, metadata: { ...baseMetadata, field_type: "request" } }); } if (summary.investigated) { documents.push({ id: `summary_${summary.id}_investigated`, document: summary.investigated, metadata: { ...baseMetadata, field_type: "investigated" } }); } if (summary.learned) { documents.push({ id: `summary_${summary.id}_learned`, document: summary.learned, metadata: { ...baseMetadata, field_type: "learned" } }); } if (summary.completed) { documents.push({ id: `summary_${summary.id}_completed`, document: summary.completed, metadata: { ...baseMetadata, field_type: "completed" } }); } if (summary.next_steps) { documents.push({ id: `summary_${summary.id}_next_steps`, document: summary.next_steps, metadata: { ...baseMetadata, field_type: "next_steps" } }); } if (summary.notes) { documents.push({ id: `summary_${summary.id}_notes`, document: summary.notes, metadata: { ...baseMetadata, field_type: "notes" } }); } return documents; } async addDocuments(documents) { if (documents.length === 0) { return; } await this.ensureCollectionExists(); const chromaMcp = ChromaMcpManager.getInstance(); for (let i = 0;i < documents.length; i += this.BATCH_SIZE) { const batch = documents.slice(i, i + this.BATCH_SIZE); const cleanMetadatas = batch.map((d) => Object.fromEntries(Object.entries(d.metadata).filter(([_, v]) => v !== null && v !== undefined && v !== ""))); try { await chromaMcp.callTool("chroma_add_documents", { collection_name: this.collectionName, ids: batch.map((d) => d.id), documents: batch.map((d) => d.document), metadatas: cleanMetadatas }); } catch (error2) { logger.error("CHROMA_SYNC", "Batch add failed, continuing with remaining batches", { collection: this.collectionName, batchStart: i, batchSize: batch.length }, error2); } } logger.debug("CHROMA_SYNC", "Documents added", { collection: this.collectionName, count: documents.length }); } async syncObservation(observationId, memorySessionId, project, obs, promptNumber, createdAtEpoch, discoveryTokens = 0) { const stored = { id: observationId, memory_session_id: memorySessionId, project, text: null, type: obs.type, title: obs.title, subtitle: obs.subtitle, facts: JSON.stringify(obs.facts), narrative: obs.narrative, concepts: JSON.stringify(obs.concepts), files_read: JSON.stringify(obs.files_read), files_modified: JSON.stringify(obs.files_modified), prompt_number: promptNumber, discovery_tokens: discoveryTokens, created_at: new Date(createdAtEpoch * 1000).toISOString(), created_at_epoch: createdAtEpoch }; const documents = this.formatObservationDocs(stored); logger.info("CHROMA_SYNC", "Syncing observation", { observationId, documentCount: documents.length, project }); await this.addDocuments(documents); } async syncSummary(summaryId, memorySessionId, project, summary, promptNumber, createdAtEpoch, discoveryTokens = 0) { const stored = { id: summaryId, memory_session_id: memorySessionId, project, request: summary.request, investigated: summary.investigated, learned: summary.learned, completed: summary.completed, next_steps: summary.next_steps, notes: summary.notes, prompt_number: promptNumber, discovery_tokens: discoveryTokens, created_at: new Date(createdAtEpoch * 1000).toISOString(), created_at_epoch: createdAtEpoch }; const documents = this.formatSummaryDocs(stored); logger.info("CHROMA_SYNC", "Syncing summary", { summaryId, documentCount: documents.length, project }); await this.addDocuments(documents); } formatUserPromptDoc(prompt) { return { id: `prompt_${prompt.id}`, document: prompt.prompt_text, metadata: { sqlite_id: prompt.id, doc_type: "user_prompt", memory_session_id: prompt.memory_session_id, project: prompt.project, created_at_epoch: prompt.created_at_epoch, prompt_number: prompt.prompt_number } }; } async syncUserPrompt(promptId, memorySessionId, project, promptText, promptNumber, createdAtEpoch) { const stored = { id: promptId, content_session_id: "", prompt_number: promptNumber, prompt_text: promptText, created_at: new Date(createdAtEpoch * 1000).toISOString(), created_at_epoch: createdAtEpoch, memory_session_id: memorySessionId, project }; const document2 = this.formatUserPromptDoc(stored); logger.info("CHROMA_SYNC", "Syncing user prompt", { promptId, project }); await this.addDocuments([document2]); } async getExistingChromaIds(projectOverride) { const targetProject = projectOverride ?? this.project; await this.ensureCollectionExists(); const chromaMcp = ChromaMcpManager.getInstance(); const observationIds = new Set; const summaryIds = new Set; const promptIds = new Set; let offset = 0; const limit = 1000; logger.info("CHROMA_SYNC", "Fetching existing Chroma document IDs...", { project: targetProject }); while (true) { const result = await chromaMcp.callTool("chroma_get_documents", { collection_name: this.collectionName, limit, offset, where: { project: targetProject }, include: ["metadatas"] }); const metadatas = result?.metadatas || []; if (metadatas.length === 0) { break; } for (const meta2 of metadatas) { if (meta2 && meta2.sqlite_id) { const sqliteId = meta2.sqlite_id; if (meta2.doc_type === "observation") { observationIds.add(sqliteId); } else if (meta2.doc_type === "session_summary") { summaryIds.add(sqliteId); } else if (meta2.doc_type === "user_prompt") { promptIds.add(sqliteId); } } } offset += limit; logger.debug("CHROMA_SYNC", "Fetched batch of existing IDs", { project: targetProject, offset, batchSize: metadatas.length }); } logger.info("CHROMA_SYNC", "Existing IDs fetched", { project: targetProject, observations: observationIds.size, summaries: summaryIds.size, prompts: promptIds.size }); return { observations: observationIds, summaries: summaryIds, prompts: promptIds }; } async ensureBackfilled(projectOverride) { const backfillProject = projectOverride ?? this.project; logger.info("CHROMA_SYNC", "Starting smart backfill", { project: backfillProject }); await this.ensureCollectionExists(); const existing = await this.getExistingChromaIds(backfillProject); const db = new SessionStore; try { const existingObsIds = Array.from(existing.observations).filter((id) => Number.isInteger(id) && id > 0); const obsExclusionClause = existingObsIds.length > 0 ? `AND id NOT IN (${existingObsIds.join(",")})` : ""; const observations = db.db.prepare(` SELECT * FROM observations WHERE project = ? ${obsExclusionClause} ORDER BY id ASC `).all(backfillProject); const totalObsCount = db.db.prepare(` SELECT COUNT(*) as count FROM observations WHERE project = ? `).get(backfillProject); logger.info("CHROMA_SYNC", "Backfilling observations", { project: backfillProject, missing: observations.length, existing: existing.observations.size, total: totalObsCount.count }); const allDocs = []; for (const obs of observations) { allDocs.push(...this.formatObservationDocs(obs)); } for (let i = 0;i < allDocs.length; i += this.BATCH_SIZE) { const batch = allDocs.slice(i, i + this.BATCH_SIZE); await this.addDocuments(batch); logger.debug("CHROMA_SYNC", "Backfill progress", { project: backfillProject, progress: `${Math.min(i + this.BATCH_SIZE, allDocs.length)}/${allDocs.length}` }); } const existingSummaryIds = Array.from(existing.summaries).filter((id) => Number.isInteger(id) && id > 0); const summaryExclusionClause = existingSummaryIds.length > 0 ? `AND id NOT IN (${existingSummaryIds.join(",")})` : ""; const summaries = db.db.prepare(` SELECT * FROM session_summaries WHERE project = ? ${summaryExclusionClause} ORDER BY id ASC `).all(backfillProject); const totalSummaryCount = db.db.prepare(` SELECT COUNT(*) as count FROM session_summaries WHERE project = ? `).get(backfillProject); logger.info("CHROMA_SYNC", "Backfilling summaries", { project: backfillProject, missing: summaries.length, existing: existing.summaries.size, total: totalSummaryCount.count }); const summaryDocs = []; for (const summary of summaries) { summaryDocs.push(...this.formatSummaryDocs(summary)); } for (let i = 0;i < summaryDocs.length; i += this.BATCH_SIZE) { const batch = summaryDocs.slice(i, i + this.BATCH_SIZE); await this.addDocuments(batch); logger.debug("CHROMA_SYNC", "Backfill progress", { project: backfillProject, progress: `${Math.min(i + this.BATCH_SIZE, summaryDocs.length)}/${summaryDocs.length}` }); } const existingPromptIds = Array.from(existing.prompts).filter((id) => Number.isInteger(id) && id > 0); const promptExclusionClause = existingPromptIds.length > 0 ? `AND up.id NOT IN (${existingPromptIds.join(",")})` : ""; const prompts = db.db.prepare(` SELECT up.*, s.project, s.memory_session_id FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE s.project = ? ${promptExclusionClause} ORDER BY up.id ASC `).all(backfillProject); const totalPromptCount = db.db.prepare(` SELECT COUNT(*) as count FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE s.project = ? `).get(backfillProject); logger.info("CHROMA_SYNC", "Backfilling user prompts", { project: backfillProject, missing: prompts.length, existing: existing.prompts.size, total: totalPromptCount.count }); const promptDocs = []; for (const prompt of prompts) { promptDocs.push(this.formatUserPromptDoc(prompt)); } for (let i = 0;i < promptDocs.length; i += this.BATCH_SIZE) { const batch = promptDocs.slice(i, i + this.BATCH_SIZE); await this.addDocuments(batch); logger.debug("CHROMA_SYNC", "Backfill progress", { project: backfillProject, progress: `${Math.min(i + this.BATCH_SIZE, promptDocs.length)}/${promptDocs.length}` }); } logger.info("CHROMA_SYNC", "Smart backfill complete", { project: backfillProject, synced: { observationDocs: allDocs.length, summaryDocs: summaryDocs.length, promptDocs: promptDocs.length }, skipped: { observations: existing.observations.size, summaries: existing.summaries.size, prompts: existing.prompts.size } }); } catch (error2) { logger.error("CHROMA_SYNC", "Backfill failed", { project: backfillProject }, error2); throw new Error(`Backfill failed: ${error2 instanceof Error ? error2.message : String(error2)}`); } finally { db.close(); } } async queryChroma(query, limit, whereFilter) { await this.ensureCollectionExists(); try { const chromaMcp = ChromaMcpManager.getInstance(); const results = await chromaMcp.callTool("chroma_query_documents", { collection_name: this.collectionName, query_texts: [query], n_results: limit, ...whereFilter && { where: whereFilter }, include: ["documents", "metadatas", "distances"] }); const ids = []; const seen = new Set; const docIds = results?.ids?.[0] || []; const rawMetadatas = results?.metadatas?.[0] || []; const rawDistances = results?.distances?.[0] || []; const metadatas = []; const distances = []; for (let i = 0;i < docIds.length; i++) { const docId = docIds[i]; const obsMatch = docId.match(/obs_(\d+)_/); const summaryMatch = docId.match(/summary_(\d+)_/); const promptMatch = docId.match(/prompt_(\d+)/); let sqliteId = null; if (obsMatch) { sqliteId = parseInt(obsMatch[1], 10); } else if (summaryMatch) { sqliteId = parseInt(summaryMatch[1], 10); } else if (promptMatch) { sqliteId = parseInt(promptMatch[1], 10); } if (sqliteId !== null && !seen.has(sqliteId)) { seen.add(sqliteId); ids.push(sqliteId); metadatas.push(rawMetadatas[i] ?? null); distances.push(rawDistances[i] ?? 0); } } return { ids, distances, metadatas }; } catch (error2) { const errorMessage = error2 instanceof Error ? error2.message : String(error2); const isConnectionError = errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("fetch failed") || errorMessage.includes("subprocess closed") || errorMessage.includes("timed out"); if (isConnectionError) { this.collectionCreated = false; logger.error("CHROMA_SYNC", "Connection lost during query", { project: this.project, query }, error2); throw new Error(`Chroma query failed - connection lost: ${errorMessage}`); } logger.error("CHROMA_SYNC", "Query failed", { project: this.project, query }, error2); throw error2; } } static async backfillAllProjects() { const db = new SessionStore; const sync = new ChromaSync("claude-mem"); try { const projects = db.db.prepare("SELECT DISTINCT project FROM observations WHERE project IS NOT NULL AND project != ?").all(""); logger.info("CHROMA_SYNC", `Backfill check for ${projects.length} projects`); for (const { project } of projects) { try { await sync.ensureBackfilled(project); } catch (error2) { logger.error("CHROMA_SYNC", `Backfill failed for project: ${project}`, {}, error2); } } } finally { await sync.close(); db.close(); } } async close() { logger.info("CHROMA_SYNC", "ChromaSync closed", { project: this.project }); } } // src/shared/plugin-state.ts import { existsSync as existsSync7, readFileSync as readFileSync7 } from "fs"; import { join as join5 } from "path"; import { homedir as homedir8 } from "os"; var PLUGIN_SETTINGS_KEY = "claude-mem@thedotmack"; function isPluginDisabledInClaudeSettings() { try { const claudeConfigDir = process.env.CLAUDE_CONFIG_DIR || join5(homedir8(), ".claude"); const settingsPath = join5(claudeConfigDir, "settings.json"); if (!existsSync7(settingsPath)) return false; const raw = readFileSync7(settingsPath, "utf-8"); const settings = JSON.parse(raw); return settings?.enabledPlugins?.[PLUGIN_SETTINGS_KEY] === false; } catch { return false; } } // src/services/infrastructure/ProcessManager.ts init_logger(); init_hook_constants(); import path6 from "path"; import { homedir as homedir9 } from "os"; import { existsSync as existsSync8, writeFileSync as writeFileSync4, readFileSync as readFileSync8, unlinkSync, mkdirSync as mkdirSync6, rmSync as rmSync3, statSync, utimesSync } from "fs"; import { exec, execSync as execSync3, spawn as spawn2 } from "child_process"; import { promisify as promisify2 } from "util"; var execAsync = promisify2(exec); var DATA_DIR6 = path6.join(homedir9(), ".claude-mem"); var PID_FILE3 = path6.join(DATA_DIR6, "worker.pid"); var ORPHAN_MAX_AGE_MINUTES = 30; function isBunExecutablePath(executablePath) { if (!executablePath) return false; return /(^|[\\/])bun(\.exe)?$/i.test(executablePath.trim()); } function lookupBinaryInPath(binaryName, platform) { const command = platform === "win32" ? `where ${binaryName}` : `which ${binaryName}`; try { const output = execSync3(command, { stdio: ["ignore", "pipe", "ignore"], encoding: "utf-8", windowsHide: true }); const firstMatch = output.split(/\r?\n/).map((line) => line.trim()).find((line) => line.length > 0); return firstMatch || null; } catch { return null; } } function resolveWorkerRuntimePath(options = {}) { const platform = options.platform ?? process.platform; const execPath = options.execPath ?? process.execPath; if (platform !== "win32") { return execPath; } if (isBunExecutablePath(execPath)) { return execPath; } const env = options.env ?? process.env; const homeDirectory = options.homeDirectory ?? homedir9(); const pathExists = options.pathExists ?? existsSync8; const lookupInPath = options.lookupInPath ?? lookupBinaryInPath; const candidatePaths = [ env.BUN, env.BUN_PATH, path6.join(homeDirectory, ".bun", "bin", "bun.exe"), path6.join(homeDirectory, ".bun", "bin", "bun"), env.USERPROFILE ? path6.join(env.USERPROFILE, ".bun", "bin", "bun.exe") : undefined, env.LOCALAPPDATA ? path6.join(env.LOCALAPPDATA, "bun", "bun.exe") : undefined, env.LOCALAPPDATA ? path6.join(env.LOCALAPPDATA, "bun", "bin", "bun.exe") : undefined ]; for (const candidate of candidatePaths) { const normalized = candidate?.trim(); if (!normalized) continue; if (isBunExecutablePath(normalized) && pathExists(normalized)) { return normalized; } if (normalized.toLowerCase() === "bun") { return normalized; } } return lookupInPath("bun", platform); } function writePidFile(info) { mkdirSync6(DATA_DIR6, { recursive: true }); writeFileSync4(PID_FILE3, JSON.stringify(info, null, 2)); } function readPidFile() { if (!existsSync8(PID_FILE3)) return null; try { return JSON.parse(readFileSync8(PID_FILE3, "utf-8")); } catch (error2) { logger.warn("SYSTEM", "Failed to parse PID file", { path: PID_FILE3 }, error2); return null; } } function removePidFile() { if (!existsSync8(PID_FILE3)) return; try { unlinkSync(PID_FILE3); } catch (error2) { logger.warn("SYSTEM", "Failed to remove PID file", { path: PID_FILE3 }, error2); } } function getPlatformTimeout(baseMs) { const WINDOWS_MULTIPLIER = 2; return process.platform === "win32" ? Math.round(baseMs * WINDOWS_MULTIPLIER) : baseMs; } function parseElapsedTime(etime) { if (!etime || etime.trim() === "") return -1; const cleaned = etime.trim(); let totalMinutes = 0; const dayMatch = cleaned.match(/^(\d+)-(\d+):(\d+):(\d+)$/); if (dayMatch) { totalMinutes = parseInt(dayMatch[1], 10) * 24 * 60 + parseInt(dayMatch[2], 10) * 60 + parseInt(dayMatch[3], 10); return totalMinutes; } const hourMatch = cleaned.match(/^(\d+):(\d+):(\d+)$/); if (hourMatch) { totalMinutes = parseInt(hourMatch[1], 10) * 60 + parseInt(hourMatch[2], 10); return totalMinutes; } const minMatch = cleaned.match(/^(\d+):(\d+)$/); if (minMatch) { return parseInt(minMatch[1], 10); } return -1; } var AGGRESSIVE_CLEANUP_PATTERNS = ["worker-service.cjs", "chroma-mcp"]; var AGE_GATED_CLEANUP_PATTERNS = ["mcp-server.cjs"]; async function aggressiveStartupCleanup() { const isWindows = process.platform === "win32"; const currentPid = process.pid; const pidsToKill = []; const allPatterns = [...AGGRESSIVE_CLEANUP_PATTERNS, ...AGE_GATED_CLEANUP_PATTERNS]; try { if (isWindows) { const wqlPatternConditions = allPatterns.map((p) => `CommandLine LIKE '%${p}%'`).join(" OR "); const cmd = `powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process -Filter '(${wqlPatternConditions}) AND ProcessId != ${currentPid}' | Select-Object ProcessId, CommandLine, CreationDate | ConvertTo-Json"`; const { stdout } = await execAsync(cmd, { timeout: HOOK_TIMEOUTS.POWERSHELL_COMMAND, windowsHide: true }); if (!stdout.trim() || stdout.trim() === "null") { logger.debug("SYSTEM", "No orphaned claude-mem processes found (Windows)"); return; } const processes = JSON.parse(stdout); const processList = Array.isArray(processes) ? processes : [processes]; const now = Date.now(); for (const proc of processList) { const pid = proc.ProcessId; if (!Number.isInteger(pid) || pid <= 0 || pid === currentPid) continue; const commandLine = proc.CommandLine || ""; const isAggressive = AGGRESSIVE_CLEANUP_PATTERNS.some((p) => commandLine.includes(p)); if (isAggressive) { pidsToKill.push(pid); logger.debug("SYSTEM", "Found orphaned process (aggressive)", { pid, commandLine: commandLine.substring(0, 80) }); } else { const creationMatch = proc.CreationDate?.match(/\/Date\((\d+)\)\//); if (creationMatch) { const creationTime = parseInt(creationMatch[1], 10); const ageMinutes = (now - creationTime) / (1000 * 60); if (ageMinutes >= ORPHAN_MAX_AGE_MINUTES) { pidsToKill.push(pid); logger.debug("SYSTEM", "Found orphaned process (age-gated)", { pid, ageMinutes: Math.round(ageMinutes) }); } } } } } else { const patternRegex = allPatterns.join("|"); const { stdout } = await execAsync(`ps -eo pid,etime,command | grep -E "${patternRegex}" | grep -v grep || true`); if (!stdout.trim()) { logger.debug("SYSTEM", "No orphaned claude-mem processes found (Unix)"); return; } const lines = stdout.trim().split(` `); for (const line of lines) { const match = line.trim().match(/^(\d+)\s+(\S+)\s+(.*)$/); if (!match) continue; const pid = parseInt(match[1], 10); const etime = match[2]; const command = match[3]; if (!Number.isInteger(pid) || pid <= 0 || pid === currentPid) continue; const isAggressive = AGGRESSIVE_CLEANUP_PATTERNS.some((p) => command.includes(p)); if (isAggressive) { pidsToKill.push(pid); logger.debug("SYSTEM", "Found orphaned process (aggressive)", { pid, command: command.substring(0, 80) }); } else { const ageMinutes = parseElapsedTime(etime); if (ageMinutes >= ORPHAN_MAX_AGE_MINUTES) { pidsToKill.push(pid); logger.debug("SYSTEM", "Found orphaned process (age-gated)", { pid, ageMinutes, command: command.substring(0, 80) }); } } } } } catch (error2) { logger.error("SYSTEM", "Failed to enumerate orphaned processes during aggressive cleanup", {}, error2); return; } if (pidsToKill.length === 0) { return; } logger.info("SYSTEM", "Aggressive startup cleanup: killing orphaned processes", { platform: isWindows ? "Windows" : "Unix", count: pidsToKill.length, pids: pidsToKill }); if (isWindows) { for (const pid of pidsToKill) { if (!Number.isInteger(pid) || pid <= 0) continue; try { execSync3(`taskkill /PID ${pid} /T /F`, { timeout: HOOK_TIMEOUTS.POWERSHELL_COMMAND, stdio: "ignore", windowsHide: true }); } catch (error2) { logger.debug("SYSTEM", "Failed to kill process, may have already exited", { pid }, error2); } } } else { for (const pid of pidsToKill) { try { process.kill(pid, "SIGKILL"); } catch (error2) { logger.debug("SYSTEM", "Process already exited", { pid }, error2); } } } logger.info("SYSTEM", "Aggressive startup cleanup complete", { count: pidsToKill.length }); } var CHROMA_MIGRATION_MARKER_FILENAME = ".chroma-cleaned-v10.3"; function runOneTimeChromaMigration(dataDirectory) { const effectiveDataDir = dataDirectory ?? DATA_DIR6; const markerPath = path6.join(effectiveDataDir, CHROMA_MIGRATION_MARKER_FILENAME); const chromaDir = path6.join(effectiveDataDir, "chroma"); if (existsSync8(markerPath)) { logger.debug("SYSTEM", "Chroma migration marker exists, skipping wipe"); return; } logger.warn("SYSTEM", "Running one-time chroma data wipe (upgrade from pre-v10.3)", { chromaDir }); if (existsSync8(chromaDir)) { rmSync3(chromaDir, { recursive: true, force: true }); logger.info("SYSTEM", "Chroma data directory removed", { chromaDir }); } mkdirSync6(effectiveDataDir, { recursive: true }); writeFileSync4(markerPath, new Date().toISOString()); logger.info("SYSTEM", "Chroma migration marker written", { markerPath }); } function spawnDaemon(scriptPath, port, extraEnv = {}) { const isWindows = process.platform === "win32"; getSupervisor().assertCanSpawn("worker daemon"); const env = sanitizeEnv({ ...process.env, CLAUDE_MEM_WORKER_PORT: String(port), ...extraEnv }); if (isWindows) { const runtimePath = resolveWorkerRuntimePath(); if (!runtimePath) { logger.error("SYSTEM", "Failed to locate Bun runtime for Windows worker spawn"); return; } const escapedRuntimePath = runtimePath.replace(/'/g, "''"); const escapedScriptPath = scriptPath.replace(/'/g, "''"); const psCommand = `Start-Process -FilePath '${escapedRuntimePath}' -ArgumentList '${escapedScriptPath}','--daemon' -WindowStyle Hidden`; try { execSync3(`powershell -NoProfile -Command "${psCommand}"`, { stdio: "ignore", windowsHide: true, env }); return 0; } catch (error2) { logger.error("SYSTEM", "Failed to spawn worker daemon on Windows", { runtimePath }, error2); return; } } const setsidPath = "/usr/bin/setsid"; if (existsSync8(setsidPath)) { const child2 = spawn2(setsidPath, [process.execPath, scriptPath, "--daemon"], { detached: true, stdio: "ignore", env }); if (child2.pid === undefined) { return; } child2.unref(); return child2.pid; } const child = spawn2(process.execPath, [scriptPath, "--daemon"], { detached: true, stdio: "ignore", env }); if (child.pid === undefined) { return; } child.unref(); return child.pid; } function isProcessAlive(pid) { if (pid === 0) return true; if (!Number.isInteger(pid) || pid < 0) return false; try { process.kill(pid, 0); return true; } catch (error2) { const code = error2.code; if (code === "EPERM") return true; return false; } } function isPidFileRecent(thresholdMs = 15000) { try { const stats = statSync(PID_FILE3); return Date.now() - stats.mtimeMs < thresholdMs; } catch { return false; } } function touchPidFile() { try { if (!existsSync8(PID_FILE3)) return; const now = new Date; utimesSync(PID_FILE3, now, now); } catch {} } function cleanStalePidFile() { return validateWorkerPidFile({ logAlive: false }); } // src/services/infrastructure/HealthMonitor.ts init_logger(); init_paths(); import path7 from "path"; import { readFileSync as readFileSync9 } from "fs"; async function httpRequestToWorker(port, endpointPath, method = "GET") { const response = await fetch(`http://127.0.0.1:${port}${endpointPath}`, { method }); let body = ""; try { body = await response.text(); } catch {} return { ok: response.ok, statusCode: response.status, body }; } async function isPortInUse(port) { try { const response = await fetch(`http://127.0.0.1:${port}/api/health`); return response.ok; } catch (error2) { return false; } } async function pollEndpointUntilOk(port, endpointPath, timeoutMs, retryLogMessage) { const start = Date.now(); while (Date.now() - start < timeoutMs) { try { const result = await httpRequestToWorker(port, endpointPath); if (result.ok) return true; } catch (error2) { logger.debug("SYSTEM", retryLogMessage, {}, error2); } await new Promise((r) => setTimeout(r, 500)); } return false; } function waitForHealth(port, timeoutMs = 30000) { return pollEndpointUntilOk(port, "/api/health", timeoutMs, "Service not ready yet, will retry"); } function waitForReadiness(port, timeoutMs = 30000) { return pollEndpointUntilOk(port, "/api/readiness", timeoutMs, "Worker not ready yet, will retry"); } async function waitForPortFree(port, timeoutMs = 1e4) { const start = Date.now(); while (Date.now() - start < timeoutMs) { if (!await isPortInUse(port)) return true; await new Promise((r) => setTimeout(r, 500)); } return false; } async function httpShutdown(port) { try { const result = await httpRequestToWorker(port, "/api/admin/shutdown", "POST"); if (!result.ok) { logger.warn("SYSTEM", "Shutdown request returned error", { status: result.statusCode }); return false; } return true; } catch (error2) { if (error2 instanceof Error && error2.message?.includes("ECONNREFUSED")) { logger.debug("SYSTEM", "Worker already stopped", {}, error2); return false; } logger.error("SYSTEM", "Shutdown request failed unexpectedly", {}, error2); return false; } } function getInstalledPluginVersion() { try { const packageJsonPath = path7.join(MARKETPLACE_ROOT, "package.json"); const packageJson = JSON.parse(readFileSync9(packageJsonPath, "utf-8")); return packageJson.version; } catch (error2) { const code = error2.code; if (code === "ENOENT" || code === "EBUSY") { logger.debug("SYSTEM", "Could not read plugin version (shutdown race)", { code }); return "unknown"; } throw error2; } } async function getRunningWorkerVersion(port) { try { const result = await httpRequestToWorker(port, "/api/version"); if (!result.ok) return null; const data = JSON.parse(result.body); return data.version; } catch { logger.debug("SYSTEM", "Could not fetch worker version", {}); return null; } } async function checkVersionMatch(port) { const pluginVersion = getInstalledPluginVersion(); const workerVersion = await getRunningWorkerVersion(port); if (!workerVersion || pluginVersion === "unknown") { return { matches: true, pluginVersion, workerVersion }; } return { matches: pluginVersion === workerVersion, pluginVersion, workerVersion }; } // src/services/infrastructure/GracefulShutdown.ts init_logger(); async function performGracefulShutdown(config2) { logger.info("SYSTEM", "Shutdown initiated"); if (config2.server) { await closeHttpServer(config2.server); logger.info("SYSTEM", "HTTP server closed"); } await config2.sessionManager.shutdownAll(); if (config2.mcpClient) { await config2.mcpClient.close(); logger.info("SYSTEM", "MCP client closed"); } if (config2.chromaMcpManager) { logger.info("SHUTDOWN", "Stopping Chroma MCP connection..."); await config2.chromaMcpManager.stop(); logger.info("SHUTDOWN", "Chroma MCP connection stopped"); } if (config2.dbManager) { await config2.dbManager.close(); } await stopSupervisor(); logger.info("SYSTEM", "Worker shutdown complete"); } async function closeHttpServer(server) { server.closeAllConnections(); if (process.platform === "win32") { await new Promise((r) => setTimeout(r, 500)); } await new Promise((resolve, reject) => { server.close((err) => err ? reject(err) : resolve()); }); if (process.platform === "win32") { await new Promise((r) => setTimeout(r, 500)); logger.info("SYSTEM", "Waited for Windows port cleanup"); } } // src/services/server/Server.ts var import_express2 = __toESM(require_express(), 1); import * as fs2 from "fs"; import path9 from "path"; // src/services/server/allowed-constants.ts var ALLOWED_OPERATIONS = [ "search", "context", "summarize", "import", "export" ]; var ALLOWED_TOPICS = [ "workflow", "search_params", "examples", "all" ]; // src/services/server/Server.ts init_logger(); // src/services/worker/http/middleware.ts init_paths(); init_logger(); var import_express = __toESM(require_express(), 1); var import_cors = __toESM(require_lib3(), 1); import path8 from "path"; function createMiddleware(summarizeRequestBody) { const middlewares = []; middlewares.push(import_express.default.json({ limit: "50mb" })); middlewares.push(import_cors.default({ origin: (origin, callback) => { if (!origin || origin.startsWith("http://localhost:") || origin.startsWith("http://127.0.0.1:")) { callback(null, true); } else { callback(new Error("CORS not allowed")); } }, methods: ["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE"], allowedHeaders: ["Content-Type", "Authorization", "X-Requested-With"], credentials: false })); middlewares.push((req, res, next) => { const staticExtensions = [".html", ".js", ".css", ".svg", ".png", ".jpg", ".jpeg", ".webp", ".woff", ".woff2", ".ttf", ".eot"]; const isStaticAsset = staticExtensions.some((ext) => req.path.endsWith(ext)); const isPollingEndpoint = req.path === "/api/logs"; if (req.path.startsWith("/health") || req.path === "/" || isStaticAsset || isPollingEndpoint) { return next(); } const start = Date.now(); const requestId = `${req.method}-${Date.now()}`; const bodySummary = summarizeRequestBody(req.method, req.path, req.body); logger.debug("HTTP", `→ ${req.method} ${req.path}`, { requestId }, bodySummary); const originalSend = res.send.bind(res); res.send = function(body) { const duration3 = Date.now() - start; logger.debug("HTTP", `← ${res.statusCode} ${req.path}`, { requestId, duration: `${duration3}ms` }); return originalSend(body); }; next(); }); const packageRoot = getPackageRoot(); const uiDir = path8.join(packageRoot, "plugin", "ui"); middlewares.push(import_express.default.static(uiDir)); return middlewares; } function requireLocalhost(req, res, next) { const clientIp = req.ip || req.connection.remoteAddress || ""; const isLocalhost = clientIp === "127.0.0.1" || clientIp === "::1" || clientIp === "::ffff:127.0.0.1" || clientIp === "localhost"; if (!isLocalhost) { logger.warn("SECURITY", "Admin endpoint access denied - not localhost", { endpoint: req.path, clientIp, method: req.method }); res.status(403).json({ error: "Forbidden", message: "Admin endpoints are only accessible from localhost" }); return; } next(); } function summarizeRequestBody(method, path9, body) { if (!body || Object.keys(body).length === 0) return ""; if (path9.includes("/init")) { return ""; } if (path9.includes("/observations")) { const toolName = body.tool_name || "?"; const toolInput = body.tool_input; const toolSummary = logger.formatTool(toolName, toolInput); return `tool=${toolSummary}`; } if (path9.includes("/summarize")) { return "requesting summary"; } return ""; } // src/services/server/ErrorHandler.ts init_logger(); class AppError extends Error { statusCode; code; details; constructor(message, statusCode = 500, code, details) { super(message); this.statusCode = statusCode; this.code = code; this.details = details; this.name = "AppError"; } } function createErrorResponse(error2, message, code, details) { const response = { error: error2, message }; if (code) response.code = code; if (details) response.details = details; return response; } var errorHandler = (err, req, res, _next) => { const statusCode = err instanceof AppError ? err.statusCode : 500; logger.error("HTTP", `Error handling ${req.method} ${req.path}`, { statusCode, error: err.message, code: err instanceof AppError ? err.code : undefined }, err); const response = createErrorResponse(err.name || "Error", err.message, err instanceof AppError ? err.code : undefined, err instanceof AppError ? err.details : undefined); res.status(statusCode).json(response); }; function notFoundHandler(req, res) { res.status(404).json(createErrorResponse("NotFound", `Cannot ${req.method} ${req.path}`)); } // src/services/server/Server.ts var __dirname = "/Users/alexnewman/conductor/workspaces/claude-mem/banjul/src/services/server"; var BUILT_IN_VERSION = typeof __DEFAULT_PACKAGE_VERSION__ !== "undefined" ? __DEFAULT_PACKAGE_VERSION__ : "development"; class Server { app; server = null; options; startTime = Date.now(); constructor(options) { this.options = options; this.app = import_express2.default(); this.setupMiddleware(); this.setupCoreRoutes(); } getHttpServer() { return this.server; } async listen(port, host) { return new Promise((resolve, reject) => { this.server = this.app.listen(port, host, () => { logger.info("SYSTEM", "HTTP server started", { host, port, pid: process.pid }); resolve(); }); this.server.on("error", reject); }); } async close() { if (!this.server) return; this.server.closeAllConnections(); if (process.platform === "win32") { await new Promise((r) => setTimeout(r, 500)); } await new Promise((resolve, reject) => { this.server.close((err) => err ? reject(err) : resolve()); }); if (process.platform === "win32") { await new Promise((r) => setTimeout(r, 500)); } this.server = null; logger.info("SYSTEM", "HTTP server closed"); } registerRoutes(handler) { handler.setupRoutes(this.app); } finalizeRoutes() { this.app.use(notFoundHandler); this.app.use(errorHandler); } setupMiddleware() { const middlewares = createMiddleware(summarizeRequestBody); middlewares.forEach((mw) => this.app.use(mw)); } setupCoreRoutes() { this.app.get("/api/health", (_req, res) => { res.status(200).json({ status: "ok", version: BUILT_IN_VERSION, workerPath: this.options.workerPath, uptime: Date.now() - this.startTime, managed: process.env.CLAUDE_MEM_MANAGED === "true", hasIpc: typeof process.send === "function", platform: process.platform, pid: process.pid, initialized: this.options.getInitializationComplete(), mcpReady: this.options.getMcpReady(), ai: this.options.getAiStatus() }); }); this.app.get("/api/readiness", (_req, res) => { if (this.options.getInitializationComplete()) { res.status(200).json({ status: "ready", mcpReady: this.options.getMcpReady() }); } else { res.status(503).json({ status: "initializing", message: "Worker is still initializing, please retry" }); } }); this.app.get("/api/version", (_req, res) => { res.status(200).json({ version: BUILT_IN_VERSION }); }); this.app.get("/api/instructions", async (req, res) => { const topic = req.query.topic || "all"; const operation = req.query.operation; if (topic && !ALLOWED_TOPICS.includes(topic)) { return res.status(400).json({ error: "Invalid topic" }); } try { let content; if (operation) { if (!ALLOWED_OPERATIONS.includes(operation)) { return res.status(400).json({ error: "Invalid operation" }); } const OPERATIONS_BASE_DIR = path9.resolve(__dirname, "../skills/mem-search/operations"); const operationPath = path9.resolve(OPERATIONS_BASE_DIR, `${operation}.md`); if (!operationPath.startsWith(OPERATIONS_BASE_DIR + path9.sep)) { return res.status(400).json({ error: "Invalid request" }); } content = await fs2.promises.readFile(operationPath, "utf-8"); } else { const skillPath = path9.join(__dirname, "../skills/mem-search/SKILL.md"); const fullContent = await fs2.promises.readFile(skillPath, "utf-8"); content = this.extractInstructionSection(fullContent, topic); } res.json({ content: [{ type: "text", text: content }] }); } catch (error2) { res.status(404).json({ error: "Instruction not found" }); } }); this.app.post("/api/admin/restart", requireLocalhost, async (_req, res) => { res.json({ status: "restarting" }); const isWindowsManaged = process.platform === "win32" && process.env.CLAUDE_MEM_MANAGED === "true" && process.send; if (isWindowsManaged) { logger.info("SYSTEM", "Sending restart request to wrapper"); process.send({ type: "restart" }); } else { setTimeout(async () => { try { await this.options.onRestart(); } finally { process.exit(0); } }, 100); } }); this.app.post("/api/admin/shutdown", requireLocalhost, async (_req, res) => { res.json({ status: "shutting_down" }); const isWindowsManaged = process.platform === "win32" && process.env.CLAUDE_MEM_MANAGED === "true" && process.send; if (isWindowsManaged) { logger.info("SYSTEM", "Sending shutdown request to wrapper"); process.send({ type: "shutdown" }); } else { setTimeout(async () => { try { await this.options.onShutdown(); } finally { process.exit(0); } }, 100); } }); this.app.get("/api/admin/doctor", requireLocalhost, (_req, res) => { const supervisor = getSupervisor(); const registry2 = supervisor.getRegistry(); const allRecords = registry2.getAll(); const processes = allRecords.map((record3) => ({ id: record3.id, pid: record3.pid, type: record3.type, status: isPidAlive(record3.pid) ? "alive" : "dead", startedAt: record3.startedAt })); const deadProcessPids = processes.filter((p) => p.status === "dead").map((p) => p.pid); const envClean = !Object.keys(process.env).some((key) => ENV_EXACT_MATCHES.has(key) || ENV_PREFIXES.some((prefix) => key.startsWith(prefix))); const uptimeMs = Date.now() - this.startTime; const uptimeSeconds = Math.floor(uptimeMs / 1000); const hours = Math.floor(uptimeSeconds / 3600); const minutes = Math.floor(uptimeSeconds % 3600 / 60); const formattedUptime = hours > 0 ? `${hours}h ${minutes}m` : `${minutes}m`; res.json({ supervisor: { running: true, pid: process.pid, uptime: formattedUptime }, processes, health: { deadProcessPids, envClean } }); }); } extractInstructionSection(content, topic) { const sections = { workflow: this.extractBetween(content, "## The Workflow", "## Search Parameters"), search_params: this.extractBetween(content, "## Search Parameters", "## Examples"), examples: this.extractBetween(content, "## Examples", "## Why This Workflow"), all: content }; return sections[topic] || sections["all"]; } extractBetween(content, startMarker, endMarker) { const startIdx = content.indexOf(startMarker); const endIdx = content.indexOf(endMarker); if (startIdx === -1) return content; if (endIdx === -1) return content.substring(startIdx); return content.substring(startIdx, endIdx).trim(); } } // src/services/integrations/CursorHooksInstaller.ts init_logger(); init_worker_utils(); init_paths(); import path10 from "path"; import { homedir as homedir10 } from "os"; import { existsSync as existsSync10, readFileSync as readFileSync11, writeFileSync as writeFileSync6, unlinkSync as unlinkSync2, mkdirSync as mkdirSync8 } from "fs"; import { exec as exec2 } from "child_process"; import { promisify as promisify3 } from "util"; // src/utils/cursor-utils.ts init_logger(); import { existsSync as existsSync9, readFileSync as readFileSync10, writeFileSync as writeFileSync5, mkdirSync as mkdirSync7, renameSync } from "fs"; import { join as join6, basename as basename2 } from "path"; function readCursorRegistry(registryFile) { try { if (!existsSync9(registryFile)) return {}; return JSON.parse(readFileSync10(registryFile, "utf-8")); } catch (error2) { logger.error("CONFIG", "Failed to read Cursor registry, using empty registry", { file: registryFile, error: error2 instanceof Error ? error2.message : String(error2) }); return {}; } } function writeCursorRegistry(registryFile, registry2) { const dir = join6(registryFile, ".."); mkdirSync7(dir, { recursive: true }); writeFileSync5(registryFile, JSON.stringify(registry2, null, 2)); } function writeContextFile(workspacePath, context) { const rulesDir = join6(workspacePath, ".cursor", "rules"); const rulesFile = join6(rulesDir, "claude-mem-context.mdc"); const tempFile = `${rulesFile}.tmp`; mkdirSync7(rulesDir, { recursive: true }); const content = `--- alwaysApply: true description: "Claude-mem context from past sessions (auto-updated)" --- # Memory Context from Past Sessions The following context is from claude-mem, a persistent memory system that tracks your coding sessions. ${context} --- *Updated after last session. Use claude-mem's MCP search tools for more detailed queries.* `; writeFileSync5(tempFile, content); renameSync(tempFile, rulesFile); } // src/services/integrations/CursorHooksInstaller.ts var __filename = "/Users/alexnewman/conductor/workspaces/claude-mem/banjul/src/services/integrations/CursorHooksInstaller.ts"; var execAsync2 = promisify3(exec2); var CURSOR_REGISTRY_FILE = path10.join(DATA_DIR, "cursor-projects.json"); function readCursorRegistry2() { return readCursorRegistry(CURSOR_REGISTRY_FILE); } function writeCursorRegistry2(registry2) { writeCursorRegistry(CURSOR_REGISTRY_FILE, registry2); } function registerCursorProject(projectName, workspacePath) { const registry2 = readCursorRegistry2(); registry2[projectName] = { workspacePath, installedAt: new Date().toISOString() }; writeCursorRegistry2(registry2); logger.info("CURSOR", "Registered project for auto-context updates", { projectName, workspacePath }); } function unregisterCursorProject(projectName) { const registry2 = readCursorRegistry2(); if (registry2[projectName]) { delete registry2[projectName]; writeCursorRegistry2(registry2); logger.info("CURSOR", "Unregistered project", { projectName }); } } async function updateCursorContextForProject(projectName, _port) { const registry2 = readCursorRegistry2(); const entry = registry2[projectName]; if (!entry) return; try { const response = await workerHttpRequest(`/api/context/inject?project=${encodeURIComponent(projectName)}`); if (!response.ok) return; const context = await response.text(); if (!context || !context.trim()) return; writeContextFile(entry.workspacePath, context); logger.debug("CURSOR", "Updated context file", { projectName, workspacePath: entry.workspacePath }); } catch (error2) { logger.error("CURSOR", "Failed to update context file", { projectName }, error2); } } function findWorkerServicePath() { const possiblePaths = [ path10.join(MARKETPLACE_ROOT, "plugin", "scripts", "worker-service.cjs"), path10.join(path10.dirname(__filename), "worker-service.cjs"), path10.join(process.cwd(), "plugin", "scripts", "worker-service.cjs") ]; for (const p of possiblePaths) { if (existsSync10(p)) { return p; } } return null; } function findBunPath() { const possiblePaths = [ path10.join(homedir10(), ".bun", "bin", "bun"), "/usr/local/bin/bun", "/usr/bin/bun", ...process.platform === "win32" ? [ path10.join(homedir10(), ".bun", "bin", "bun.exe"), path10.join(process.env.LOCALAPPDATA || "", "bun", "bun.exe") ] : [] ]; for (const p of possiblePaths) { if (p && existsSync10(p)) { return p; } } return "bun"; } function getTargetDir(target) { switch (target) { case "project": return path10.join(process.cwd(), ".cursor"); case "user": return path10.join(homedir10(), ".cursor"); case "enterprise": if (process.platform === "darwin") { return "/Library/Application Support/Cursor"; } else if (process.platform === "linux") { return "/etc/cursor"; } else if (process.platform === "win32") { return path10.join(process.env.ProgramData || "C:\\ProgramData", "Cursor"); } return null; default: return null; } } async function installCursorHooks(target) { console.log(` Installing Claude-Mem Cursor hooks (${target} level)... `); const targetDir = getTargetDir(target); if (!targetDir) { console.error(`Invalid target: ${target}. Use: project, user, or enterprise`); return 1; } const workerServicePath = findWorkerServicePath(); if (!workerServicePath) { console.error("Could not find worker-service.cjs"); console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"); return 1; } const workspaceRoot = process.cwd(); try { mkdirSync8(targetDir, { recursive: true }); const hooksJsonPath = path10.join(targetDir, "hooks.json"); const bunPath = findBunPath(); const escapedBunPath = bunPath.replace(/\\/g, "\\\\"); const escapedWorkerPath = workerServicePath.replace(/\\/g, "\\\\"); const makeHookCommand = (command) => { return `"${escapedBunPath}" "${escapedWorkerPath}" hook cursor ${command}`; }; console.log(` Using Bun runtime: ${bunPath}`); const hooksJson = { version: 1, hooks: { beforeSubmitPrompt: [ { command: makeHookCommand("session-init") }, { command: makeHookCommand("context") } ], afterMCPExecution: [ { command: makeHookCommand("observation") } ], afterShellExecution: [ { command: makeHookCommand("observation") } ], afterFileEdit: [ { command: makeHookCommand("file-edit") } ], stop: [ { command: makeHookCommand("summarize") } ] } }; writeFileSync6(hooksJsonPath, JSON.stringify(hooksJson, null, 2)); console.log(` Created hooks.json (unified CLI mode)`); console.log(` Worker service: ${workerServicePath}`); if (target === "project") { await setupProjectContext(targetDir, workspaceRoot); } console.log(` Installation complete! Hooks installed to: ${targetDir}/hooks.json Using unified CLI: bun worker-service.cjs hook cursor Next steps: 1. Start claude-mem worker: claude-mem start 2. Restart Cursor to load the hooks 3. Check Cursor Settings → Hooks tab to verify Context Injection: Context from past sessions is stored in .cursor/rules/claude-mem-context.mdc and automatically included in every chat. It updates after each session ends. `); return 0; } catch (error2) { console.error(` Installation failed: ${error2.message}`); if (target === "enterprise") { console.error(" Tip: Enterprise installation may require sudo/admin privileges"); } return 1; } } async function setupProjectContext(targetDir, workspaceRoot) { const rulesDir = path10.join(targetDir, "rules"); mkdirSync8(rulesDir, { recursive: true }); const projectName = path10.basename(workspaceRoot); let contextGenerated = false; console.log(` Generating initial context...`); try { const healthResponse = await workerHttpRequest("/api/readiness"); if (healthResponse.ok) { const contextResponse = await workerHttpRequest(`/api/context/inject?project=${encodeURIComponent(projectName)}`); if (contextResponse.ok) { const context = await contextResponse.text(); if (context && context.trim()) { writeContextFile(workspaceRoot, context); contextGenerated = true; console.log(` Generated initial context from existing memory`); } } } } catch (error2) { logger.debug("CURSOR", "Worker not running during install", {}, error2); } if (!contextGenerated) { const rulesFile = path10.join(rulesDir, "claude-mem-context.mdc"); const placeholderContent = `--- alwaysApply: true description: "Claude-mem context from past sessions (auto-updated)" --- # Memory Context from Past Sessions *No context yet. Complete your first session and context will appear here.* Use claude-mem's MCP search tools for manual memory queries. `; writeFileSync6(rulesFile, placeholderContent); console.log(` Created placeholder context file (will populate after first session)`); } registerCursorProject(projectName, workspaceRoot); console.log(` Registered for auto-context updates`); } function uninstallCursorHooks(target) { console.log(` Uninstalling Claude-Mem Cursor hooks (${target} level)... `); const targetDir = getTargetDir(target); if (!targetDir) { console.error(`Invalid target: ${target}`); return 1; } try { const hooksDir = path10.join(targetDir, "hooks"); const hooksJsonPath = path10.join(targetDir, "hooks.json"); const bashScripts = [ "common.sh", "session-init.sh", "context-inject.sh", "save-observation.sh", "save-file-edit.sh", "session-summary.sh" ]; const psScripts = [ "common.ps1", "session-init.ps1", "context-inject.ps1", "save-observation.ps1", "save-file-edit.ps1", "session-summary.ps1" ]; const allScripts = [...bashScripts, ...psScripts]; for (const script of allScripts) { const scriptPath = path10.join(hooksDir, script); if (existsSync10(scriptPath)) { unlinkSync2(scriptPath); console.log(` Removed legacy script: ${script}`); } } if (existsSync10(hooksJsonPath)) { unlinkSync2(hooksJsonPath); console.log(` Removed hooks.json`); } if (target === "project") { const contextFile = path10.join(targetDir, "rules", "claude-mem-context.mdc"); if (existsSync10(contextFile)) { unlinkSync2(contextFile); console.log(` Removed context file`); } const projectName = path10.basename(process.cwd()); unregisterCursorProject(projectName); console.log(` Unregistered from auto-context updates`); } console.log(` Uninstallation complete! `); console.log("Restart Cursor to apply changes."); return 0; } catch (error2) { console.error(` Uninstallation failed: ${error2.message}`); return 1; } } function checkCursorHooksStatus() { console.log(` Claude-Mem Cursor Hooks Status `); const locations = [ { name: "Project", dir: path10.join(process.cwd(), ".cursor") }, { name: "User", dir: path10.join(homedir10(), ".cursor") } ]; if (process.platform === "darwin") { locations.push({ name: "Enterprise", dir: "/Library/Application Support/Cursor" }); } else if (process.platform === "linux") { locations.push({ name: "Enterprise", dir: "/etc/cursor" }); } let anyInstalled = false; for (const loc of locations) { const hooksJson = path10.join(loc.dir, "hooks.json"); const hooksDir = path10.join(loc.dir, "hooks"); if (existsSync10(hooksJson)) { anyInstalled = true; console.log(`${loc.name}: Installed`); console.log(` Config: ${hooksJson}`); try { const hooksContent = JSON.parse(readFileSync11(hooksJson, "utf-8")); const firstCommand = hooksContent?.hooks?.beforeSubmitPrompt?.[0]?.command || ""; if (firstCommand.includes("worker-service.cjs") && firstCommand.includes("hook cursor")) { console.log(` Mode: Unified CLI (bun worker-service.cjs)`); } else { const bashScripts = ["session-init.sh", "context-inject.sh", "save-observation.sh"]; const psScripts = ["session-init.ps1", "context-inject.ps1", "save-observation.ps1"]; const hasBash = bashScripts.some((s) => existsSync10(path10.join(hooksDir, s))); const hasPs = psScripts.some((s) => existsSync10(path10.join(hooksDir, s))); if (hasBash || hasPs) { console.log(` Mode: Legacy shell scripts (consider reinstalling for unified CLI)`); if (hasBash && hasPs) { console.log(` Platform: Both (bash + PowerShell)`); } else if (hasBash) { console.log(` Platform: Unix (bash)`); } else if (hasPs) { console.log(` Platform: Windows (PowerShell)`); } } else { console.log(` Mode: Unknown configuration`); } } } catch { console.log(` Mode: Unable to parse hooks.json`); } if (loc.name === "Project") { const contextFile = path10.join(loc.dir, "rules", "claude-mem-context.mdc"); if (existsSync10(contextFile)) { console.log(` Context: Active`); } else { console.log(` Context: Not yet generated (will be created on first prompt)`); } } } else { console.log(`${loc.name}: Not installed`); } console.log(""); } if (!anyInstalled) { console.log(`No hooks installed. Run: claude-mem cursor install `); } return 0; } async function handleCursorCommand(subcommand, args) { switch (subcommand) { case "install": { const target = args[0] || "project"; return installCursorHooks(target); } case "uninstall": { const target = args[0] || "project"; return uninstallCursorHooks(target); } case "status": { return checkCursorHooksStatus(); } case "setup": { console.log("Use the main entry point for setup"); return 0; } default: { console.log(` Claude-Mem Cursor Integration Usage: claude-mem cursor [options] Commands: setup Interactive guided setup (recommended for first-time users) install [target] Install Cursor hooks target: project (default), user, or enterprise uninstall [target] Remove Cursor hooks target: project (default), user, or enterprise status Check installation status Examples: npm run cursor:setup # Interactive wizard (recommended) npm run cursor:install # Install for current project claude-mem cursor install user # Install globally for user claude-mem cursor uninstall # Remove from current project claude-mem cursor status # Check if hooks are installed For more info: https://docs.claude-mem.ai/cursor `); return 0; } } } // src/services/worker/DatabaseManager.ts init_SessionStore(); // src/services/sqlite/SessionSearch.ts init_paths(); init_logger(); import { Database as Database2 } from "bun:sqlite"; class SessionSearch { db; constructor(dbPath) { if (!dbPath) { ensureDir(DATA_DIR); dbPath = DB_PATH; } this.db = new Database2(dbPath); this.db.run("PRAGMA journal_mode = WAL"); this.ensureFTSTables(); } ensureFTSTables() { const tables = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%_fts'").all(); const hasFTS = tables.some((t) => t.name === "observations_fts" || t.name === "session_summaries_fts"); if (hasFTS) { return; } if (!this.isFts5Available()) { logger.warn("DB", "FTS5 not available on this platform — skipping FTS table creation (search uses ChromaDB)"); return; } logger.info("DB", "Creating FTS5 tables"); try { this.db.run(` CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts USING fts5( title, subtitle, narrative, text, facts, concepts, content='observations', content_rowid='id' ); `); this.db.run(` INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts) SELECT id, title, subtitle, narrative, text, facts, concepts FROM observations; `); this.db.run(` CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts) VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts); END; CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, text, facts, concepts) VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts); END; CREATE TRIGGER IF NOT EXISTS observations_au AFTER UPDATE ON observations BEGIN INSERT INTO observations_fts(observations_fts, rowid, title, subtitle, narrative, text, facts, concepts) VALUES('delete', old.id, old.title, old.subtitle, old.narrative, old.text, old.facts, old.concepts); INSERT INTO observations_fts(rowid, title, subtitle, narrative, text, facts, concepts) VALUES (new.id, new.title, new.subtitle, new.narrative, new.text, new.facts, new.concepts); END; `); this.db.run(` CREATE VIRTUAL TABLE IF NOT EXISTS session_summaries_fts USING fts5( request, investigated, learned, completed, next_steps, notes, content='session_summaries', content_rowid='id' ); `); this.db.run(` INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes) SELECT id, request, investigated, learned, completed, next_steps, notes FROM session_summaries; `); this.db.run(` CREATE TRIGGER IF NOT EXISTS session_summaries_ai AFTER INSERT ON session_summaries BEGIN INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes) VALUES (new.id, new.request, new.investigated, new.learned, new.completed, new.next_steps, new.notes); END; CREATE TRIGGER IF NOT EXISTS session_summaries_ad AFTER DELETE ON session_summaries BEGIN INSERT INTO session_summaries_fts(session_summaries_fts, rowid, request, investigated, learned, completed, next_steps, notes) VALUES('delete', old.id, old.request, old.investigated, old.learned, old.completed, old.next_steps, old.notes); END; CREATE TRIGGER IF NOT EXISTS session_summaries_au AFTER UPDATE ON session_summaries BEGIN INSERT INTO session_summaries_fts(session_summaries_fts, rowid, request, investigated, learned, completed, next_steps, notes) VALUES('delete', old.id, old.request, old.investigated, old.learned, old.completed, old.next_steps, old.notes); INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes) VALUES (new.id, new.request, new.investigated, new.learned, new.completed, new.next_steps, new.notes); END; `); logger.info("DB", "FTS5 tables created successfully"); } catch (error2) { logger.warn("DB", "FTS5 table creation failed — search will use ChromaDB and LIKE queries", {}, error2); } } isFts5Available() { try { this.db.run("CREATE VIRTUAL TABLE _fts5_probe USING fts5(test_column)"); this.db.run("DROP TABLE _fts5_probe"); return true; } catch { return false; } } buildFilterClause(filters, params, tableAlias = "o") { const conditions = []; if (filters.project) { conditions.push(`${tableAlias}.project = ?`); params.push(filters.project); } if (filters.type) { if (Array.isArray(filters.type)) { const placeholders = filters.type.map(() => "?").join(","); conditions.push(`${tableAlias}.type IN (${placeholders})`); params.push(...filters.type); } else { conditions.push(`${tableAlias}.type = ?`); params.push(filters.type); } } if (filters.dateRange) { const { start, end } = filters.dateRange; if (start) { const startEpoch = typeof start === "number" ? start : new Date(start).getTime(); conditions.push(`${tableAlias}.created_at_epoch >= ?`); params.push(startEpoch); } if (end) { const endEpoch = typeof end === "number" ? end : new Date(end).getTime(); conditions.push(`${tableAlias}.created_at_epoch <= ?`); params.push(endEpoch); } } if (filters.concepts) { const concepts = Array.isArray(filters.concepts) ? filters.concepts : [filters.concepts]; const conceptConditions = concepts.map(() => { return `EXISTS (SELECT 1 FROM json_each(${tableAlias}.concepts) WHERE value = ?)`; }); if (conceptConditions.length > 0) { conditions.push(`(${conceptConditions.join(" OR ")})`); params.push(...concepts); } } if (filters.files) { const files = Array.isArray(filters.files) ? filters.files : [filters.files]; const fileConditions = files.map(() => { return `( EXISTS (SELECT 1 FROM json_each(${tableAlias}.files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(${tableAlias}.files_modified) WHERE value LIKE ?) )`; }); if (fileConditions.length > 0) { conditions.push(`(${fileConditions.join(" OR ")})`); files.forEach((file) => { params.push(`%${file}%`, `%${file}%`); }); } } return conditions.length > 0 ? conditions.join(" AND ") : ""; } buildOrderClause(orderBy = "relevance", hasFTS = true, ftsTable = "observations_fts") { switch (orderBy) { case "relevance": return hasFTS ? `ORDER BY ${ftsTable}.rank ASC` : "ORDER BY o.created_at_epoch DESC"; case "date_desc": return "ORDER BY o.created_at_epoch DESC"; case "date_asc": return "ORDER BY o.created_at_epoch ASC"; default: return "ORDER BY o.created_at_epoch DESC"; } } searchObservations(query, options = {}) { const params = []; const { limit = 50, offset = 0, orderBy = "relevance", ...filters } = options; if (!query) { const filterClause = this.buildFilterClause(filters, params, "o"); if (!filterClause) { throw new Error("Either query or filters required for search"); } const orderClause = this.buildOrderClause(orderBy, false); const sql = ` SELECT o.*, o.discovery_tokens FROM observations o WHERE ${filterClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(limit, offset); return this.db.prepare(sql).all(...params); } logger.warn("DB", "Text search not supported - use ChromaDB for vector search"); return []; } searchSessions(query, options = {}) { const params = []; const { limit = 50, offset = 0, orderBy = "relevance", ...filters } = options; if (!query) { const filterOptions = { ...filters }; delete filterOptions.type; const filterClause = this.buildFilterClause(filterOptions, params, "s"); if (!filterClause) { throw new Error("Either query or filters required for search"); } const orderClause = orderBy === "date_asc" ? "ORDER BY s.created_at_epoch ASC" : "ORDER BY s.created_at_epoch DESC"; const sql = ` SELECT s.*, s.discovery_tokens FROM session_summaries s WHERE ${filterClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(limit, offset); return this.db.prepare(sql).all(...params); } logger.warn("DB", "Text search not supported - use ChromaDB for vector search"); return []; } findByConcept(concept, options = {}) { const params = []; const { limit = 50, offset = 0, orderBy = "date_desc", ...filters } = options; const conceptFilters = { ...filters, concepts: concept }; const filterClause = this.buildFilterClause(conceptFilters, params, "o"); const orderClause = this.buildOrderClause(orderBy, false); const sql = ` SELECT o.*, o.discovery_tokens FROM observations o WHERE ${filterClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(limit, offset); return this.db.prepare(sql).all(...params); } hasDirectChildFile(obs, folderPath) { const checkFiles = (filesJson) => { if (!filesJson) return false; try { const files = JSON.parse(filesJson); if (Array.isArray(files)) { return files.some((f) => isDirectChild(f, folderPath)); } } catch {} return false; }; return checkFiles(obs.files_modified) || checkFiles(obs.files_read); } hasDirectChildFileSession(session, folderPath) { const checkFiles = (filesJson) => { if (!filesJson) return false; try { const files = JSON.parse(filesJson); if (Array.isArray(files)) { return files.some((f) => isDirectChild(f, folderPath)); } } catch {} return false; }; return checkFiles(session.files_read) || checkFiles(session.files_edited); } findByFile(filePath, options = {}) { const params = []; const { limit = 50, offset = 0, orderBy = "date_desc", isFolder = false, ...filters } = options; const queryLimit = isFolder ? limit * 3 : limit; const fileFilters = { ...filters, files: filePath }; const filterClause = this.buildFilterClause(fileFilters, params, "o"); const orderClause = this.buildOrderClause(orderBy, false); const observationsSql = ` SELECT o.*, o.discovery_tokens FROM observations o WHERE ${filterClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(queryLimit, offset); let observations = this.db.prepare(observationsSql).all(...params); if (isFolder) { observations = observations.filter((obs) => this.hasDirectChildFile(obs, filePath)).slice(0, limit); } const sessionParams = []; const sessionFilters = { ...filters }; delete sessionFilters.type; const baseConditions = []; if (sessionFilters.project) { baseConditions.push("s.project = ?"); sessionParams.push(sessionFilters.project); } if (sessionFilters.dateRange) { const { start, end } = sessionFilters.dateRange; if (start) { const startEpoch = typeof start === "number" ? start : new Date(start).getTime(); baseConditions.push("s.created_at_epoch >= ?"); sessionParams.push(startEpoch); } if (end) { const endEpoch = typeof end === "number" ? end : new Date(end).getTime(); baseConditions.push("s.created_at_epoch <= ?"); sessionParams.push(endEpoch); } } baseConditions.push(`( EXISTS (SELECT 1 FROM json_each(s.files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(s.files_edited) WHERE value LIKE ?) )`); sessionParams.push(`%${filePath}%`, `%${filePath}%`); const sessionsSql = ` SELECT s.*, s.discovery_tokens FROM session_summaries s WHERE ${baseConditions.join(" AND ")} ORDER BY s.created_at_epoch DESC LIMIT ? OFFSET ? `; sessionParams.push(queryLimit, offset); let sessions = this.db.prepare(sessionsSql).all(...sessionParams); if (isFolder) { sessions = sessions.filter((s) => this.hasDirectChildFileSession(s, filePath)).slice(0, limit); } return { observations, sessions }; } findByType(type, options = {}) { const params = []; const { limit = 50, offset = 0, orderBy = "date_desc", ...filters } = options; const typeFilters = { ...filters, type }; const filterClause = this.buildFilterClause(typeFilters, params, "o"); const orderClause = this.buildOrderClause(orderBy, false); const sql = ` SELECT o.*, o.discovery_tokens FROM observations o WHERE ${filterClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(limit, offset); return this.db.prepare(sql).all(...params); } searchUserPrompts(query, options = {}) { const params = []; const { limit = 20, offset = 0, orderBy = "relevance", ...filters } = options; const baseConditions = []; if (filters.project) { baseConditions.push("s.project = ?"); params.push(filters.project); } if (filters.dateRange) { const { start, end } = filters.dateRange; if (start) { const startEpoch = typeof start === "number" ? start : new Date(start).getTime(); baseConditions.push("up.created_at_epoch >= ?"); params.push(startEpoch); } if (end) { const endEpoch = typeof end === "number" ? end : new Date(end).getTime(); baseConditions.push("up.created_at_epoch <= ?"); params.push(endEpoch); } } if (!query) { if (baseConditions.length === 0) { throw new Error("Either query or filters required for search"); } const whereClause = `WHERE ${baseConditions.join(" AND ")}`; const orderClause = orderBy === "date_asc" ? "ORDER BY up.created_at_epoch ASC" : "ORDER BY up.created_at_epoch DESC"; const sql = ` SELECT up.* FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id ${whereClause} ${orderClause} LIMIT ? OFFSET ? `; params.push(limit, offset); return this.db.prepare(sql).all(...params); } logger.warn("DB", "Text search not supported - use ChromaDB for vector search"); return []; } getUserPromptsBySession(contentSessionId) { const stmt = this.db.prepare(` SELECT id, content_session_id, prompt_number, prompt_text, created_at, created_at_epoch FROM user_prompts WHERE content_session_id = ? ORDER BY prompt_number ASC `); return stmt.all(contentSessionId); } close() { this.db.close(); } } // src/services/worker/DatabaseManager.ts init_SettingsDefaultsManager(); init_paths(); init_logger(); class DatabaseManager { sessionStore = null; sessionSearch = null; chromaSync = null; async initialize() { this.sessionStore = new SessionStore; this.sessionSearch = new SessionSearch; const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const chromaEnabled = settings.CLAUDE_MEM_CHROMA_ENABLED !== "false"; if (chromaEnabled) { this.chromaSync = new ChromaSync("claude-mem"); } else { logger.info("DB", "Chroma disabled via CLAUDE_MEM_CHROMA_ENABLED=false, using SQLite-only search"); } logger.info("DB", "Database initialized"); } async close() { if (this.chromaSync) { await this.chromaSync.close(); this.chromaSync = null; } if (this.sessionStore) { this.sessionStore.close(); this.sessionStore = null; } if (this.sessionSearch) { this.sessionSearch.close(); this.sessionSearch = null; } logger.info("DB", "Database closed"); } getSessionStore() { if (!this.sessionStore) { throw new Error("Database not initialized"); } return this.sessionStore; } getSessionSearch() { if (!this.sessionSearch) { throw new Error("Database not initialized"); } return this.sessionSearch; } getChromaSync() { return this.chromaSync; } getSessionById(sessionDbId) { const session = this.getSessionStore().getSessionById(sessionDbId); if (!session) { throw new Error(`Session ${sessionDbId} not found`); } return session; } } // src/services/worker/SessionManager.ts init_logger(); init_PendingMessageStore(); import { EventEmitter } from "events"; // src/services/queue/SessionQueueProcessor.ts init_logger(); var IDLE_TIMEOUT_MS = 3 * 60 * 1000; class SessionQueueProcessor { store; events; constructor(store, events) { this.store = store; this.events = events; } async* createIterator(options) { const { sessionDbId, signal, onIdleTimeout } = options; let lastActivityTime = Date.now(); while (!signal.aborted) { try { const persistentMessage = this.store.claimNextMessage(sessionDbId); if (persistentMessage) { lastActivityTime = Date.now(); yield this.toPendingMessageWithId(persistentMessage); } else { const receivedMessage = await this.waitForMessage(signal, IDLE_TIMEOUT_MS); if (!receivedMessage && !signal.aborted) { const idleDuration = Date.now() - lastActivityTime; if (idleDuration >= IDLE_TIMEOUT_MS) { logger.info("SESSION", "Idle timeout reached, triggering abort to kill subprocess", { sessionDbId, idleDurationMs: idleDuration, thresholdMs: IDLE_TIMEOUT_MS }); onIdleTimeout?.(); return; } lastActivityTime = Date.now(); } } } catch (error2) { if (signal.aborted) return; logger.error("SESSION", "Error in queue processor loop", { sessionDbId }, error2); await new Promise((resolve) => setTimeout(resolve, 1000)); } } } toPendingMessageWithId(msg) { const pending = this.store.toPendingMessage(msg); return { ...pending, _persistentId: msg.id, _originalTimestamp: msg.created_at_epoch }; } waitForMessage(signal, timeoutMs = IDLE_TIMEOUT_MS) { return new Promise((resolve) => { let timeoutId; const onMessage = () => { cleanup(); resolve(true); }; const onAbort = () => { cleanup(); resolve(false); }; const onTimeout = () => { cleanup(); resolve(false); }; const cleanup = () => { if (timeoutId !== undefined) { clearTimeout(timeoutId); } this.events.off("message", onMessage); signal.removeEventListener("abort", onAbort); }; this.events.once("message", onMessage); signal.addEventListener("abort", onAbort, { once: true }); timeoutId = setTimeout(onTimeout, timeoutMs); }); } } // src/services/worker/ProcessRegistry.ts init_logger(); import { spawn as spawn3, exec as exec3 } from "child_process"; import { promisify as promisify4 } from "util"; var execAsync3 = promisify4(exec3); function getTrackedProcesses() { return getSupervisor().getRegistry().getAll().filter((record3) => record3.type === "sdk").map((record3) => { const processRef = getSupervisor().getRegistry().getRuntimeProcess(record3.id); if (!processRef) { return null; } return { pid: record3.pid, sessionDbId: Number(record3.sessionId), spawnedAt: Date.parse(record3.startedAt), process: processRef }; }).filter((value) => value !== null); } function registerProcess(pid, sessionDbId, process4) { getSupervisor().registerProcess(`sdk:${sessionDbId}:${pid}`, { pid, type: "sdk", sessionId: sessionDbId, startedAt: new Date().toISOString() }, process4); logger.info("PROCESS", `Registered PID ${pid} for session ${sessionDbId}`, { pid, sessionDbId }); } function unregisterProcess(pid) { for (const record3 of getSupervisor().getRegistry().getByPid(pid)) { if (record3.type === "sdk") { getSupervisor().unregisterProcess(record3.id); } } logger.debug("PROCESS", `Unregistered PID ${pid}`, { pid }); notifySlotAvailable(); } function getProcessBySession(sessionDbId) { const matches = getTrackedProcesses().filter((info) => info.sessionDbId === sessionDbId); if (matches.length > 1) { logger.warn("PROCESS", `Multiple processes found for session ${sessionDbId}`, { count: matches.length, pids: matches.map((m) => m.pid) }); } return matches[0]; } function getActiveCount() { return getSupervisor().getRegistry().getAll().filter((record3) => record3.type === "sdk").length; } var slotWaiters = []; function notifySlotAvailable() { const waiter = slotWaiters.shift(); if (waiter) waiter(); } var TOTAL_PROCESS_HARD_CAP = 10; async function waitForSlot(maxConcurrent, timeoutMs = 60000) { const activeCount = getActiveCount(); if (activeCount >= TOTAL_PROCESS_HARD_CAP) { throw new Error(`Hard cap exceeded: ${activeCount} processes in registry (cap=${TOTAL_PROCESS_HARD_CAP}). Refusing to spawn more.`); } if (activeCount < maxConcurrent) return; logger.info("PROCESS", `Pool limit reached (${activeCount}/${maxConcurrent}), waiting for slot...`); return new Promise((resolve, reject) => { const timeout = setTimeout(() => { const idx = slotWaiters.indexOf(onSlot); if (idx >= 0) slotWaiters.splice(idx, 1); reject(new Error(`Timed out waiting for agent pool slot after ${timeoutMs}ms`)); }, timeoutMs); const onSlot = () => { clearTimeout(timeout); if (getActiveCount() < maxConcurrent) { resolve(); } else { slotWaiters.push(onSlot); } }; slotWaiters.push(onSlot); }); } async function ensureProcessExit(tracked, timeoutMs = 5000) { const { pid, process: proc } = tracked; if (proc.exitCode !== null) { unregisterProcess(pid); return; } const exitPromise = new Promise((resolve) => { proc.once("exit", () => resolve()); }); const timeoutPromise = new Promise((resolve) => { setTimeout(resolve, timeoutMs); }); await Promise.race([exitPromise, timeoutPromise]); if (proc.exitCode !== null) { unregisterProcess(pid); return; } logger.warn("PROCESS", `PID ${pid} did not exit after ${timeoutMs}ms, sending SIGKILL`, { pid, timeoutMs }); try { proc.kill("SIGKILL"); } catch {} const sigkillExitPromise = new Promise((resolve) => { proc.once("exit", () => resolve()); }); const sigkillTimeout = new Promise((resolve) => { setTimeout(resolve, 1000); }); await Promise.race([sigkillExitPromise, sigkillTimeout]); unregisterProcess(pid); } async function killIdleDaemonChildren() { if (process.platform === "win32") { return 0; } const daemonPid = process.pid; let killed = 0; try { const { stdout } = await execAsync3('ps -eo pid,ppid,%cpu,etime,comm 2>/dev/null | grep "claude$" || true'); for (const line of stdout.trim().split(` `)) { if (!line) continue; const parts = line.trim().split(/\s+/); if (parts.length < 5) continue; const [pidStr, ppidStr, cpuStr, etime] = parts; const pid = parseInt(pidStr, 10); const ppid = parseInt(ppidStr, 10); const cpu = parseFloat(cpuStr); if (ppid !== daemonPid) continue; if (cpu > 0) continue; let minutes = 0; const dayMatch = etime.match(/^(\d+)-(\d+):(\d+):(\d+)$/); const hourMatch = etime.match(/^(\d+):(\d+):(\d+)$/); const minMatch = etime.match(/^(\d+):(\d+)$/); if (dayMatch) { minutes = parseInt(dayMatch[1], 10) * 24 * 60 + parseInt(dayMatch[2], 10) * 60 + parseInt(dayMatch[3], 10); } else if (hourMatch) { minutes = parseInt(hourMatch[1], 10) * 60 + parseInt(hourMatch[2], 10); } else if (minMatch) { minutes = parseInt(minMatch[1], 10); } if (minutes >= 1) { logger.info("PROCESS", `Killing idle daemon child PID ${pid} (idle ${minutes}m)`, { pid, minutes }); try { process.kill(pid, "SIGKILL"); killed++; } catch {} } } } catch {} return killed; } async function killSystemOrphans() { if (process.platform === "win32") { return 0; } try { const { stdout } = await execAsync3('ps -eo pid,ppid,args 2>/dev/null | grep -E "claude.*haiku|claude.*output-format" | grep -v grep'); let killed = 0; for (const line of stdout.trim().split(` `)) { if (!line) continue; const match = line.trim().match(/^(\d+)\s+(\d+)/); if (match && parseInt(match[2]) === 1) { const orphanPid = parseInt(match[1]); logger.warn("PROCESS", `Killing system orphan PID ${orphanPid}`, { pid: orphanPid }); try { process.kill(orphanPid, "SIGKILL"); killed++; } catch {} } } return killed; } catch { return 0; } } async function reapOrphanedProcesses(activeSessionIds) { let killed = 0; for (const record3 of getSupervisor().getRegistry().getAll().filter((entry) => entry.type === "sdk")) { const pid = record3.pid; const sessionDbId = Number(record3.sessionId); const processRef = getSupervisor().getRegistry().getRuntimeProcess(record3.id); if (activeSessionIds.has(sessionDbId)) continue; logger.warn("PROCESS", `Killing orphan PID ${pid} (session ${sessionDbId} gone)`, { pid, sessionDbId }); try { if (processRef) { processRef.kill("SIGKILL"); } else { process.kill(pid, "SIGKILL"); } killed++; } catch {} getSupervisor().unregisterProcess(record3.id); notifySlotAvailable(); } killed += await killSystemOrphans(); killed += await killIdleDaemonChildren(); return killed; } function createPidCapturingSpawn(sessionDbId) { return (spawnOptions) => { getSupervisor().assertCanSpawn("claude sdk"); const useCmdWrapper = process.platform === "win32" && spawnOptions.command.endsWith(".cmd"); const env = sanitizeEnv(spawnOptions.env ?? process.env); const child = useCmdWrapper ? spawn3("cmd.exe", ["/d", "/c", spawnOptions.command, ...spawnOptions.args], { cwd: spawnOptions.cwd, env, stdio: ["pipe", "pipe", "pipe"], signal: spawnOptions.signal, windowsHide: true }) : spawn3(spawnOptions.command, spawnOptions.args, { cwd: spawnOptions.cwd, env, stdio: ["pipe", "pipe", "pipe"], signal: spawnOptions.signal, windowsHide: true }); if (child.stderr) { child.stderr.on("data", (data) => { logger.debug("SDK_SPAWN", `[session-${sessionDbId}] stderr: ${data.toString().trim()}`); }); } if (child.pid) { registerProcess(child.pid, sessionDbId, child); child.on("exit", (code, signal) => { if (code !== 0) { logger.warn("SDK_SPAWN", `[session-${sessionDbId}] Claude process exited`, { code, signal, pid: child.pid }); } if (child.pid) { unregisterProcess(child.pid); } }); } return { stdin: child.stdin, stdout: child.stdout, stderr: child.stderr, get killed() { return child.killed; }, get exitCode() { return child.exitCode; }, kill: child.kill.bind(child), on: child.on.bind(child), once: child.once.bind(child), off: child.off.bind(child) }; }; } function startOrphanReaper(getActiveSessionIds, intervalMs = 30 * 1000) { const interval = setInterval(async () => { try { const activeIds = getActiveSessionIds(); const killed = await reapOrphanedProcesses(activeIds); if (killed > 0) { logger.info("PROCESS", `Reaper cleaned up ${killed} orphaned processes`, { killed }); } } catch (error2) { logger.error("PROCESS", "Reaper error", {}, error2); } }, intervalMs); return () => clearInterval(interval); } // src/services/worker/SessionManager.ts class SessionManager { dbManager; sessions = new Map; sessionQueues = new Map; onSessionDeletedCallback; pendingStore = null; constructor(dbManager) { this.dbManager = dbManager; } getPendingStore() { if (!this.pendingStore) { const sessionStore = this.dbManager.getSessionStore(); this.pendingStore = new PendingMessageStore(sessionStore.db, 3); } return this.pendingStore; } setOnSessionDeleted(callback) { this.onSessionDeletedCallback = callback; } initializeSession(sessionDbId, currentUserPrompt, promptNumber) { logger.debug("SESSION", "initializeSession called", { sessionDbId, promptNumber, has_currentUserPrompt: !!currentUserPrompt }); let session = this.sessions.get(sessionDbId); if (session) { logger.debug("SESSION", "Returning cached session", { sessionDbId, contentSessionId: session.contentSessionId, lastPromptNumber: session.lastPromptNumber }); const dbSession2 = this.dbManager.getSessionById(sessionDbId); if (dbSession2.project && dbSession2.project !== session.project) { logger.debug("SESSION", "Updating project from database", { sessionDbId, oldProject: session.project, newProject: dbSession2.project }); session.project = dbSession2.project; } if (currentUserPrompt) { logger.debug("SESSION", "Updating userPrompt for continuation", { sessionDbId, promptNumber, oldPrompt: session.userPrompt.substring(0, 80), newPrompt: currentUserPrompt.substring(0, 80) }); session.userPrompt = currentUserPrompt; session.lastPromptNumber = promptNumber || session.lastPromptNumber; } else { logger.debug("SESSION", "No currentUserPrompt provided for existing session", { sessionDbId, promptNumber, usingCachedPrompt: session.userPrompt.substring(0, 80) }); } return session; } const dbSession = this.dbManager.getSessionById(sessionDbId); logger.debug("SESSION", "Fetched session from database", { sessionDbId, content_session_id: dbSession.content_session_id, memory_session_id: dbSession.memory_session_id }); if (dbSession.memory_session_id) { logger.warn("SESSION", `Discarding stale memory_session_id from previous worker instance (Issue #817)`, { sessionDbId, staleMemorySessionId: dbSession.memory_session_id, reason: "SDK context lost on worker restart - will capture new ID" }); } const userPrompt = currentUserPrompt || dbSession.user_prompt; if (!currentUserPrompt) { logger.debug("SESSION", "No currentUserPrompt provided for new session, using database", { sessionDbId, promptNumber, dbPrompt: dbSession.user_prompt.substring(0, 80) }); } else { logger.debug("SESSION", "Initializing session with fresh userPrompt", { sessionDbId, promptNumber, userPrompt: currentUserPrompt.substring(0, 80) }); } session = { sessionDbId, contentSessionId: dbSession.content_session_id, memorySessionId: null, project: dbSession.project, userPrompt, pendingMessages: [], abortController: new AbortController, generatorPromise: null, lastPromptNumber: promptNumber || this.dbManager.getSessionStore().getPromptNumberFromUserPrompts(dbSession.content_session_id), startTime: Date.now(), cumulativeInputTokens: 0, cumulativeOutputTokens: 0, earliestPendingTimestamp: null, conversationHistory: [], currentProvider: null, consecutiveRestarts: 0, processingMessageIds: [], lastGeneratorActivity: Date.now() }; logger.debug("SESSION", "Creating new session object (memorySessionId cleared to prevent stale resume)", { sessionDbId, contentSessionId: dbSession.content_session_id, dbMemorySessionId: dbSession.memory_session_id || "(none in DB)", memorySessionId: "(cleared - will capture fresh from SDK)", lastPromptNumber: promptNumber || this.dbManager.getSessionStore().getPromptNumberFromUserPrompts(dbSession.content_session_id) }); this.sessions.set(sessionDbId, session); const emitter = new EventEmitter; this.sessionQueues.set(sessionDbId, emitter); logger.info("SESSION", "Session initialized", { sessionId: sessionDbId, project: session.project, contentSessionId: session.contentSessionId, queueDepth: 0, hasGenerator: false }); return session; } getSession(sessionDbId) { return this.sessions.get(sessionDbId); } queueObservation(sessionDbId, data) { let session = this.sessions.get(sessionDbId); if (!session) { session = this.initializeSession(sessionDbId); } const message = { type: "observation", tool_name: data.tool_name, tool_input: data.tool_input, tool_response: data.tool_response, prompt_number: data.prompt_number, cwd: data.cwd }; try { const messageId = this.getPendingStore().enqueue(sessionDbId, session.contentSessionId, message); const queueDepth = this.getPendingStore().getPendingCount(sessionDbId); const toolSummary = logger.formatTool(data.tool_name, data.tool_input); logger.info("QUEUE", `ENQUEUED | sessionDbId=${sessionDbId} | messageId=${messageId} | type=observation | tool=${toolSummary} | depth=${queueDepth}`, { sessionId: sessionDbId }); } catch (error2) { logger.error("SESSION", "Failed to persist observation to DB", { sessionId: sessionDbId, tool: data.tool_name }, error2); throw error2; } const emitter = this.sessionQueues.get(sessionDbId); emitter?.emit("message"); } queueSummarize(sessionDbId, lastAssistantMessage) { let session = this.sessions.get(sessionDbId); if (!session) { session = this.initializeSession(sessionDbId); } const message = { type: "summarize", last_assistant_message: lastAssistantMessage }; try { const messageId = this.getPendingStore().enqueue(sessionDbId, session.contentSessionId, message); const queueDepth = this.getPendingStore().getPendingCount(sessionDbId); logger.info("QUEUE", `ENQUEUED | sessionDbId=${sessionDbId} | messageId=${messageId} | type=summarize | depth=${queueDepth}`, { sessionId: sessionDbId }); } catch (error2) { logger.error("SESSION", "Failed to persist summarize to DB", { sessionId: sessionDbId }, error2); throw error2; } const emitter = this.sessionQueues.get(sessionDbId); emitter?.emit("message"); } async deleteSession(sessionDbId) { const session = this.sessions.get(sessionDbId); if (!session) { return; } const sessionDuration = Date.now() - session.startTime; session.abortController.abort(); if (session.generatorPromise) { const generatorDone = session.generatorPromise.catch(() => { logger.debug("SYSTEM", "Generator already failed, cleaning up", { sessionId: session.sessionDbId }); }); const timeoutDone = new Promise((resolve) => { AbortSignal.timeout(30000).addEventListener("abort", () => resolve(), { once: true }); }); await Promise.race([generatorDone, timeoutDone]).then(() => {}, () => { logger.warn("SESSION", "Generator did not exit within 30s after abort, forcing cleanup (#1099)", { sessionDbId }); }); } const tracked = getProcessBySession(sessionDbId); if (tracked && tracked.process.exitCode === null) { logger.debug("SESSION", `Waiting for subprocess PID ${tracked.pid} to exit`, { sessionId: sessionDbId, pid: tracked.pid }); await ensureProcessExit(tracked, 5000); } try { await getSupervisor().getRegistry().reapSession(sessionDbId); } catch (error2) { logger.warn("SESSION", "Supervisor reapSession failed (non-blocking)", { sessionId: sessionDbId }, error2); } this.sessions.delete(sessionDbId); this.sessionQueues.delete(sessionDbId); logger.info("SESSION", "Session deleted", { sessionId: sessionDbId, duration: `${(sessionDuration / 1000).toFixed(1)}s`, project: session.project }); if (this.onSessionDeletedCallback) { this.onSessionDeletedCallback(); } } removeSessionImmediate(sessionDbId) { const session = this.sessions.get(sessionDbId); if (!session) return; this.sessions.delete(sessionDbId); this.sessionQueues.delete(sessionDbId); logger.info("SESSION", "Session removed (orphaned after SDK termination)", { sessionId: sessionDbId, project: session.project }); if (this.onSessionDeletedCallback) { this.onSessionDeletedCallback(); } } static MAX_SESSION_IDLE_MS = 15 * 60 * 1000; async reapStaleSessions() { const now = Date.now(); const staleSessionIds = []; for (const [sessionDbId, session] of this.sessions) { if (session.generatorPromise) continue; const pendingCount = this.getPendingStore().getPendingCount(sessionDbId); if (pendingCount > 0) continue; const sessionAge = now - session.startTime; if (sessionAge > SessionManager.MAX_SESSION_IDLE_MS) { staleSessionIds.push(sessionDbId); } } for (const sessionDbId of staleSessionIds) { logger.warn("SESSION", `Reaping stale session ${sessionDbId} (no activity for >${Math.round(SessionManager.MAX_SESSION_IDLE_MS / 60000)}m)`, { sessionDbId }); await this.deleteSession(sessionDbId); } return staleSessionIds.length; } async shutdownAll() { const sessionIds = Array.from(this.sessions.keys()); await Promise.all(sessionIds.map((id) => this.deleteSession(id))); } hasPendingMessages() { return this.getPendingStore().hasAnyPendingWork(); } getActiveSessionCount() { return this.sessions.size; } getTotalQueueDepth() { let total = 0; for (const session of this.sessions.values()) { total += this.getPendingStore().getPendingCount(session.sessionDbId); } return total; } getTotalActiveWork() { return this.getTotalQueueDepth(); } isAnySessionProcessing() { return this.getPendingStore().hasAnyPendingWork(); } async* getMessageIterator(sessionDbId) { let session = this.sessions.get(sessionDbId); if (!session) { session = this.initializeSession(sessionDbId); } const emitter = this.sessionQueues.get(sessionDbId); if (!emitter) { throw new Error(`No emitter for session ${sessionDbId}`); } const processor = new SessionQueueProcessor(this.getPendingStore(), emitter); for await (const message of processor.createIterator({ sessionDbId, signal: session.abortController.signal, onIdleTimeout: () => { logger.info("SESSION", "Triggering abort due to idle timeout to kill subprocess", { sessionDbId }); session.idleTimedOut = true; session.abortController.abort(); } })) { if (session.earliestPendingTimestamp === null) { session.earliestPendingTimestamp = message._originalTimestamp; } else { session.earliestPendingTimestamp = Math.min(session.earliestPendingTimestamp, message._originalTimestamp); } session.lastGeneratorActivity = Date.now(); yield message; } } getPendingMessageStore() { return this.getPendingStore(); } } // src/services/worker/SSEBroadcaster.ts init_logger(); class SSEBroadcaster { sseClients = new Set; addClient(res) { this.sseClients.add(res); logger.debug("WORKER", "Client connected", { total: this.sseClients.size }); res.on("close", () => { this.removeClient(res); }); this.sendToClient(res, { type: "connected", timestamp: Date.now() }); } removeClient(res) { this.sseClients.delete(res); logger.debug("WORKER", "Client disconnected", { total: this.sseClients.size }); } broadcast(event) { if (this.sseClients.size === 0) { logger.debug("WORKER", "SSE broadcast skipped (no clients)", { eventType: event.type }); return; } const eventWithTimestamp = { ...event, timestamp: Date.now() }; const data = `data: ${JSON.stringify(eventWithTimestamp)} `; logger.debug("WORKER", "SSE broadcast sent", { eventType: event.type, clients: this.sseClients.size }); for (const client of this.sseClients) { client.write(data); } } getClientCount() { return this.sseClients.size; } sendToClient(res, event) { const data = `data: ${JSON.stringify(event)} `; res.write(data); } } // src/services/worker/SDKAgent.ts init_logger(); import { execSync as execSync4 } from "child_process"; import { homedir as homedir12 } from "os"; import path13 from "path"; // src/sdk/prompts.ts init_logger(); function buildInitPrompt(project, sessionId, userPrompt, mode) { return `${mode.prompts.system_identity} ${userPrompt} ${new Date().toISOString().split("T")[0]} ${mode.prompts.observer_role} ${mode.prompts.spatial_awareness} ${mode.prompts.recording_focus} ${mode.prompts.skip_guidance} ${mode.prompts.output_format_header} \`\`\`xml [ ${mode.observation_types.map((t) => t.id).join(" | ")} ] ${mode.prompts.xml_title_placeholder} ${mode.prompts.xml_subtitle_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_narrative_placeholder} ${mode.prompts.xml_concept_placeholder} ${mode.prompts.xml_concept_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} \`\`\` ${mode.prompts.format_examples} ${mode.prompts.footer} ${mode.prompts.header_memory_start}`; } function buildObservationPrompt(obs) { let toolInput; let toolOutput; try { toolInput = typeof obs.tool_input === "string" ? JSON.parse(obs.tool_input) : obs.tool_input; } catch (error2) { logger.debug("SDK", "Tool input is plain string, using as-is", { toolName: obs.tool_name }, error2); toolInput = obs.tool_input; } try { toolOutput = typeof obs.tool_output === "string" ? JSON.parse(obs.tool_output) : obs.tool_output; } catch (error2) { logger.debug("SDK", "Tool output is plain string, using as-is", { toolName: obs.tool_name }, error2); toolOutput = obs.tool_output; } return ` ${obs.tool_name} ${new Date(obs.created_at_epoch).toISOString()}${obs.cwd ? ` ${obs.cwd}` : ""} ${JSON.stringify(toolInput, null, 2)} ${JSON.stringify(toolOutput, null, 2)} `; } function buildSummaryPrompt(session, mode) { const lastAssistantMessage = session.last_assistant_message || (() => { logger.error("SDK", "Missing last_assistant_message in session for summary prompt", { sessionId: session.id }); return ""; })(); return `--- MODE SWITCH: PROGRESS SUMMARY --- Do NOT output tags. This is a summary request, not an observation request. Your response MUST use tags ONLY. Any output will be discarded. ${mode.prompts.header_summary_checkpoint} ${mode.prompts.summary_instruction} ${mode.prompts.summary_context_label} ${lastAssistantMessage} ${mode.prompts.summary_format_instruction} ${mode.prompts.xml_summary_request_placeholder} ${mode.prompts.xml_summary_investigated_placeholder} ${mode.prompts.xml_summary_learned_placeholder} ${mode.prompts.xml_summary_completed_placeholder} ${mode.prompts.xml_summary_next_steps_placeholder} ${mode.prompts.xml_summary_notes_placeholder} ${mode.prompts.summary_footer}`; } function buildContinuationPrompt(userPrompt, promptNumber, contentSessionId, mode) { return `${mode.prompts.continuation_greeting} ${userPrompt} ${new Date().toISOString().split("T")[0]} ${mode.prompts.system_identity} ${mode.prompts.observer_role} ${mode.prompts.spatial_awareness} ${mode.prompts.recording_focus} ${mode.prompts.skip_guidance} ${mode.prompts.continuation_instruction} ${mode.prompts.output_format_header} \`\`\`xml [ ${mode.observation_types.map((t) => t.id).join(" | ")} ] ${mode.prompts.xml_title_placeholder} ${mode.prompts.xml_subtitle_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_fact_placeholder} ${mode.prompts.xml_narrative_placeholder} ${mode.prompts.xml_concept_placeholder} ${mode.prompts.xml_concept_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} ${mode.prompts.xml_file_placeholder} \`\`\` ${mode.prompts.format_examples} ${mode.prompts.footer} ${mode.prompts.header_memory_continued}`; } // src/services/worker/SDKAgent.ts init_SettingsDefaultsManager(); init_paths(); init_ModeManager(); // src/services/worker/agents/types.ts var FALLBACK_ERROR_PATTERNS = [ "429", "500", "502", "503", "ECONNREFUSED", "ETIMEDOUT", "fetch failed" ]; // src/services/worker/agents/ResponseProcessor.ts init_logger(); // src/sdk/parser.ts init_logger(); init_ModeManager(); function parseObservations(text, correlationId) { const observations = []; const observationRegex = /([\s\S]*?)<\/observation>/g; let match; while ((match = observationRegex.exec(text)) !== null) { const obsContent = match[1]; const type = extractField(obsContent, "type"); const title = extractField(obsContent, "title"); const subtitle = extractField(obsContent, "subtitle"); const narrative = extractField(obsContent, "narrative"); const facts = extractArrayElements(obsContent, "facts", "fact"); const concepts = extractArrayElements(obsContent, "concepts", "concept"); const files_read = extractArrayElements(obsContent, "files_read", "file"); const files_modified = extractArrayElements(obsContent, "files_modified", "file"); const mode = ModeManager.getInstance().getActiveMode(); const validTypes = mode.observation_types.map((t) => t.id); const fallbackType = validTypes[0]; let finalType = fallbackType; if (type) { if (validTypes.includes(type.trim())) { finalType = type.trim(); } else { logger.error("PARSER", `Invalid observation type: ${type}, using "${fallbackType}"`, { correlationId }); } } else { logger.error("PARSER", `Observation missing type field, using "${fallbackType}"`, { correlationId }); } const cleanedConcepts = concepts.filter((c) => c !== finalType); if (cleanedConcepts.length !== concepts.length) { logger.error("PARSER", "Removed observation type from concepts array", { correlationId, type: finalType, originalConcepts: concepts, cleanedConcepts }); } observations.push({ type: finalType, title, subtitle, facts, narrative, concepts: cleanedConcepts, files_read, files_modified }); } return observations; } function parseSummary(text, sessionId) { const skipRegex = //; const skipMatch = skipRegex.exec(text); if (skipMatch) { logger.info("PARSER", "Summary skipped", { sessionId, reason: skipMatch[1] }); return null; } const summaryRegex = /([\s\S]*?)<\/summary>/; const summaryMatch = summaryRegex.exec(text); if (!summaryMatch) { if (//.test(text)) { logger.warn("PARSER", "Summary response contained tags instead of — prompt conditioning may need strengthening", { sessionId }); } return null; } const summaryContent = summaryMatch[1]; const request = extractField(summaryContent, "request"); const investigated = extractField(summaryContent, "investigated"); const learned = extractField(summaryContent, "learned"); const completed = extractField(summaryContent, "completed"); const next_steps = extractField(summaryContent, "next_steps"); const notes = extractField(summaryContent, "notes"); return { request, investigated, learned, completed, next_steps, notes }; } function extractField(content, fieldName) { const regex = new RegExp(`<${fieldName}>([\\s\\S]*?)`); const match = regex.exec(content); if (!match) return null; const trimmed = match[1].trim(); return trimmed === "" ? null : trimmed; } function extractArrayElements(content, arrayName, elementName) { const elements = []; const arrayRegex = new RegExp(`<${arrayName}>([\\s\\S]*?)`); const arrayMatch = arrayRegex.exec(content); if (!arrayMatch) { return elements; } const arrayContent = arrayMatch[1]; const elementRegex = new RegExp(`<${elementName}>([\\s\\S]*?)`, "g"); let elementMatch; while ((elementMatch = elementRegex.exec(arrayContent)) !== null) { const trimmed = elementMatch[1].trim(); if (trimmed) { elements.push(trimmed); } } return elements; } // src/utils/claude-md-utils.ts init_logger(); init_timeline_formatting(); init_SettingsDefaultsManager(); init_worker_utils(); import { existsSync as existsSync12, readFileSync as readFileSync13, writeFileSync as writeFileSync7, renameSync as renameSync2 } from "fs"; import path12 from "path"; import os2 from "os"; var SETTINGS_PATH = path12.join(os2.homedir(), ".claude-mem", "settings.json"); function hasConsecutiveDuplicateSegments(resolvedPath) { const segments = resolvedPath.split(path12.sep).filter((s) => s && s !== "." && s !== ".."); for (let i = 1;i < segments.length; i++) { if (segments[i] === segments[i - 1]) return true; } return false; } function isValidPathForClaudeMd(filePath, projectRoot) { if (!filePath || !filePath.trim()) return false; if (filePath.startsWith("~")) return false; if (filePath.startsWith("http://") || filePath.startsWith("https://")) return false; if (filePath.includes(" ")) return false; if (filePath.includes("#")) return false; if (projectRoot) { const resolved = path12.isAbsolute(filePath) ? filePath : path12.resolve(projectRoot, filePath); const normalizedRoot = path12.resolve(projectRoot); if (!resolved.startsWith(normalizedRoot + path12.sep) && resolved !== normalizedRoot) { return false; } if (hasConsecutiveDuplicateSegments(resolved)) { return false; } } return true; } function replaceTaggedContent(existingContent, newContent) { const startTag = ""; const endTag = ""; if (!existingContent) { return `${startTag} ${newContent} ${endTag}`; } const startIdx = existingContent.indexOf(startTag); const endIdx = existingContent.indexOf(endTag); if (startIdx !== -1 && endIdx !== -1) { return existingContent.substring(0, startIdx) + `${startTag} ${newContent} ${endTag}` + existingContent.substring(endIdx + endTag.length); } return existingContent + ` ${startTag} ${newContent} ${endTag}`; } function writeClaudeMdToFolder(folderPath, newContent) { const resolvedPath = path12.resolve(folderPath); if (resolvedPath.includes("/.git/") || resolvedPath.includes("\\.git\\") || resolvedPath.endsWith("/.git") || resolvedPath.endsWith("\\.git")) return; const claudeMdPath = path12.join(folderPath, "CLAUDE.md"); const tempFile = `${claudeMdPath}.tmp`; if (!existsSync12(folderPath)) { logger.debug("FOLDER_INDEX", "Skipping non-existent folder", { folderPath }); return; } let existingContent = ""; if (existsSync12(claudeMdPath)) { existingContent = readFileSync13(claudeMdPath, "utf-8"); } const finalContent = replaceTaggedContent(existingContent, newContent); writeFileSync7(tempFile, finalContent); renameSync2(tempFile, claudeMdPath); } function formatTimelineForClaudeMd(timelineText) { const lines = []; lines.push("# Recent Activity"); lines.push(""); const apiLines = timelineText.split(` `); const observations = []; let lastTimeStr = ""; let currentDate = null; for (const line of apiLines) { const dateMatch = line.match(/^###\s+(.+)$/); if (dateMatch) { const dateStr = dateMatch[1].trim(); const parsedDate = new Date(dateStr); if (!isNaN(parsedDate.getTime())) { currentDate = parsedDate; } continue; } const match = line.match(/^\|\s*(#[S]?\d+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|\s*([^|]+)\s*\|/); if (match) { const [, id, timeStr, typeEmoji, title, tokens] = match; let time3; if (timeStr.trim() === "″" || timeStr.trim() === '"') { time3 = lastTimeStr; } else { time3 = timeStr.trim(); lastTimeStr = time3; } const baseDate = currentDate ? new Date(currentDate) : new Date; const timeParts = time3.match(/(\d+):(\d+)\s*(AM|PM)/i); let epoch = baseDate.getTime(); if (timeParts) { let hours = parseInt(timeParts[1], 10); const minutes = parseInt(timeParts[2], 10); const isPM = timeParts[3].toUpperCase() === "PM"; if (isPM && hours !== 12) hours += 12; if (!isPM && hours === 12) hours = 0; baseDate.setHours(hours, minutes, 0, 0); epoch = baseDate.getTime(); } observations.push({ id: id.trim(), time: time3, typeEmoji: typeEmoji.trim(), title: title.trim(), tokens: tokens.trim(), epoch }); } } if (observations.length === 0) { return ""; } const byDate = groupByDate(observations, (obs) => new Date(obs.epoch).toISOString()); for (const [day, dayObs] of byDate) { lines.push(`### ${day}`); lines.push(""); lines.push("| ID | Time | T | Title | Read |"); lines.push("|----|------|---|-------|------|"); let lastTime = ""; for (const obs of dayObs) { const timeDisplay = obs.time === lastTime ? '"' : obs.time; lastTime = obs.time; lines.push(`| ${obs.id} | ${timeDisplay} | ${obs.typeEmoji} | ${obs.title} | ${obs.tokens} |`); } lines.push(""); } return lines.join(` `).trim(); } var EXCLUDED_UNSAFE_DIRECTORIES = new Set([ "res", ".git", "build", "node_modules", "__pycache__" ]); function isExcludedUnsafeDirectory(folderPath) { const normalized = path12.normalize(folderPath); const segments = normalized.split(path12.sep); return segments.some((segment) => EXCLUDED_UNSAFE_DIRECTORIES.has(segment)); } function isProjectRoot(folderPath) { const gitPath = path12.join(folderPath, ".git"); return existsSync12(gitPath); } function isExcludedFolder(folderPath, excludePaths) { const normalizedFolder = path12.resolve(folderPath); for (const excludePath of excludePaths) { const normalizedExclude = path12.resolve(excludePath); if (normalizedFolder === normalizedExclude || normalizedFolder.startsWith(normalizedExclude + path12.sep)) { return true; } } return false; } async function updateFolderClaudeMdFiles(filePaths, project, _port, projectRoot) { const settings = SettingsDefaultsManager.loadFromFile(SETTINGS_PATH); const limit = parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10) || 50; let folderMdExcludePaths = []; try { const parsed = JSON.parse(settings.CLAUDE_MEM_FOLDER_MD_EXCLUDE || "[]"); if (Array.isArray(parsed)) { folderMdExcludePaths = parsed.filter((p) => typeof p === "string"); } } catch { logger.warn("FOLDER_INDEX", "Failed to parse CLAUDE_MEM_FOLDER_MD_EXCLUDE setting"); } const foldersWithActiveClaudeMd = new Set; for (const filePath of filePaths) { if (!filePath) continue; const basename3 = path12.basename(filePath); if (basename3 === "CLAUDE.md") { let absoluteFilePath = filePath; if (projectRoot && !path12.isAbsolute(filePath)) { absoluteFilePath = path12.join(projectRoot, filePath); } const folderPath = path12.dirname(absoluteFilePath); foldersWithActiveClaudeMd.add(folderPath); logger.debug("FOLDER_INDEX", "Detected active CLAUDE.md, will skip folder", { folderPath }); } } const folderPaths = new Set; for (const filePath of filePaths) { if (!filePath || filePath === "") continue; if (!isValidPathForClaudeMd(filePath, projectRoot)) { logger.debug("FOLDER_INDEX", "Skipping invalid file path", { filePath, reason: "Failed path validation" }); continue; } let absoluteFilePath = filePath; if (projectRoot && !path12.isAbsolute(filePath)) { absoluteFilePath = path12.join(projectRoot, filePath); } const folderPath = path12.dirname(absoluteFilePath); if (folderPath && folderPath !== "." && folderPath !== "/") { if (isProjectRoot(folderPath)) { logger.debug("FOLDER_INDEX", "Skipping project root CLAUDE.md", { folderPath }); continue; } if (isExcludedUnsafeDirectory(folderPath)) { logger.debug("FOLDER_INDEX", "Skipping unsafe directory for CLAUDE.md", { folderPath }); continue; } if (foldersWithActiveClaudeMd.has(folderPath)) { logger.debug("FOLDER_INDEX", "Skipping folder with active CLAUDE.md to avoid race condition", { folderPath }); continue; } if (folderMdExcludePaths.length > 0 && isExcludedFolder(folderPath, folderMdExcludePaths)) { logger.debug("FOLDER_INDEX", "Skipping excluded folder", { folderPath }); continue; } folderPaths.add(folderPath); } } if (folderPaths.size === 0) return; logger.debug("FOLDER_INDEX", "Updating CLAUDE.md files", { project, folderCount: folderPaths.size }); for (const folderPath of folderPaths) { try { const response = await workerHttpRequest(`/api/search/by-file?filePath=${encodeURIComponent(folderPath)}&limit=${limit}&project=${encodeURIComponent(project)}&isFolder=true`); if (!response.ok) { logger.error("FOLDER_INDEX", "Failed to fetch timeline", { folderPath, status: response.status }); continue; } const result = await response.json(); if (!result.content?.[0]?.text) { logger.debug("FOLDER_INDEX", "No content for folder", { folderPath }); continue; } const formatted = formatTimelineForClaudeMd(result.content[0].text); const claudeMdPath = path12.join(folderPath, "CLAUDE.md"); const hasNoActivity = formatted.includes("*No recent activity*"); const fileExists = existsSync12(claudeMdPath); if (hasNoActivity && !fileExists) { logger.debug("FOLDER_INDEX", "Skipping empty CLAUDE.md creation", { folderPath }); continue; } writeClaudeMdToFolder(folderPath, formatted); logger.debug("FOLDER_INDEX", "Updated CLAUDE.md", { folderPath }); } catch (error2) { const err = error2; logger.error("FOLDER_INDEX", "Failed to update CLAUDE.md", { folderPath, errorMessage: err.message, errorStack: err.stack }); } } } // src/services/worker/agents/ResponseProcessor.ts init_worker_utils(); init_SettingsDefaultsManager(); init_paths(); // src/services/worker/agents/ObservationBroadcaster.ts function broadcastObservation(worker, payload) { if (!worker?.sseBroadcaster) { return; } worker.sseBroadcaster.broadcast({ type: "new_observation", observation: payload }); } function broadcastSummary(worker, payload) { if (!worker?.sseBroadcaster) { return; } worker.sseBroadcaster.broadcast({ type: "new_summary", summary: payload }); } // src/services/worker/agents/SessionCleanupHelper.ts function cleanupProcessedMessages(session, worker) { session.earliestPendingTimestamp = null; if (worker && typeof worker.broadcastProcessingStatus === "function") { worker.broadcastProcessingStatus(); } } // src/services/worker/agents/ResponseProcessor.ts async function processAgentResponse(text, session, dbManager, sessionManager, worker, discoveryTokens, originalTimestamp, agentName, projectRoot) { session.lastGeneratorActivity = Date.now(); if (text) { session.conversationHistory.push({ role: "assistant", content: text }); } const observations = parseObservations(text, session.contentSessionId); const summary = parseSummary(text, session.sessionDbId); const summaryForStore = normalizeSummaryForStorage(summary); const sessionStore = dbManager.getSessionStore(); if (!session.memorySessionId) { throw new Error("Cannot store observations: memorySessionId not yet captured"); } sessionStore.ensureMemorySessionIdRegistered(session.sessionDbId, session.memorySessionId); logger.info("DB", `STORING | sessionDbId=${session.sessionDbId} | memorySessionId=${session.memorySessionId} | obsCount=${observations.length} | hasSummary=${!!summaryForStore}`, { sessionId: session.sessionDbId, memorySessionId: session.memorySessionId }); const result = sessionStore.storeObservations(session.memorySessionId, session.project, observations, summaryForStore, session.lastPromptNumber, discoveryTokens, originalTimestamp ?? undefined); logger.info("DB", `STORED | sessionDbId=${session.sessionDbId} | memorySessionId=${session.memorySessionId} | obsCount=${result.observationIds.length} | obsIds=[${result.observationIds.join(",")}] | summaryId=${result.summaryId || "none"}`, { sessionId: session.sessionDbId, memorySessionId: session.memorySessionId }); const pendingStore = sessionManager.getPendingMessageStore(); for (const messageId of session.processingMessageIds) { pendingStore.confirmProcessed(messageId); } if (session.processingMessageIds.length > 0) { logger.debug("QUEUE", `CONFIRMED_BATCH | sessionDbId=${session.sessionDbId} | count=${session.processingMessageIds.length} | ids=[${session.processingMessageIds.join(",")}]`); } session.processingMessageIds = []; await syncAndBroadcastObservations(observations, result, session, dbManager, worker, discoveryTokens, agentName, projectRoot); await syncAndBroadcastSummary(summary, summaryForStore, result, session, dbManager, worker, discoveryTokens, agentName); cleanupProcessedMessages(session, worker); } function normalizeSummaryForStorage(summary) { if (!summary) return null; return { request: summary.request || "", investigated: summary.investigated || "", learned: summary.learned || "", completed: summary.completed || "", next_steps: summary.next_steps || "", notes: summary.notes }; } async function syncAndBroadcastObservations(observations, result, session, dbManager, worker, discoveryTokens, agentName, projectRoot) { for (let i = 0;i < observations.length; i++) { const obsId = result.observationIds[i]; const obs = observations[i]; const chromaStart = Date.now(); dbManager.getChromaSync()?.syncObservation(obsId, session.contentSessionId, session.project, obs, session.lastPromptNumber, result.createdAtEpoch, discoveryTokens).then(() => { const chromaDuration = Date.now() - chromaStart; logger.debug("CHROMA", "Observation synced", { obsId, duration: `${chromaDuration}ms`, type: obs.type, title: obs.title || "(untitled)" }); }).catch((error2) => { logger.error("CHROMA", `${agentName} chroma sync failed, continuing without vector search`, { obsId, type: obs.type, title: obs.title || "(untitled)" }, error2); }); broadcastObservation(worker, { id: obsId, memory_session_id: session.memorySessionId, session_id: session.contentSessionId, type: obs.type, title: obs.title, subtitle: obs.subtitle, text: null, narrative: obs.narrative || null, facts: JSON.stringify(obs.facts || []), concepts: JSON.stringify(obs.concepts || []), files_read: JSON.stringify(obs.files_read || []), files_modified: JSON.stringify(obs.files_modified || []), project: session.project, prompt_number: session.lastPromptNumber, created_at_epoch: result.createdAtEpoch }); } const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const settingValue = settings.CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED; const folderClaudeMdEnabled = settingValue === "true" || settingValue === true; if (folderClaudeMdEnabled) { const allFilePaths = []; for (const obs of observations) { allFilePaths.push(...obs.files_modified || []); allFilePaths.push(...obs.files_read || []); } if (allFilePaths.length > 0) { updateFolderClaudeMdFiles(allFilePaths, session.project, getWorkerPort(), projectRoot).catch((error2) => { logger.warn("FOLDER_INDEX", "CLAUDE.md update failed (non-critical)", { project: session.project }, error2); }); } } } async function syncAndBroadcastSummary(summary, summaryForStore, result, session, dbManager, worker, discoveryTokens, agentName) { if (!summaryForStore || !result.summaryId) { return; } const chromaStart = Date.now(); dbManager.getChromaSync()?.syncSummary(result.summaryId, session.contentSessionId, session.project, summaryForStore, session.lastPromptNumber, result.createdAtEpoch, discoveryTokens).then(() => { const chromaDuration = Date.now() - chromaStart; logger.debug("CHROMA", "Summary synced", { summaryId: result.summaryId, duration: `${chromaDuration}ms`, request: summaryForStore.request || "(no request)" }); }).catch((error2) => { logger.error("CHROMA", `${agentName} chroma sync failed, continuing without vector search`, { summaryId: result.summaryId, request: summaryForStore.request || "(no request)" }, error2); }); broadcastSummary(worker, { id: result.summaryId, session_id: session.contentSessionId, request: summary.request, investigated: summary.investigated, learned: summary.learned, completed: summary.completed, next_steps: summary.next_steps, notes: summary.notes, project: session.project, prompt_number: session.lastPromptNumber, created_at_epoch: result.createdAtEpoch }); updateCursorContextForProject(session.project, getWorkerPort()).catch((error2) => { logger.warn("CURSOR", "Context update failed (non-critical)", { project: session.project }, error2); }); } // src/services/worker/agents/FallbackErrorHandler.ts function shouldFallbackToClaude(error2) { const message = getErrorMessage(error2); return FALLBACK_ERROR_PATTERNS.some((pattern) => message.includes(pattern)); } function getErrorMessage(error2) { if (error2 === null || error2 === undefined) { return ""; } if (typeof error2 === "string") { return error2; } if (error2 instanceof Error) { return error2.message; } if (typeof error2 === "object" && "message" in error2) { return String(error2.message); } return String(error2); } function isAbortError(error2) { if (error2 === null || error2 === undefined) { return false; } if (error2 instanceof Error && error2.name === "AbortError") { return true; } if (typeof error2 === "object" && "name" in error2) { return error2.name === "AbortError"; } return false; } // node_modules/@anthropic-ai/claude-agent-sdk/sdk.mjs import { join as join52 } from "path"; import { fileURLToPath as fileURLToPath2 } from "url"; import { setMaxListeners } from "events"; import { spawn as spawn4 } from "child_process"; import { createInterface } from "readline"; import * as fs3 from "fs"; import { stat as statPromise, open } from "fs/promises"; import { join as join8 } from "path"; import { homedir as homedir11 } from "os"; import { dirname as dirname4, join as join22 } from "path"; import { cwd } from "process"; import { realpathSync as realpathSync2 } from "fs"; import { randomUUID } from "crypto"; import { randomUUID as randomUUID2 } from "crypto"; import { appendFileSync as appendFileSync22, existsSync as existsSync22, mkdirSync as mkdirSync22 } from "fs"; import { join as join32 } from "path"; import { randomUUID as randomUUID3 } from "crypto"; var __create2 = Object.create; var __getProtoOf2 = Object.getPrototypeOf; var __defProp2 = Object.defineProperty; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __hasOwnProp2 = Object.prototype.hasOwnProperty; var __toESM2 = (mod, isNodeMode, target) => { target = mod != null ? __create2(__getProtoOf2(mod)) : {}; const to = isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target; for (let key of __getOwnPropNames2(mod)) if (!__hasOwnProp2.call(to, key)) __defProp2(to, key, { get: () => mod[key], enumerable: true }); return to; }; var __commonJS2 = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports); var __export2 = (target, all) => { for (var name in all) __defProp2(target, name, { get: all[name], enumerable: true, configurable: true, set: (newValue) => all[name] = () => newValue }); }; var require_code3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = undefined; class _CodeOrName { } exports._CodeOrName = _CodeOrName; exports.IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i; class Name extends _CodeOrName { constructor(s) { super(); if (!exports.IDENTIFIER.test(s)) throw new Error("CodeGen: name must be a valid identifier"); this.str = s; } toString() { return this.str; } emptyStr() { return false; } get names() { return { [this.str]: 1 }; } } exports.Name = Name; class _Code extends _CodeOrName { constructor(code) { super(); this._items = typeof code === "string" ? [code] : code; } toString() { return this.str; } emptyStr() { if (this._items.length > 1) return false; const item = this._items[0]; return item === "" || item === '""'; } get str() { var _a2; return (_a2 = this._str) !== null && _a2 !== undefined ? _a2 : this._str = this._items.reduce((s, c) => `${s}${c}`, ""); } get names() { var _a2; return (_a2 = this._names) !== null && _a2 !== undefined ? _a2 : this._names = this._items.reduce((names, c) => { if (c instanceof Name) names[c.str] = (names[c.str] || 0) + 1; return names; }, {}); } } exports._Code = _Code; exports.nil = new _Code(""); function _(strs, ...args) { const code = [strs[0]]; let i = 0; while (i < args.length) { addCodeArg(code, args[i]); code.push(strs[++i]); } return new _Code(code); } exports._ = _; var plus = new _Code("+"); function str(strs, ...args) { const expr = [safeStringify(strs[0])]; let i = 0; while (i < args.length) { expr.push(plus); addCodeArg(expr, args[i]); expr.push(plus, safeStringify(strs[++i])); } optimize(expr); return new _Code(expr); } exports.str = str; function addCodeArg(code, arg) { if (arg instanceof _Code) code.push(...arg._items); else if (arg instanceof Name) code.push(arg); else code.push(interpolate(arg)); } exports.addCodeArg = addCodeArg; function optimize(expr) { let i = 1; while (i < expr.length - 1) { if (expr[i] === plus) { const res = mergeExprItems(expr[i - 1], expr[i + 1]); if (res !== undefined) { expr.splice(i - 1, 3, res); continue; } expr[i++] = "+"; } i++; } } function mergeExprItems(a, b) { if (b === '""') return a; if (a === '""') return b; if (typeof a == "string") { if (b instanceof Name || a[a.length - 1] !== '"') return; if (typeof b != "string") return `${a.slice(0, -1)}${b}"`; if (b[0] === '"') return a.slice(0, -1) + b.slice(1); return; } if (typeof b == "string" && b[0] === '"' && !(a instanceof Name)) return `"${a}${b.slice(1)}`; return; } function strConcat(c1, c2) { return c2.emptyStr() ? c1 : c1.emptyStr() ? c2 : str`${c1}${c2}`; } exports.strConcat = strConcat; function interpolate(x) { return typeof x == "number" || typeof x == "boolean" || x === null ? x : safeStringify(Array.isArray(x) ? x.join(",") : x); } function stringify(x) { return new _Code(safeStringify(x)); } exports.stringify = stringify; function safeStringify(x) { return JSON.stringify(x).replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029"); } exports.safeStringify = safeStringify; function getProperty(key) { return typeof key == "string" && exports.IDENTIFIER.test(key) ? new _Code(`.${key}`) : _`[${key}]`; } exports.getProperty = getProperty; function getEsmExportName(key) { if (typeof key == "string" && exports.IDENTIFIER.test(key)) { return new _Code(`${key}`); } throw new Error(`CodeGen: invalid export name: ${key}, use explicit $id name mapping`); } exports.getEsmExportName = getEsmExportName; function regexpCode(rx) { return new _Code(rx.toString()); } exports.regexpCode = regexpCode; }); var require_scope2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueScope = exports.ValueScopeName = exports.Scope = exports.varKinds = exports.UsedValueState = undefined; var code_1 = require_code3(); class ValueError extends Error { constructor(name) { super(`CodeGen: "code" for ${name} not defined`); this.value = name.value; } } var UsedValueState; (function(UsedValueState2) { UsedValueState2[UsedValueState2["Started"] = 0] = "Started"; UsedValueState2[UsedValueState2["Completed"] = 1] = "Completed"; })(UsedValueState || (exports.UsedValueState = UsedValueState = {})); exports.varKinds = { const: new code_1.Name("const"), let: new code_1.Name("let"), var: new code_1.Name("var") }; class Scope { constructor({ prefixes, parent } = {}) { this._names = {}; this._prefixes = prefixes; this._parent = parent; } toName(nameOrPrefix) { return nameOrPrefix instanceof code_1.Name ? nameOrPrefix : this.name(nameOrPrefix); } name(prefix) { return new code_1.Name(this._newName(prefix)); } _newName(prefix) { const ng = this._names[prefix] || this._nameGroup(prefix); return `${prefix}${ng.index++}`; } _nameGroup(prefix) { var _a2, _b; if (((_b = (_a2 = this._parent) === null || _a2 === undefined ? undefined : _a2._prefixes) === null || _b === undefined ? undefined : _b.has(prefix)) || this._prefixes && !this._prefixes.has(prefix)) { throw new Error(`CodeGen: prefix "${prefix}" is not allowed in this scope`); } return this._names[prefix] = { prefix, index: 0 }; } } exports.Scope = Scope; class ValueScopeName extends code_1.Name { constructor(prefix, nameStr) { super(nameStr); this.prefix = prefix; } setValue(value, { property, itemIndex }) { this.value = value; this.scopePath = (0, code_1._)`.${new code_1.Name(property)}[${itemIndex}]`; } } exports.ValueScopeName = ValueScopeName; var line = (0, code_1._)`\n`; class ValueScope extends Scope { constructor(opts) { super(opts); this._values = {}; this._scope = opts.scope; this.opts = { ...opts, _n: opts.lines ? line : code_1.nil }; } get() { return this._scope; } name(prefix) { return new ValueScopeName(prefix, this._newName(prefix)); } value(nameOrPrefix, value) { var _a2; if (value.ref === undefined) throw new Error("CodeGen: ref must be passed in value"); const name = this.toName(nameOrPrefix); const { prefix } = name; const valueKey = (_a2 = value.key) !== null && _a2 !== undefined ? _a2 : value.ref; let vs = this._values[prefix]; if (vs) { const _name = vs.get(valueKey); if (_name) return _name; } else { vs = this._values[prefix] = new Map; } vs.set(valueKey, name); const s = this._scope[prefix] || (this._scope[prefix] = []); const itemIndex = s.length; s[itemIndex] = value.ref; name.setValue(value, { property: prefix, itemIndex }); return name; } getValue(prefix, keyOrRef) { const vs = this._values[prefix]; if (!vs) return; return vs.get(keyOrRef); } scopeRefs(scopeName, values = this._values) { return this._reduceValues(values, (name) => { if (name.scopePath === undefined) throw new Error(`CodeGen: name "${name}" has no value`); return (0, code_1._)`${scopeName}${name.scopePath}`; }); } scopeCode(values = this._values, usedValues, getCode) { return this._reduceValues(values, (name) => { if (name.value === undefined) throw new Error(`CodeGen: name "${name}" has no value`); return name.value.code; }, usedValues, getCode); } _reduceValues(values, valueCode, usedValues = {}, getCode) { let code = code_1.nil; for (const prefix in values) { const vs = values[prefix]; if (!vs) continue; const nameSet = usedValues[prefix] = usedValues[prefix] || new Map; vs.forEach((name) => { if (nameSet.has(name)) return; nameSet.set(name, UsedValueState.Started); let c = valueCode(name); if (c) { const def = this.opts.es5 ? exports.varKinds.var : exports.varKinds.const; code = (0, code_1._)`${code}${def} ${name} = ${c};${this.opts._n}`; } else if (c = getCode === null || getCode === undefined ? undefined : getCode(name)) { code = (0, code_1._)`${code}${c}${this.opts._n}`; } else { throw new ValueError(name); } nameSet.set(name, UsedValueState.Completed); }); } return code; } } exports.ValueScope = ValueScope; }); var require_codegen2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.or = exports.and = exports.not = exports.CodeGen = exports.operators = exports.varKinds = exports.ValueScopeName = exports.ValueScope = exports.Scope = exports.Name = exports.regexpCode = exports.stringify = exports.getProperty = exports.nil = exports.strConcat = exports.str = exports._ = undefined; var code_1 = require_code3(); var scope_1 = require_scope2(); var code_2 = require_code3(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return code_2._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return code_2.str; } }); Object.defineProperty(exports, "strConcat", { enumerable: true, get: function() { return code_2.strConcat; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return code_2.nil; } }); Object.defineProperty(exports, "getProperty", { enumerable: true, get: function() { return code_2.getProperty; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return code_2.stringify; } }); Object.defineProperty(exports, "regexpCode", { enumerable: true, get: function() { return code_2.regexpCode; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return code_2.Name; } }); var scope_2 = require_scope2(); Object.defineProperty(exports, "Scope", { enumerable: true, get: function() { return scope_2.Scope; } }); Object.defineProperty(exports, "ValueScope", { enumerable: true, get: function() { return scope_2.ValueScope; } }); Object.defineProperty(exports, "ValueScopeName", { enumerable: true, get: function() { return scope_2.ValueScopeName; } }); Object.defineProperty(exports, "varKinds", { enumerable: true, get: function() { return scope_2.varKinds; } }); exports.operators = { GT: new code_1._Code(">"), GTE: new code_1._Code(">="), LT: new code_1._Code("<"), LTE: new code_1._Code("<="), EQ: new code_1._Code("==="), NEQ: new code_1._Code("!=="), NOT: new code_1._Code("!"), OR: new code_1._Code("||"), AND: new code_1._Code("&&"), ADD: new code_1._Code("+") }; class Node { optimizeNodes() { return this; } optimizeNames(_names, _constants) { return this; } } class Def extends Node { constructor(varKind, name, rhs) { super(); this.varKind = varKind; this.name = name; this.rhs = rhs; } render({ es5, _n }) { const varKind = es5 ? scope_1.varKinds.var : this.varKind; const rhs = this.rhs === undefined ? "" : ` = ${this.rhs}`; return `${varKind} ${this.name}${rhs};` + _n; } optimizeNames(names, constants) { if (!names[this.name.str]) return; if (this.rhs) this.rhs = optimizeExpr(this.rhs, names, constants); return this; } get names() { return this.rhs instanceof code_1._CodeOrName ? this.rhs.names : {}; } } class Assign extends Node { constructor(lhs, rhs, sideEffects) { super(); this.lhs = lhs; this.rhs = rhs; this.sideEffects = sideEffects; } render({ _n }) { return `${this.lhs} = ${this.rhs};` + _n; } optimizeNames(names, constants) { if (this.lhs instanceof code_1.Name && !names[this.lhs.str] && !this.sideEffects) return; this.rhs = optimizeExpr(this.rhs, names, constants); return this; } get names() { const names = this.lhs instanceof code_1.Name ? {} : { ...this.lhs.names }; return addExprNames(names, this.rhs); } } class AssignOp extends Assign { constructor(lhs, op, rhs, sideEffects) { super(lhs, rhs, sideEffects); this.op = op; } render({ _n }) { return `${this.lhs} ${this.op}= ${this.rhs};` + _n; } } class Label extends Node { constructor(label) { super(); this.label = label; this.names = {}; } render({ _n }) { return `${this.label}:` + _n; } } class Break extends Node { constructor(label) { super(); this.label = label; this.names = {}; } render({ _n }) { const label = this.label ? ` ${this.label}` : ""; return `break${label};` + _n; } } class Throw extends Node { constructor(error2) { super(); this.error = error2; } render({ _n }) { return `throw ${this.error};` + _n; } get names() { return this.error.names; } } class AnyCode extends Node { constructor(code) { super(); this.code = code; } render({ _n }) { return `${this.code};` + _n; } optimizeNodes() { return `${this.code}` ? this : undefined; } optimizeNames(names, constants) { this.code = optimizeExpr(this.code, names, constants); return this; } get names() { return this.code instanceof code_1._CodeOrName ? this.code.names : {}; } } class ParentNode extends Node { constructor(nodes = []) { super(); this.nodes = nodes; } render(opts) { return this.nodes.reduce((code, n) => code + n.render(opts), ""); } optimizeNodes() { const { nodes } = this; let i = nodes.length; while (i--) { const n = nodes[i].optimizeNodes(); if (Array.isArray(n)) nodes.splice(i, 1, ...n); else if (n) nodes[i] = n; else nodes.splice(i, 1); } return nodes.length > 0 ? this : undefined; } optimizeNames(names, constants) { const { nodes } = this; let i = nodes.length; while (i--) { const n = nodes[i]; if (n.optimizeNames(names, constants)) continue; subtractNames(names, n.names); nodes.splice(i, 1); } return nodes.length > 0 ? this : undefined; } get names() { return this.nodes.reduce((names, n) => addNames(names, n.names), {}); } } class BlockNode extends ParentNode { render(opts) { return "{" + opts._n + super.render(opts) + "}" + opts._n; } } class Root extends ParentNode { } class Else extends BlockNode { } Else.kind = "else"; class If extends BlockNode { constructor(condition, nodes) { super(nodes); this.condition = condition; } render(opts) { let code = `if(${this.condition})` + super.render(opts); if (this.else) code += "else " + this.else.render(opts); return code; } optimizeNodes() { super.optimizeNodes(); const cond = this.condition; if (cond === true) return this.nodes; let e = this.else; if (e) { const ns = e.optimizeNodes(); e = this.else = Array.isArray(ns) ? new Else(ns) : ns; } if (e) { if (cond === false) return e instanceof If ? e : e.nodes; if (this.nodes.length) return this; return new If(not(cond), e instanceof If ? [e] : e.nodes); } if (cond === false || !this.nodes.length) return; return this; } optimizeNames(names, constants) { var _a2; this.else = (_a2 = this.else) === null || _a2 === undefined ? undefined : _a2.optimizeNames(names, constants); if (!(super.optimizeNames(names, constants) || this.else)) return; this.condition = optimizeExpr(this.condition, names, constants); return this; } get names() { const names = super.names; addExprNames(names, this.condition); if (this.else) addNames(names, this.else.names); return names; } } If.kind = "if"; class For extends BlockNode { } For.kind = "for"; class ForLoop extends For { constructor(iteration) { super(); this.iteration = iteration; } render(opts) { return `for(${this.iteration})` + super.render(opts); } optimizeNames(names, constants) { if (!super.optimizeNames(names, constants)) return; this.iteration = optimizeExpr(this.iteration, names, constants); return this; } get names() { return addNames(super.names, this.iteration.names); } } class ForRange extends For { constructor(varKind, name, from, to) { super(); this.varKind = varKind; this.name = name; this.from = from; this.to = to; } render(opts) { const varKind = opts.es5 ? scope_1.varKinds.var : this.varKind; const { name, from, to } = this; return `for(${varKind} ${name}=${from}; ${name}<${to}; ${name}++)` + super.render(opts); } get names() { const names = addExprNames(super.names, this.from); return addExprNames(names, this.to); } } class ForIter extends For { constructor(loop, varKind, name, iterable) { super(); this.loop = loop; this.varKind = varKind; this.name = name; this.iterable = iterable; } render(opts) { return `for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})` + super.render(opts); } optimizeNames(names, constants) { if (!super.optimizeNames(names, constants)) return; this.iterable = optimizeExpr(this.iterable, names, constants); return this; } get names() { return addNames(super.names, this.iterable.names); } } class Func extends BlockNode { constructor(name, args, async) { super(); this.name = name; this.args = args; this.async = async; } render(opts) { const _async = this.async ? "async " : ""; return `${_async}function ${this.name}(${this.args})` + super.render(opts); } } Func.kind = "func"; class Return extends ParentNode { render(opts) { return "return " + super.render(opts); } } Return.kind = "return"; class Try extends BlockNode { render(opts) { let code = "try" + super.render(opts); if (this.catch) code += this.catch.render(opts); if (this.finally) code += this.finally.render(opts); return code; } optimizeNodes() { var _a2, _b; super.optimizeNodes(); (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNodes(); (_b = this.finally) === null || _b === undefined || _b.optimizeNodes(); return this; } optimizeNames(names, constants) { var _a2, _b; super.optimizeNames(names, constants); (_a2 = this.catch) === null || _a2 === undefined || _a2.optimizeNames(names, constants); (_b = this.finally) === null || _b === undefined || _b.optimizeNames(names, constants); return this; } get names() { const names = super.names; if (this.catch) addNames(names, this.catch.names); if (this.finally) addNames(names, this.finally.names); return names; } } class Catch extends BlockNode { constructor(error2) { super(); this.error = error2; } render(opts) { return `catch(${this.error})` + super.render(opts); } } Catch.kind = "catch"; class Finally extends BlockNode { render(opts) { return "finally" + super.render(opts); } } Finally.kind = "finally"; class CodeGen { constructor(extScope, opts = {}) { this._values = {}; this._blockStarts = []; this._constants = {}; this.opts = { ...opts, _n: opts.lines ? ` ` : "" }; this._extScope = extScope; this._scope = new scope_1.Scope({ parent: extScope }); this._nodes = [new Root]; } toString() { return this._root.render(this.opts); } name(prefix) { return this._scope.name(prefix); } scopeName(prefix) { return this._extScope.name(prefix); } scopeValue(prefixOrName, value) { const name = this._extScope.value(prefixOrName, value); const vs = this._values[name.prefix] || (this._values[name.prefix] = new Set); vs.add(name); return name; } getScopeValue(prefix, keyOrRef) { return this._extScope.getValue(prefix, keyOrRef); } scopeRefs(scopeName) { return this._extScope.scopeRefs(scopeName, this._values); } scopeCode() { return this._extScope.scopeCode(this._values); } _def(varKind, nameOrPrefix, rhs, constant) { const name = this._scope.toName(nameOrPrefix); if (rhs !== undefined && constant) this._constants[name.str] = rhs; this._leafNode(new Def(varKind, name, rhs)); return name; } const(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.const, nameOrPrefix, rhs, _constant); } let(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.let, nameOrPrefix, rhs, _constant); } var(nameOrPrefix, rhs, _constant) { return this._def(scope_1.varKinds.var, nameOrPrefix, rhs, _constant); } assign(lhs, rhs, sideEffects) { return this._leafNode(new Assign(lhs, rhs, sideEffects)); } add(lhs, rhs) { return this._leafNode(new AssignOp(lhs, exports.operators.ADD, rhs)); } code(c) { if (typeof c == "function") c(); else if (c !== code_1.nil) this._leafNode(new AnyCode(c)); return this; } object(...keyValues) { const code = ["{"]; for (const [key, value] of keyValues) { if (code.length > 1) code.push(","); code.push(key); if (key !== value || this.opts.es5) { code.push(":"); (0, code_1.addCodeArg)(code, value); } } code.push("}"); return new code_1._Code(code); } if(condition, thenBody, elseBody) { this._blockNode(new If(condition)); if (thenBody && elseBody) { this.code(thenBody).else().code(elseBody).endIf(); } else if (thenBody) { this.code(thenBody).endIf(); } else if (elseBody) { throw new Error('CodeGen: "else" body without "then" body'); } return this; } elseIf(condition) { return this._elseNode(new If(condition)); } else() { return this._elseNode(new Else); } endIf() { return this._endBlockNode(If, Else); } _for(node, forBody) { this._blockNode(node); if (forBody) this.code(forBody).endFor(); return this; } for(iteration, forBody) { return this._for(new ForLoop(iteration), forBody); } forRange(nameOrPrefix, from, to, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.let) { const name = this._scope.toName(nameOrPrefix); return this._for(new ForRange(varKind, name, from, to), () => forBody(name)); } forOf(nameOrPrefix, iterable, forBody, varKind = scope_1.varKinds.const) { const name = this._scope.toName(nameOrPrefix); if (this.opts.es5) { const arr = iterable instanceof code_1.Name ? iterable : this.var("_arr", iterable); return this.forRange("_i", 0, (0, code_1._)`${arr}.length`, (i) => { this.var(name, (0, code_1._)`${arr}[${i}]`); forBody(name); }); } return this._for(new ForIter("of", varKind, name, iterable), () => forBody(name)); } forIn(nameOrPrefix, obj, forBody, varKind = this.opts.es5 ? scope_1.varKinds.var : scope_1.varKinds.const) { if (this.opts.ownProperties) { return this.forOf(nameOrPrefix, (0, code_1._)`Object.keys(${obj})`, forBody); } const name = this._scope.toName(nameOrPrefix); return this._for(new ForIter("in", varKind, name, obj), () => forBody(name)); } endFor() { return this._endBlockNode(For); } label(label) { return this._leafNode(new Label(label)); } break(label) { return this._leafNode(new Break(label)); } return(value) { const node = new Return; this._blockNode(node); this.code(value); if (node.nodes.length !== 1) throw new Error('CodeGen: "return" should have one node'); return this._endBlockNode(Return); } try(tryBody, catchCode, finallyCode) { if (!catchCode && !finallyCode) throw new Error('CodeGen: "try" without "catch" and "finally"'); const node = new Try; this._blockNode(node); this.code(tryBody); if (catchCode) { const error2 = this.name("e"); this._currNode = node.catch = new Catch(error2); catchCode(error2); } if (finallyCode) { this._currNode = node.finally = new Finally; this.code(finallyCode); } return this._endBlockNode(Catch, Finally); } throw(error2) { return this._leafNode(new Throw(error2)); } block(body, nodeCount) { this._blockStarts.push(this._nodes.length); if (body) this.code(body).endBlock(nodeCount); return this; } endBlock(nodeCount) { const len = this._blockStarts.pop(); if (len === undefined) throw new Error("CodeGen: not in self-balancing block"); const toClose = this._nodes.length - len; if (toClose < 0 || nodeCount !== undefined && toClose !== nodeCount) { throw new Error(`CodeGen: wrong number of nodes: ${toClose} vs ${nodeCount} expected`); } this._nodes.length = len; return this; } func(name, args = code_1.nil, async, funcBody) { this._blockNode(new Func(name, args, async)); if (funcBody) this.code(funcBody).endFunc(); return this; } endFunc() { return this._endBlockNode(Func); } optimize(n = 1) { while (n-- > 0) { this._root.optimizeNodes(); this._root.optimizeNames(this._root.names, this._constants); } } _leafNode(node) { this._currNode.nodes.push(node); return this; } _blockNode(node) { this._currNode.nodes.push(node); this._nodes.push(node); } _endBlockNode(N1, N2) { const n = this._currNode; if (n instanceof N1 || N2 && n instanceof N2) { this._nodes.pop(); return this; } throw new Error(`CodeGen: not in block "${N2 ? `${N1.kind}/${N2.kind}` : N1.kind}"`); } _elseNode(node) { const n = this._currNode; if (!(n instanceof If)) { throw new Error('CodeGen: "else" without "if"'); } this._currNode = n.else = node; return this; } get _root() { return this._nodes[0]; } get _currNode() { const ns = this._nodes; return ns[ns.length - 1]; } set _currNode(node) { const ns = this._nodes; ns[ns.length - 1] = node; } } exports.CodeGen = CodeGen; function addNames(names, from) { for (const n in from) names[n] = (names[n] || 0) + (from[n] || 0); return names; } function addExprNames(names, from) { return from instanceof code_1._CodeOrName ? addNames(names, from.names) : names; } function optimizeExpr(expr, names, constants) { if (expr instanceof code_1.Name) return replaceName(expr); if (!canOptimize(expr)) return expr; return new code_1._Code(expr._items.reduce((items, c) => { if (c instanceof code_1.Name) c = replaceName(c); if (c instanceof code_1._Code) items.push(...c._items); else items.push(c); return items; }, [])); function replaceName(n) { const c = constants[n.str]; if (c === undefined || names[n.str] !== 1) return n; delete names[n.str]; return c; } function canOptimize(e) { return e instanceof code_1._Code && e._items.some((c) => c instanceof code_1.Name && names[c.str] === 1 && constants[c.str] !== undefined); } } function subtractNames(names, from) { for (const n in from) names[n] = (names[n] || 0) - (from[n] || 0); } function not(x) { return typeof x == "boolean" || typeof x == "number" || x === null ? !x : (0, code_1._)`!${par(x)}`; } exports.not = not; var andCode = mappend(exports.operators.AND); function and(...args) { return args.reduce(andCode); } exports.and = and; var orCode = mappend(exports.operators.OR); function or(...args) { return args.reduce(orCode); } exports.or = or; function mappend(op) { return (x, y) => x === code_1.nil ? y : y === code_1.nil ? x : (0, code_1._)`${par(x)} ${op} ${par(y)}`; } function par(x) { return x instanceof code_1.Name ? x : (0, code_1._)`(${x})`; } }); var require_util2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.checkStrictMode = exports.getErrorPath = exports.Type = exports.useFunc = exports.setEvaluated = exports.evaluatedPropsToName = exports.mergeEvaluated = exports.eachItem = exports.unescapeJsonPointer = exports.escapeJsonPointer = exports.escapeFragment = exports.unescapeFragment = exports.schemaRefOrVal = exports.schemaHasRulesButRef = exports.schemaHasRules = exports.checkUnknownRules = exports.alwaysValidSchema = exports.toHash = undefined; var codegen_1 = require_codegen2(); var code_1 = require_code3(); function toHash(arr) { const hash = {}; for (const item of arr) hash[item] = true; return hash; } exports.toHash = toHash; function alwaysValidSchema(it, schema) { if (typeof schema == "boolean") return schema; if (Object.keys(schema).length === 0) return true; checkUnknownRules(it, schema); return !schemaHasRules(schema, it.self.RULES.all); } exports.alwaysValidSchema = alwaysValidSchema; function checkUnknownRules(it, schema = it.schema) { const { opts, self: self2 } = it; if (!opts.strictSchema) return; if (typeof schema === "boolean") return; const rules = self2.RULES.keywords; for (const key in schema) { if (!rules[key]) checkStrictMode(it, `unknown keyword: "${key}"`); } } exports.checkUnknownRules = checkUnknownRules; function schemaHasRules(schema, rules) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (rules[key]) return true; return false; } exports.schemaHasRules = schemaHasRules; function schemaHasRulesButRef(schema, RULES) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (key !== "$ref" && RULES.all[key]) return true; return false; } exports.schemaHasRulesButRef = schemaHasRulesButRef; function schemaRefOrVal({ topSchemaRef, schemaPath }, schema, keyword, $data) { if (!$data) { if (typeof schema == "number" || typeof schema == "boolean") return schema; if (typeof schema == "string") return (0, codegen_1._)`${schema}`; } return (0, codegen_1._)`${topSchemaRef}${schemaPath}${(0, codegen_1.getProperty)(keyword)}`; } exports.schemaRefOrVal = schemaRefOrVal; function unescapeFragment(str) { return unescapeJsonPointer(decodeURIComponent(str)); } exports.unescapeFragment = unescapeFragment; function escapeFragment(str) { return encodeURIComponent(escapeJsonPointer(str)); } exports.escapeFragment = escapeFragment; function escapeJsonPointer(str) { if (typeof str == "number") return `${str}`; return str.replace(/~/g, "~0").replace(/\//g, "~1"); } exports.escapeJsonPointer = escapeJsonPointer; function unescapeJsonPointer(str) { return str.replace(/~1/g, "/").replace(/~0/g, "~"); } exports.unescapeJsonPointer = unescapeJsonPointer; function eachItem(xs, f) { if (Array.isArray(xs)) { for (const x of xs) f(x); } else { f(xs); } } exports.eachItem = eachItem; function makeMergeEvaluated({ mergeNames, mergeToName, mergeValues: mergeValues3, resultToName }) { return (gen, from, to, toName) => { const res = to === undefined ? from : to instanceof codegen_1.Name ? (from instanceof codegen_1.Name ? mergeNames(gen, from, to) : mergeToName(gen, from, to), to) : from instanceof codegen_1.Name ? (mergeToName(gen, to, from), from) : mergeValues3(from, to); return toName === codegen_1.Name && !(res instanceof codegen_1.Name) ? resultToName(gen, res) : res; }; } exports.mergeEvaluated = { props: makeMergeEvaluated({ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => { gen.if((0, codegen_1._)`${from} === true`, () => gen.assign(to, true), () => gen.assign(to, (0, codegen_1._)`${to} || {}`).code((0, codegen_1._)`Object.assign(${to}, ${from})`)); }), mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => { if (from === true) { gen.assign(to, true); } else { gen.assign(to, (0, codegen_1._)`${to} || {}`); setEvaluated(gen, to, from); } }), mergeValues: (from, to) => from === true ? true : { ...from, ...to }, resultToName: evaluatedPropsToName }), items: makeMergeEvaluated({ mergeNames: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true && ${from} !== undefined`, () => gen.assign(to, (0, codegen_1._)`${from} === true ? true : ${to} > ${from} ? ${to} : ${from}`)), mergeToName: (gen, from, to) => gen.if((0, codegen_1._)`${to} !== true`, () => gen.assign(to, from === true ? true : (0, codegen_1._)`${to} > ${from} ? ${to} : ${from}`)), mergeValues: (from, to) => from === true ? true : Math.max(from, to), resultToName: (gen, items) => gen.var("items", items) }) }; function evaluatedPropsToName(gen, ps) { if (ps === true) return gen.var("props", true); const props = gen.var("props", (0, codegen_1._)`{}`); if (ps !== undefined) setEvaluated(gen, props, ps); return props; } exports.evaluatedPropsToName = evaluatedPropsToName; function setEvaluated(gen, props, ps) { Object.keys(ps).forEach((p) => gen.assign((0, codegen_1._)`${props}${(0, codegen_1.getProperty)(p)}`, true)); } exports.setEvaluated = setEvaluated; var snippets = {}; function useFunc(gen, f) { return gen.scopeValue("func", { ref: f, code: snippets[f.code] || (snippets[f.code] = new code_1._Code(f.code)) }); } exports.useFunc = useFunc; var Type; (function(Type2) { Type2[Type2["Num"] = 0] = "Num"; Type2[Type2["Str"] = 1] = "Str"; })(Type || (exports.Type = Type = {})); function getErrorPath(dataProp, dataPropType, jsPropertySyntax) { if (dataProp instanceof codegen_1.Name) { const isNumber = dataPropType === Type.Num; return jsPropertySyntax ? isNumber ? (0, codegen_1._)`"[" + ${dataProp} + "]"` : (0, codegen_1._)`"['" + ${dataProp} + "']"` : isNumber ? (0, codegen_1._)`"/" + ${dataProp}` : (0, codegen_1._)`"/" + ${dataProp}.replace(/~/g, "~0").replace(/\\//g, "~1")`; } return jsPropertySyntax ? (0, codegen_1.getProperty)(dataProp).toString() : "/" + escapeJsonPointer(dataProp); } exports.getErrorPath = getErrorPath; function checkStrictMode(it, msg, mode = it.opts.strictSchema) { if (!mode) return; msg = `strict mode: ${msg}`; if (mode === true) throw new Error(msg); it.self.logger.warn(msg); } exports.checkStrictMode = checkStrictMode; }); var require_names2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var names = { data: new codegen_1.Name("data"), valCxt: new codegen_1.Name("valCxt"), instancePath: new codegen_1.Name("instancePath"), parentData: new codegen_1.Name("parentData"), parentDataProperty: new codegen_1.Name("parentDataProperty"), rootData: new codegen_1.Name("rootData"), dynamicAnchors: new codegen_1.Name("dynamicAnchors"), vErrors: new codegen_1.Name("vErrors"), errors: new codegen_1.Name("errors"), this: new codegen_1.Name("this"), self: new codegen_1.Name("self"), scope: new codegen_1.Name("scope"), json: new codegen_1.Name("json"), jsonPos: new codegen_1.Name("jsonPos"), jsonLen: new codegen_1.Name("jsonLen"), jsonPart: new codegen_1.Name("jsonPart") }; exports.default = names; }); var require_errors2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendErrors = exports.resetErrorsCount = exports.reportExtraError = exports.reportError = exports.keyword$DataError = exports.keywordError = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); var names_1 = require_names2(); exports.keywordError = { message: ({ keyword }) => (0, codegen_1.str)`must pass "${keyword}" keyword validation` }; exports.keyword$DataError = { message: ({ keyword, schemaType }) => schemaType ? (0, codegen_1.str)`"${keyword}" keyword must be ${schemaType} ($data)` : (0, codegen_1.str)`"${keyword}" keyword is invalid ($data)` }; function reportError(cxt, error2 = exports.keywordError, errorPaths, overrideAllErrors) { const { it } = cxt; const { gen, compositeRule, allErrors } = it; const errObj = errorObjectCode(cxt, error2, errorPaths); if (overrideAllErrors !== null && overrideAllErrors !== undefined ? overrideAllErrors : compositeRule || allErrors) { addError(gen, errObj); } else { returnErrors(it, (0, codegen_1._)`[${errObj}]`); } } exports.reportError = reportError; function reportExtraError(cxt, error2 = exports.keywordError, errorPaths) { const { it } = cxt; const { gen, compositeRule, allErrors } = it; const errObj = errorObjectCode(cxt, error2, errorPaths); addError(gen, errObj); if (!(compositeRule || allErrors)) { returnErrors(it, names_1.default.vErrors); } } exports.reportExtraError = reportExtraError; function resetErrorsCount(gen, errsCount) { gen.assign(names_1.default.errors, errsCount); gen.if((0, codegen_1._)`${names_1.default.vErrors} !== null`, () => gen.if(errsCount, () => gen.assign((0, codegen_1._)`${names_1.default.vErrors}.length`, errsCount), () => gen.assign(names_1.default.vErrors, null))); } exports.resetErrorsCount = resetErrorsCount; function extendErrors({ gen, keyword, schemaValue, data, errsCount, it }) { if (errsCount === undefined) throw new Error("ajv implementation error"); const err = gen.name("err"); gen.forRange("i", errsCount, names_1.default.errors, (i) => { gen.const(err, (0, codegen_1._)`${names_1.default.vErrors}[${i}]`); gen.if((0, codegen_1._)`${err}.instancePath === undefined`, () => gen.assign((0, codegen_1._)`${err}.instancePath`, (0, codegen_1.strConcat)(names_1.default.instancePath, it.errorPath))); gen.assign((0, codegen_1._)`${err}.schemaPath`, (0, codegen_1.str)`${it.errSchemaPath}/${keyword}`); if (it.opts.verbose) { gen.assign((0, codegen_1._)`${err}.schema`, schemaValue); gen.assign((0, codegen_1._)`${err}.data`, data); } }); } exports.extendErrors = extendErrors; function addError(gen, errObj) { const err = gen.const("err", errObj); gen.if((0, codegen_1._)`${names_1.default.vErrors} === null`, () => gen.assign(names_1.default.vErrors, (0, codegen_1._)`[${err}]`), (0, codegen_1._)`${names_1.default.vErrors}.push(${err})`); gen.code((0, codegen_1._)`${names_1.default.errors}++`); } function returnErrors(it, errs) { const { gen, validateName, schemaEnv } = it; if (schemaEnv.$async) { gen.throw((0, codegen_1._)`new ${it.ValidationError}(${errs})`); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, errs); gen.return(false); } } var E = { keyword: new codegen_1.Name("keyword"), schemaPath: new codegen_1.Name("schemaPath"), params: new codegen_1.Name("params"), propertyName: new codegen_1.Name("propertyName"), message: new codegen_1.Name("message"), schema: new codegen_1.Name("schema"), parentSchema: new codegen_1.Name("parentSchema") }; function errorObjectCode(cxt, error2, errorPaths) { const { createErrors } = cxt.it; if (createErrors === false) return (0, codegen_1._)`{}`; return errorObject(cxt, error2, errorPaths); } function errorObject(cxt, error2, errorPaths = {}) { const { gen, it } = cxt; const keyValues = [ errorInstancePath(it, errorPaths), errorSchemaPath(cxt, errorPaths) ]; extraErrorProps(cxt, error2, keyValues); return gen.object(...keyValues); } function errorInstancePath({ errorPath }, { instancePath }) { const instPath = instancePath ? (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(instancePath, util_1.Type.Str)}` : errorPath; return [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, instPath)]; } function errorSchemaPath({ keyword, it: { errSchemaPath } }, { schemaPath, parentSchema }) { let schPath = parentSchema ? errSchemaPath : (0, codegen_1.str)`${errSchemaPath}/${keyword}`; if (schemaPath) { schPath = (0, codegen_1.str)`${schPath}${(0, util_1.getErrorPath)(schemaPath, util_1.Type.Str)}`; } return [E.schemaPath, schPath]; } function extraErrorProps(cxt, { params, message }, keyValues) { const { keyword, data, schemaValue, it } = cxt; const { opts, propertyName, topSchemaRef, schemaPath } = it; keyValues.push([E.keyword, keyword], [E.params, typeof params == "function" ? params(cxt) : params || (0, codegen_1._)`{}`]); if (opts.messages) { keyValues.push([E.message, typeof message == "function" ? message(cxt) : message]); } if (opts.verbose) { keyValues.push([E.schema, schemaValue], [E.parentSchema, (0, codegen_1._)`${topSchemaRef}${schemaPath}`], [names_1.default.data, data]); } if (propertyName) keyValues.push([E.propertyName, propertyName]); } }); var require_boolSchema2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.boolOrEmptySchema = exports.topBoolOrEmptySchema = undefined; var errors_1 = require_errors2(); var codegen_1 = require_codegen2(); var names_1 = require_names2(); var boolError = { message: "boolean schema is false" }; function topBoolOrEmptySchema(it) { const { gen, schema, validateName } = it; if (schema === false) { falseSchemaError(it, false); } else if (typeof schema == "object" && schema.$async === true) { gen.return(names_1.default.data); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, null); gen.return(true); } } exports.topBoolOrEmptySchema = topBoolOrEmptySchema; function boolOrEmptySchema(it, valid) { const { gen, schema } = it; if (schema === false) { gen.var(valid, false); falseSchemaError(it); } else { gen.var(valid, true); } } exports.boolOrEmptySchema = boolOrEmptySchema; function falseSchemaError(it, overrideAllErrors) { const { gen, data } = it; const cxt = { gen, keyword: "false schema", data, schema: false, schemaCode: false, schemaValue: false, params: {}, it }; (0, errors_1.reportError)(cxt, boolError, undefined, overrideAllErrors); } }); var require_rules2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getRules = exports.isJSONType = undefined; var _jsonTypes = ["string", "number", "integer", "boolean", "null", "object", "array"]; var jsonTypes = new Set(_jsonTypes); function isJSONType(x) { return typeof x == "string" && jsonTypes.has(x); } exports.isJSONType = isJSONType; function getRules() { const groups = { number: { type: "number", rules: [] }, string: { type: "string", rules: [] }, array: { type: "array", rules: [] }, object: { type: "object", rules: [] } }; return { types: { ...groups, integer: true, boolean: true, null: true }, rules: [{ rules: [] }, groups.number, groups.string, groups.array, groups.object], post: { rules: [] }, all: {}, keywords: {} }; } exports.getRules = getRules; }); var require_applicability2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.shouldUseRule = exports.shouldUseGroup = exports.schemaHasRulesForType = undefined; function schemaHasRulesForType({ schema, self: self2 }, type) { const group = self2.RULES.types[type]; return group && group !== true && shouldUseGroup(schema, group); } exports.schemaHasRulesForType = schemaHasRulesForType; function shouldUseGroup(schema, group) { return group.rules.some((rule) => shouldUseRule(schema, rule)); } exports.shouldUseGroup = shouldUseGroup; function shouldUseRule(schema, rule) { var _a2; return schema[rule.keyword] !== undefined || ((_a2 = rule.definition.implements) === null || _a2 === undefined ? undefined : _a2.some((kwd) => schema[kwd] !== undefined)); } exports.shouldUseRule = shouldUseRule; }); var require_dataType2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.reportTypeError = exports.checkDataTypes = exports.checkDataType = exports.coerceAndCheckDataType = exports.getJSONTypes = exports.getSchemaTypes = exports.DataType = undefined; var rules_1 = require_rules2(); var applicability_1 = require_applicability2(); var errors_1 = require_errors2(); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var DataType; (function(DataType2) { DataType2[DataType2["Correct"] = 0] = "Correct"; DataType2[DataType2["Wrong"] = 1] = "Wrong"; })(DataType || (exports.DataType = DataType = {})); function getSchemaTypes(schema) { const types = getJSONTypes(schema.type); const hasNull = types.includes("null"); if (hasNull) { if (schema.nullable === false) throw new Error("type: null contradicts nullable: false"); } else { if (!types.length && schema.nullable !== undefined) { throw new Error('"nullable" cannot be used without "type"'); } if (schema.nullable === true) types.push("null"); } return types; } exports.getSchemaTypes = getSchemaTypes; function getJSONTypes(ts) { const types = Array.isArray(ts) ? ts : ts ? [ts] : []; if (types.every(rules_1.isJSONType)) return types; throw new Error("type must be JSONType or JSONType[]: " + types.join(",")); } exports.getJSONTypes = getJSONTypes; function coerceAndCheckDataType(it, types) { const { gen, data, opts } = it; const coerceTo = coerceToTypes(types, opts.coerceTypes); const checkTypes = types.length > 0 && !(coerceTo.length === 0 && types.length === 1 && (0, applicability_1.schemaHasRulesForType)(it, types[0])); if (checkTypes) { const wrongType = checkDataTypes(types, data, opts.strictNumbers, DataType.Wrong); gen.if(wrongType, () => { if (coerceTo.length) coerceData(it, types, coerceTo); else reportTypeError(it); }); } return checkTypes; } exports.coerceAndCheckDataType = coerceAndCheckDataType; var COERCIBLE = new Set(["string", "number", "integer", "boolean", "null"]); function coerceToTypes(types, coerceTypes) { return coerceTypes ? types.filter((t) => COERCIBLE.has(t) || coerceTypes === "array" && t === "array") : []; } function coerceData(it, types, coerceTo) { const { gen, data, opts } = it; const dataType = gen.let("dataType", (0, codegen_1._)`typeof ${data}`); const coerced = gen.let("coerced", (0, codegen_1._)`undefined`); if (opts.coerceTypes === "array") { gen.if((0, codegen_1._)`${dataType} == 'object' && Array.isArray(${data}) && ${data}.length == 1`, () => gen.assign(data, (0, codegen_1._)`${data}[0]`).assign(dataType, (0, codegen_1._)`typeof ${data}`).if(checkDataTypes(types, data, opts.strictNumbers), () => gen.assign(coerced, data))); } gen.if((0, codegen_1._)`${coerced} !== undefined`); for (const t of coerceTo) { if (COERCIBLE.has(t) || t === "array" && opts.coerceTypes === "array") { coerceSpecificType(t); } } gen.else(); reportTypeError(it); gen.endIf(); gen.if((0, codegen_1._)`${coerced} !== undefined`, () => { gen.assign(data, coerced); assignParentData(it, coerced); }); function coerceSpecificType(t) { switch (t) { case "string": gen.elseIf((0, codegen_1._)`${dataType} == "number" || ${dataType} == "boolean"`).assign(coerced, (0, codegen_1._)`"" + ${data}`).elseIf((0, codegen_1._)`${data} === null`).assign(coerced, (0, codegen_1._)`""`); return; case "number": gen.elseIf((0, codegen_1._)`${dataType} == "boolean" || ${data} === null || (${dataType} == "string" && ${data} && ${data} == +${data})`).assign(coerced, (0, codegen_1._)`+${data}`); return; case "integer": gen.elseIf((0, codegen_1._)`${dataType} === "boolean" || ${data} === null || (${dataType} === "string" && ${data} && ${data} == +${data} && !(${data} % 1))`).assign(coerced, (0, codegen_1._)`+${data}`); return; case "boolean": gen.elseIf((0, codegen_1._)`${data} === "false" || ${data} === 0 || ${data} === null`).assign(coerced, false).elseIf((0, codegen_1._)`${data} === "true" || ${data} === 1`).assign(coerced, true); return; case "null": gen.elseIf((0, codegen_1._)`${data} === "" || ${data} === 0 || ${data} === false`); gen.assign(coerced, null); return; case "array": gen.elseIf((0, codegen_1._)`${dataType} === "string" || ${dataType} === "number" || ${dataType} === "boolean" || ${data} === null`).assign(coerced, (0, codegen_1._)`[${data}]`); } } } function assignParentData({ gen, parentData, parentDataProperty }, expr) { gen.if((0, codegen_1._)`${parentData} !== undefined`, () => gen.assign((0, codegen_1._)`${parentData}[${parentDataProperty}]`, expr)); } function checkDataType(dataType, data, strictNums, correct = DataType.Correct) { const EQ = correct === DataType.Correct ? codegen_1.operators.EQ : codegen_1.operators.NEQ; let cond; switch (dataType) { case "null": return (0, codegen_1._)`${data} ${EQ} null`; case "array": cond = (0, codegen_1._)`Array.isArray(${data})`; break; case "object": cond = (0, codegen_1._)`${data} && typeof ${data} == "object" && !Array.isArray(${data})`; break; case "integer": cond = numCond((0, codegen_1._)`!(${data} % 1) && !isNaN(${data})`); break; case "number": cond = numCond(); break; default: return (0, codegen_1._)`typeof ${data} ${EQ} ${dataType}`; } return correct === DataType.Correct ? cond : (0, codegen_1.not)(cond); function numCond(_cond = codegen_1.nil) { return (0, codegen_1.and)((0, codegen_1._)`typeof ${data} == "number"`, _cond, strictNums ? (0, codegen_1._)`isFinite(${data})` : codegen_1.nil); } } exports.checkDataType = checkDataType; function checkDataTypes(dataTypes, data, strictNums, correct) { if (dataTypes.length === 1) { return checkDataType(dataTypes[0], data, strictNums, correct); } let cond; const types = (0, util_1.toHash)(dataTypes); if (types.array && types.object) { const notObj = (0, codegen_1._)`typeof ${data} != "object"`; cond = types.null ? notObj : (0, codegen_1._)`!${data} || ${notObj}`; delete types.null; delete types.array; delete types.object; } else { cond = codegen_1.nil; } if (types.number) delete types.integer; for (const t in types) cond = (0, codegen_1.and)(cond, checkDataType(t, data, strictNums, correct)); return cond; } exports.checkDataTypes = checkDataTypes; var typeError = { message: ({ schema }) => `must be ${schema}`, params: ({ schema, schemaValue }) => typeof schema == "string" ? (0, codegen_1._)`{type: ${schema}}` : (0, codegen_1._)`{type: ${schemaValue}}` }; function reportTypeError(it) { const cxt = getTypeErrorContext(it); (0, errors_1.reportError)(cxt, typeError); } exports.reportTypeError = reportTypeError; function getTypeErrorContext(it) { const { gen, data, schema } = it; const schemaCode = (0, util_1.schemaRefOrVal)(it, schema, "type"); return { gen, keyword: "type", data, schema: schema.type, schemaCode, schemaValue: schemaCode, parentSchema: schema, params: {}, it }; } }); var require_defaults2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.assignDefaults = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); function assignDefaults(it, ty) { const { properties, items } = it.schema; if (ty === "object" && properties) { for (const key in properties) { assignDefault(it, key, properties[key].default); } } else if (ty === "array" && Array.isArray(items)) { items.forEach((sch, i) => assignDefault(it, i, sch.default)); } } exports.assignDefaults = assignDefaults; function assignDefault(it, prop, defaultValue) { const { gen, compositeRule, data, opts } = it; if (defaultValue === undefined) return; const childData = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(prop)}`; if (compositeRule) { (0, util_1.checkStrictMode)(it, `default is ignored for: ${childData}`); return; } let condition = (0, codegen_1._)`${childData} === undefined`; if (opts.useDefaults === "empty") { condition = (0, codegen_1._)`${condition} || ${childData} === null || ${childData} === ""`; } gen.if(condition, (0, codegen_1._)`${childData} = ${(0, codegen_1.stringify)(defaultValue)}`); } }); var require_code22 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateUnion = exports.validateArray = exports.usePattern = exports.callValidateCode = exports.schemaProperties = exports.allSchemaProperties = exports.noPropertyInData = exports.propertyInData = exports.isOwnProperty = exports.hasPropFunc = exports.reportMissingProp = exports.checkMissingProp = exports.checkReportMissingProp = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); var names_1 = require_names2(); var util_2 = require_util2(); function checkReportMissingProp(cxt, prop) { const { gen, data, it } = cxt; gen.if(noPropertyInData(gen, data, prop, it.opts.ownProperties), () => { cxt.setParams({ missingProperty: (0, codegen_1._)`${prop}` }, true); cxt.error(); }); } exports.checkReportMissingProp = checkReportMissingProp; function checkMissingProp({ gen, data, it: { opts } }, properties, missing) { return (0, codegen_1.or)(...properties.map((prop) => (0, codegen_1.and)(noPropertyInData(gen, data, prop, opts.ownProperties), (0, codegen_1._)`${missing} = ${prop}`))); } exports.checkMissingProp = checkMissingProp; function reportMissingProp(cxt, missing) { cxt.setParams({ missingProperty: missing }, true); cxt.error(); } exports.reportMissingProp = reportMissingProp; function hasPropFunc(gen) { return gen.scopeValue("func", { ref: Object.prototype.hasOwnProperty, code: (0, codegen_1._)`Object.prototype.hasOwnProperty` }); } exports.hasPropFunc = hasPropFunc; function isOwnProperty(gen, data, property) { return (0, codegen_1._)`${hasPropFunc(gen)}.call(${data}, ${property})`; } exports.isOwnProperty = isOwnProperty; function propertyInData(gen, data, property, ownProperties) { const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} !== undefined`; return ownProperties ? (0, codegen_1._)`${cond} && ${isOwnProperty(gen, data, property)}` : cond; } exports.propertyInData = propertyInData; function noPropertyInData(gen, data, property, ownProperties) { const cond = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(property)} === undefined`; return ownProperties ? (0, codegen_1.or)(cond, (0, codegen_1.not)(isOwnProperty(gen, data, property))) : cond; } exports.noPropertyInData = noPropertyInData; function allSchemaProperties(schemaMap) { return schemaMap ? Object.keys(schemaMap).filter((p) => p !== "__proto__") : []; } exports.allSchemaProperties = allSchemaProperties; function schemaProperties(it, schemaMap) { return allSchemaProperties(schemaMap).filter((p) => !(0, util_1.alwaysValidSchema)(it, schemaMap[p])); } exports.schemaProperties = schemaProperties; function callValidateCode({ schemaCode, data, it: { gen, topSchemaRef, schemaPath, errorPath }, it }, func, context, passSchema) { const dataAndSchema = passSchema ? (0, codegen_1._)`${schemaCode}, ${data}, ${topSchemaRef}${schemaPath}` : data; const valCxt = [ [names_1.default.instancePath, (0, codegen_1.strConcat)(names_1.default.instancePath, errorPath)], [names_1.default.parentData, it.parentData], [names_1.default.parentDataProperty, it.parentDataProperty], [names_1.default.rootData, names_1.default.rootData] ]; if (it.opts.dynamicRef) valCxt.push([names_1.default.dynamicAnchors, names_1.default.dynamicAnchors]); const args = (0, codegen_1._)`${dataAndSchema}, ${gen.object(...valCxt)}`; return context !== codegen_1.nil ? (0, codegen_1._)`${func}.call(${context}, ${args})` : (0, codegen_1._)`${func}(${args})`; } exports.callValidateCode = callValidateCode; var newRegExp = (0, codegen_1._)`new RegExp`; function usePattern({ gen, it: { opts } }, pattern) { const u = opts.unicodeRegExp ? "u" : ""; const { regExp } = opts.code; const rx = regExp(pattern, u); return gen.scopeValue("pattern", { key: rx.toString(), ref: rx, code: (0, codegen_1._)`${regExp.code === "new RegExp" ? newRegExp : (0, util_2.useFunc)(gen, regExp)}(${pattern}, ${u})` }); } exports.usePattern = usePattern; function validateArray(cxt) { const { gen, data, keyword, it } = cxt; const valid = gen.name("valid"); if (it.allErrors) { const validArr = gen.let("valid", true); validateItems(() => gen.assign(validArr, false)); return validArr; } gen.var(valid, true); validateItems(() => gen.break()); return valid; function validateItems(notValid) { const len = gen.const("len", (0, codegen_1._)`${data}.length`); gen.forRange("i", 0, len, (i) => { cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); gen.if((0, codegen_1.not)(valid), notValid); }); } } exports.validateArray = validateArray; function validateUnion(cxt) { const { gen, schema, keyword, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const alwaysValid = schema.some((sch) => (0, util_1.alwaysValidSchema)(it, sch)); if (alwaysValid && !it.opts.unevaluated) return; const valid = gen.let("valid", false); const schValid = gen.name("_valid"); gen.block(() => schema.forEach((_sch, i) => { const schCxt = cxt.subschema({ keyword, schemaProp: i, compositeRule: true }, schValid); gen.assign(valid, (0, codegen_1._)`${valid} || ${schValid}`); const merged = cxt.mergeValidEvaluated(schCxt, schValid); if (!merged) gen.if((0, codegen_1.not)(valid)); })); cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); } exports.validateUnion = validateUnion; }); var require_keyword2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateKeywordUsage = exports.validSchemaType = exports.funcKeywordCode = exports.macroKeywordCode = undefined; var codegen_1 = require_codegen2(); var names_1 = require_names2(); var code_1 = require_code22(); var errors_1 = require_errors2(); function macroKeywordCode(cxt, def) { const { gen, keyword, schema, parentSchema, it } = cxt; const macroSchema = def.macro.call(it.self, schema, parentSchema, it); const schemaRef = useKeyword(gen, keyword, macroSchema); if (it.opts.validateSchema !== false) it.self.validateSchema(macroSchema, true); const valid = gen.name("valid"); cxt.subschema({ schema: macroSchema, schemaPath: codegen_1.nil, errSchemaPath: `${it.errSchemaPath}/${keyword}`, topSchemaRef: schemaRef, compositeRule: true }, valid); cxt.pass(valid, () => cxt.error(true)); } exports.macroKeywordCode = macroKeywordCode; function funcKeywordCode(cxt, def) { var _a2; const { gen, keyword, schema, parentSchema, $data, it } = cxt; checkAsyncKeyword(it, def); const validate = !$data && def.compile ? def.compile.call(it.self, schema, parentSchema, it) : def.validate; const validateRef = useKeyword(gen, keyword, validate); const valid = gen.let("valid"); cxt.block$data(valid, validateKeyword); cxt.ok((_a2 = def.valid) !== null && _a2 !== undefined ? _a2 : valid); function validateKeyword() { if (def.errors === false) { assignValid(); if (def.modifying) modifyData(cxt); reportErrs(() => cxt.error()); } else { const ruleErrs = def.async ? validateAsync() : validateSync(); if (def.modifying) modifyData(cxt); reportErrs(() => addErrs(cxt, ruleErrs)); } } function validateAsync() { const ruleErrs = gen.let("ruleErrs", null); gen.try(() => assignValid((0, codegen_1._)`await `), (e) => gen.assign(valid, false).if((0, codegen_1._)`${e} instanceof ${it.ValidationError}`, () => gen.assign(ruleErrs, (0, codegen_1._)`${e}.errors`), () => gen.throw(e))); return ruleErrs; } function validateSync() { const validateErrs = (0, codegen_1._)`${validateRef}.errors`; gen.assign(validateErrs, null); assignValid(codegen_1.nil); return validateErrs; } function assignValid(_await = def.async ? (0, codegen_1._)`await ` : codegen_1.nil) { const passCxt = it.opts.passContext ? names_1.default.this : names_1.default.self; const passSchema = !(("compile" in def) && !$data || def.schema === false); gen.assign(valid, (0, codegen_1._)`${_await}${(0, code_1.callValidateCode)(cxt, validateRef, passCxt, passSchema)}`, def.modifying); } function reportErrs(errors3) { var _a22; gen.if((0, codegen_1.not)((_a22 = def.valid) !== null && _a22 !== undefined ? _a22 : valid), errors3); } } exports.funcKeywordCode = funcKeywordCode; function modifyData(cxt) { const { gen, data, it } = cxt; gen.if(it.parentData, () => gen.assign(data, (0, codegen_1._)`${it.parentData}[${it.parentDataProperty}]`)); } function addErrs(cxt, errs) { const { gen } = cxt; gen.if((0, codegen_1._)`Array.isArray(${errs})`, () => { gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`).assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); (0, errors_1.extendErrors)(cxt); }, () => cxt.error()); } function checkAsyncKeyword({ schemaEnv }, def) { if (def.async && !schemaEnv.$async) throw new Error("async keyword in sync schema"); } function useKeyword(gen, keyword, result) { if (result === undefined) throw new Error(`keyword "${keyword}" failed to compile`); return gen.scopeValue("keyword", typeof result == "function" ? { ref: result } : { ref: result, code: (0, codegen_1.stringify)(result) }); } function validSchemaType(schema, schemaType, allowUndefined = false) { return !schemaType.length || schemaType.some((st) => st === "array" ? Array.isArray(schema) : st === "object" ? schema && typeof schema == "object" && !Array.isArray(schema) : typeof schema == st || allowUndefined && typeof schema == "undefined"); } exports.validSchemaType = validSchemaType; function validateKeywordUsage({ schema, opts, self: self2, errSchemaPath }, def, keyword) { if (Array.isArray(def.keyword) ? !def.keyword.includes(keyword) : def.keyword !== keyword) { throw new Error("ajv implementation error"); } const deps = def.dependencies; if (deps === null || deps === undefined ? undefined : deps.some((kwd) => !Object.prototype.hasOwnProperty.call(schema, kwd))) { throw new Error(`parent schema must have dependencies of ${keyword}: ${deps.join(",")}`); } if (def.validateSchema) { const valid = def.validateSchema(schema[keyword]); if (!valid) { const msg = `keyword "${keyword}" value is invalid at path "${errSchemaPath}": ` + self2.errorsText(def.validateSchema.errors); if (opts.validateSchema === "log") self2.logger.error(msg); else throw new Error(msg); } } } exports.validateKeywordUsage = validateKeywordUsage; }); var require_subschema2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.extendSubschemaMode = exports.extendSubschemaData = exports.getSubschema = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); function getSubschema(it, { keyword, schemaProp, schema, schemaPath, errSchemaPath, topSchemaRef }) { if (keyword !== undefined && schema !== undefined) { throw new Error('both "keyword" and "schema" passed, only one allowed'); } if (keyword !== undefined) { const sch = it.schema[keyword]; return schemaProp === undefined ? { schema: sch, schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}`, errSchemaPath: `${it.errSchemaPath}/${keyword}` } : { schema: sch[schemaProp], schemaPath: (0, codegen_1._)`${it.schemaPath}${(0, codegen_1.getProperty)(keyword)}${(0, codegen_1.getProperty)(schemaProp)}`, errSchemaPath: `${it.errSchemaPath}/${keyword}/${(0, util_1.escapeFragment)(schemaProp)}` }; } if (schema !== undefined) { if (schemaPath === undefined || errSchemaPath === undefined || topSchemaRef === undefined) { throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"'); } return { schema, schemaPath, topSchemaRef, errSchemaPath }; } throw new Error('either "keyword" or "schema" must be passed'); } exports.getSubschema = getSubschema; function extendSubschemaData(subschema, it, { dataProp, dataPropType: dpType, data, dataTypes, propertyName }) { if (data !== undefined && dataProp !== undefined) { throw new Error('both "data" and "dataProp" passed, only one allowed'); } const { gen } = it; if (dataProp !== undefined) { const { errorPath, dataPathArr, opts } = it; const nextData = gen.let("data", (0, codegen_1._)`${it.data}${(0, codegen_1.getProperty)(dataProp)}`, true); dataContextProps(nextData); subschema.errorPath = (0, codegen_1.str)`${errorPath}${(0, util_1.getErrorPath)(dataProp, dpType, opts.jsPropertySyntax)}`; subschema.parentDataProperty = (0, codegen_1._)`${dataProp}`; subschema.dataPathArr = [...dataPathArr, subschema.parentDataProperty]; } if (data !== undefined) { const nextData = data instanceof codegen_1.Name ? data : gen.let("data", data, true); dataContextProps(nextData); if (propertyName !== undefined) subschema.propertyName = propertyName; } if (dataTypes) subschema.dataTypes = dataTypes; function dataContextProps(_nextData) { subschema.data = _nextData; subschema.dataLevel = it.dataLevel + 1; subschema.dataTypes = []; it.definedProperties = new Set; subschema.parentData = it.data; subschema.dataNames = [...it.dataNames, _nextData]; } } exports.extendSubschemaData = extendSubschemaData; function extendSubschemaMode(subschema, { jtdDiscriminator, jtdMetadata, compositeRule, createErrors, allErrors }) { if (compositeRule !== undefined) subschema.compositeRule = compositeRule; if (createErrors !== undefined) subschema.createErrors = createErrors; if (allErrors !== undefined) subschema.allErrors = allErrors; subschema.jtdDiscriminator = jtdDiscriminator; subschema.jtdMetadata = jtdMetadata; } exports.extendSubschemaMode = extendSubschemaMode; }); var require_fast_deep_equal2 = __commonJS2((exports, module) => { module.exports = function equal(a, b) { if (a === b) return true; if (a && b && typeof a == "object" && typeof b == "object") { if (a.constructor !== b.constructor) return false; var length, i, keys; if (Array.isArray(a)) { length = a.length; if (length != b.length) return false; for (i = length;i-- !== 0; ) if (!equal(a[i], b[i])) return false; return true; } if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) return false; for (i = length;i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; for (i = length;i-- !== 0; ) { var key = keys[i]; if (!equal(a[key], b[key])) return false; } return true; } return a !== a && b !== b; }; }); var require_json_schema_traverse2 = __commonJS2((exports, module) => { var traverse = module.exports = function(schema, opts, cb) { if (typeof opts == "function") { cb = opts; opts = {}; } cb = opts.cb || cb; var pre = typeof cb == "function" ? cb : cb.pre || function() {}; var post = cb.post || function() {}; _traverse(opts, pre, post, schema, "", schema); }; traverse.keywords = { additionalItems: true, items: true, contains: true, additionalProperties: true, propertyNames: true, not: true, if: true, then: true, else: true }; traverse.arrayKeywords = { items: true, allOf: true, anyOf: true, oneOf: true }; traverse.propsKeywords = { $defs: true, definitions: true, properties: true, patternProperties: true, dependencies: true }; traverse.skipKeywords = { default: true, enum: true, const: true, required: true, maximum: true, minimum: true, exclusiveMaximum: true, exclusiveMinimum: true, multipleOf: true, maxLength: true, minLength: true, pattern: true, format: true, maxItems: true, minItems: true, uniqueItems: true, maxProperties: true, minProperties: true }; function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) { if (schema && typeof schema == "object" && !Array.isArray(schema)) { pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); for (var key in schema) { var sch = schema[key]; if (Array.isArray(sch)) { if (key in traverse.arrayKeywords) { for (var i = 0;i < sch.length; i++) _traverse(opts, pre, post, sch[i], jsonPtr + "/" + key + "/" + i, rootSchema, jsonPtr, key, schema, i); } } else if (key in traverse.propsKeywords) { if (sch && typeof sch == "object") { for (var prop in sch) _traverse(opts, pre, post, sch[prop], jsonPtr + "/" + key + "/" + escapeJsonPtr(prop), rootSchema, jsonPtr, key, schema, prop); } } else if (key in traverse.keywords || opts.allKeys && !(key in traverse.skipKeywords)) { _traverse(opts, pre, post, sch, jsonPtr + "/" + key, rootSchema, jsonPtr, key, schema); } } post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex); } } function escapeJsonPtr(str) { return str.replace(/~/g, "~0").replace(/\//g, "~1"); } }); var require_resolve2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSchemaRefs = exports.resolveUrl = exports.normalizeId = exports._getFullPath = exports.getFullPath = exports.inlineRef = undefined; var util_1 = require_util2(); var equal = require_fast_deep_equal2(); var traverse = require_json_schema_traverse2(); var SIMPLE_INLINED = new Set([ "type", "format", "pattern", "maxLength", "minLength", "maxProperties", "minProperties", "maxItems", "minItems", "maximum", "minimum", "uniqueItems", "multipleOf", "required", "enum", "const" ]); function inlineRef(schema, limit = true) { if (typeof schema == "boolean") return true; if (limit === true) return !hasRef(schema); if (!limit) return false; return countKeys(schema) <= limit; } exports.inlineRef = inlineRef; var REF_KEYWORDS = new Set([ "$ref", "$recursiveRef", "$recursiveAnchor", "$dynamicRef", "$dynamicAnchor" ]); function hasRef(schema) { for (const key in schema) { if (REF_KEYWORDS.has(key)) return true; const sch = schema[key]; if (Array.isArray(sch) && sch.some(hasRef)) return true; if (typeof sch == "object" && hasRef(sch)) return true; } return false; } function countKeys(schema) { let count = 0; for (const key in schema) { if (key === "$ref") return Infinity; count++; if (SIMPLE_INLINED.has(key)) continue; if (typeof schema[key] == "object") { (0, util_1.eachItem)(schema[key], (sch) => count += countKeys(sch)); } if (count === Infinity) return Infinity; } return count; } function getFullPath(resolver, id = "", normalize) { if (normalize !== false) id = normalizeId(id); const p = resolver.parse(id); return _getFullPath(resolver, p); } exports.getFullPath = getFullPath; function _getFullPath(resolver, p) { const serialized = resolver.serialize(p); return serialized.split("#")[0] + "#"; } exports._getFullPath = _getFullPath; var TRAILING_SLASH_HASH = /#\/?$/; function normalizeId(id) { return id ? id.replace(TRAILING_SLASH_HASH, "") : ""; } exports.normalizeId = normalizeId; function resolveUrl(resolver, baseId, id) { id = normalizeId(id); return resolver.resolve(baseId, id); } exports.resolveUrl = resolveUrl; var ANCHOR = /^[a-z_][-a-z0-9._]*$/i; function getSchemaRefs(schema, baseId) { if (typeof schema == "boolean") return {}; const { schemaId, uriResolver } = this.opts; const schId = normalizeId(schema[schemaId] || baseId); const baseIds = { "": schId }; const pathPrefix = getFullPath(uriResolver, schId, false); const localRefs = {}; const schemaRefs = new Set; traverse(schema, { allKeys: true }, (sch, jsonPtr, _, parentJsonPtr) => { if (parentJsonPtr === undefined) return; const fullPath = pathPrefix + jsonPtr; let innerBaseId = baseIds[parentJsonPtr]; if (typeof sch[schemaId] == "string") innerBaseId = addRef.call(this, sch[schemaId]); addAnchor.call(this, sch.$anchor); addAnchor.call(this, sch.$dynamicAnchor); baseIds[jsonPtr] = innerBaseId; function addRef(ref) { const _resolve = this.opts.uriResolver.resolve; ref = normalizeId(innerBaseId ? _resolve(innerBaseId, ref) : ref); if (schemaRefs.has(ref)) throw ambiguos(ref); schemaRefs.add(ref); let schOrRef = this.refs[ref]; if (typeof schOrRef == "string") schOrRef = this.refs[schOrRef]; if (typeof schOrRef == "object") { checkAmbiguosRef(sch, schOrRef.schema, ref); } else if (ref !== normalizeId(fullPath)) { if (ref[0] === "#") { checkAmbiguosRef(sch, localRefs[ref], ref); localRefs[ref] = sch; } else { this.refs[ref] = fullPath; } } return ref; } function addAnchor(anchor) { if (typeof anchor == "string") { if (!ANCHOR.test(anchor)) throw new Error(`invalid anchor "${anchor}"`); addRef.call(this, `#${anchor}`); } } }); return localRefs; function checkAmbiguosRef(sch1, sch2, ref) { if (sch2 !== undefined && !equal(sch1, sch2)) throw ambiguos(ref); } function ambiguos(ref) { return new Error(`reference "${ref}" resolves to more than one schema`); } } exports.getSchemaRefs = getSchemaRefs; }); var require_validate2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = exports.KeywordCxt = exports.validateFunctionCode = undefined; var boolSchema_1 = require_boolSchema2(); var dataType_1 = require_dataType2(); var applicability_1 = require_applicability2(); var dataType_2 = require_dataType2(); var defaults_1 = require_defaults2(); var keyword_1 = require_keyword2(); var subschema_1 = require_subschema2(); var codegen_1 = require_codegen2(); var names_1 = require_names2(); var resolve_1 = require_resolve2(); var util_1 = require_util2(); var errors_1 = require_errors2(); function validateFunctionCode(it) { if (isSchemaObj(it)) { checkKeywords(it); if (schemaCxtHasRules(it)) { topSchemaObjCode(it); return; } } validateFunction(it, () => (0, boolSchema_1.topBoolOrEmptySchema)(it)); } exports.validateFunctionCode = validateFunctionCode; function validateFunction({ gen, validateName, schema, schemaEnv, opts }, body) { if (opts.code.es5) { gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${names_1.default.valCxt}`, schemaEnv.$async, () => { gen.code((0, codegen_1._)`"use strict"; ${funcSourceUrl(schema, opts)}`); destructureValCxtES5(gen, opts); gen.code(body); }); } else { gen.func(validateName, (0, codegen_1._)`${names_1.default.data}, ${destructureValCxt(opts)}`, schemaEnv.$async, () => gen.code(funcSourceUrl(schema, opts)).code(body)); } } function destructureValCxt(opts) { return (0, codegen_1._)`{${names_1.default.instancePath}="", ${names_1.default.parentData}, ${names_1.default.parentDataProperty}, ${names_1.default.rootData}=${names_1.default.data}${opts.dynamicRef ? (0, codegen_1._)`, ${names_1.default.dynamicAnchors}={}` : codegen_1.nil}}={}`; } function destructureValCxtES5(gen, opts) { gen.if(names_1.default.valCxt, () => { gen.var(names_1.default.instancePath, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.instancePath}`); gen.var(names_1.default.parentData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentData}`); gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.parentDataProperty}`); gen.var(names_1.default.rootData, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.rootData}`); if (opts.dynamicRef) gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`${names_1.default.valCxt}.${names_1.default.dynamicAnchors}`); }, () => { gen.var(names_1.default.instancePath, (0, codegen_1._)`""`); gen.var(names_1.default.parentData, (0, codegen_1._)`undefined`); gen.var(names_1.default.parentDataProperty, (0, codegen_1._)`undefined`); gen.var(names_1.default.rootData, names_1.default.data); if (opts.dynamicRef) gen.var(names_1.default.dynamicAnchors, (0, codegen_1._)`{}`); }); } function topSchemaObjCode(it) { const { schema, opts, gen } = it; validateFunction(it, () => { if (opts.$comment && schema.$comment) commentKeyword(it); checkNoDefault(it); gen.let(names_1.default.vErrors, null); gen.let(names_1.default.errors, 0); if (opts.unevaluated) resetEvaluated(it); typeAndKeywords(it); returnResults(it); }); return; } function resetEvaluated(it) { const { gen, validateName } = it; it.evaluated = gen.const("evaluated", (0, codegen_1._)`${validateName}.evaluated`); gen.if((0, codegen_1._)`${it.evaluated}.dynamicProps`, () => gen.assign((0, codegen_1._)`${it.evaluated}.props`, (0, codegen_1._)`undefined`)); gen.if((0, codegen_1._)`${it.evaluated}.dynamicItems`, () => gen.assign((0, codegen_1._)`${it.evaluated}.items`, (0, codegen_1._)`undefined`)); } function funcSourceUrl(schema, opts) { const schId = typeof schema == "object" && schema[opts.schemaId]; return schId && (opts.code.source || opts.code.process) ? (0, codegen_1._)`/*# sourceURL=${schId} */` : codegen_1.nil; } function subschemaCode(it, valid) { if (isSchemaObj(it)) { checkKeywords(it); if (schemaCxtHasRules(it)) { subSchemaObjCode(it, valid); return; } } (0, boolSchema_1.boolOrEmptySchema)(it, valid); } function schemaCxtHasRules({ schema, self: self2 }) { if (typeof schema == "boolean") return !schema; for (const key in schema) if (self2.RULES.all[key]) return true; return false; } function isSchemaObj(it) { return typeof it.schema != "boolean"; } function subSchemaObjCode(it, valid) { const { schema, gen, opts } = it; if (opts.$comment && schema.$comment) commentKeyword(it); updateContext(it); checkAsyncSchema(it); const errsCount = gen.const("_errs", names_1.default.errors); typeAndKeywords(it, errsCount); gen.var(valid, (0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); } function checkKeywords(it) { (0, util_1.checkUnknownRules)(it); checkRefsAndKeywords(it); } function typeAndKeywords(it, errsCount) { if (it.opts.jtd) return schemaKeywords(it, [], false, errsCount); const types = (0, dataType_1.getSchemaTypes)(it.schema); const checkedTypes = (0, dataType_1.coerceAndCheckDataType)(it, types); schemaKeywords(it, types, !checkedTypes, errsCount); } function checkRefsAndKeywords(it) { const { schema, errSchemaPath, opts, self: self2 } = it; if (schema.$ref && opts.ignoreKeywordsWithRef && (0, util_1.schemaHasRulesButRef)(schema, self2.RULES)) { self2.logger.warn(`$ref: keywords ignored in schema at path "${errSchemaPath}"`); } } function checkNoDefault(it) { const { schema, opts } = it; if (schema.default !== undefined && opts.useDefaults && opts.strictSchema) { (0, util_1.checkStrictMode)(it, "default is ignored in the schema root"); } } function updateContext(it) { const schId = it.schema[it.opts.schemaId]; if (schId) it.baseId = (0, resolve_1.resolveUrl)(it.opts.uriResolver, it.baseId, schId); } function checkAsyncSchema(it) { if (it.schema.$async && !it.schemaEnv.$async) throw new Error("async schema in sync schema"); } function commentKeyword({ gen, schemaEnv, schema, errSchemaPath, opts }) { const msg = schema.$comment; if (opts.$comment === true) { gen.code((0, codegen_1._)`${names_1.default.self}.logger.log(${msg})`); } else if (typeof opts.$comment == "function") { const schemaPath = (0, codegen_1.str)`${errSchemaPath}/$comment`; const rootName = gen.scopeValue("root", { ref: schemaEnv.root }); gen.code((0, codegen_1._)`${names_1.default.self}.opts.$comment(${msg}, ${schemaPath}, ${rootName}.schema)`); } } function returnResults(it) { const { gen, schemaEnv, validateName, ValidationError, opts } = it; if (schemaEnv.$async) { gen.if((0, codegen_1._)`${names_1.default.errors} === 0`, () => gen.return(names_1.default.data), () => gen.throw((0, codegen_1._)`new ${ValidationError}(${names_1.default.vErrors})`)); } else { gen.assign((0, codegen_1._)`${validateName}.errors`, names_1.default.vErrors); if (opts.unevaluated) assignEvaluated(it); gen.return((0, codegen_1._)`${names_1.default.errors} === 0`); } } function assignEvaluated({ gen, evaluated, props, items }) { if (props instanceof codegen_1.Name) gen.assign((0, codegen_1._)`${evaluated}.props`, props); if (items instanceof codegen_1.Name) gen.assign((0, codegen_1._)`${evaluated}.items`, items); } function schemaKeywords(it, types, typeErrors, errsCount) { const { gen, schema, data, allErrors, opts, self: self2 } = it; const { RULES } = self2; if (schema.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema, RULES))) { gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition)); return; } if (!opts.jtd) checkStrictTypes(it, types); gen.block(() => { for (const group of RULES.rules) groupKeywords(group); groupKeywords(RULES.post); }); function groupKeywords(group) { if (!(0, applicability_1.shouldUseGroup)(schema, group)) return; if (group.type) { gen.if((0, dataType_2.checkDataType)(group.type, data, opts.strictNumbers)); iterateKeywords(it, group); if (types.length === 1 && types[0] === group.type && typeErrors) { gen.else(); (0, dataType_2.reportTypeError)(it); } gen.endIf(); } else { iterateKeywords(it, group); } if (!allErrors) gen.if((0, codegen_1._)`${names_1.default.errors} === ${errsCount || 0}`); } } function iterateKeywords(it, group) { const { gen, schema, opts: { useDefaults } } = it; if (useDefaults) (0, defaults_1.assignDefaults)(it, group.type); gen.block(() => { for (const rule of group.rules) { if ((0, applicability_1.shouldUseRule)(schema, rule)) { keywordCode(it, rule.keyword, rule.definition, group.type); } } }); } function checkStrictTypes(it, types) { if (it.schemaEnv.meta || !it.opts.strictTypes) return; checkContextTypes(it, types); if (!it.opts.allowUnionTypes) checkMultipleTypes(it, types); checkKeywordTypes(it, it.dataTypes); } function checkContextTypes(it, types) { if (!types.length) return; if (!it.dataTypes.length) { it.dataTypes = types; return; } types.forEach((t) => { if (!includesType(it.dataTypes, t)) { strictTypesError(it, `type "${t}" not allowed by context "${it.dataTypes.join(",")}"`); } }); narrowSchemaTypes(it, types); } function checkMultipleTypes(it, ts) { if (ts.length > 1 && !(ts.length === 2 && ts.includes("null"))) { strictTypesError(it, "use allowUnionTypes to allow union type keyword"); } } function checkKeywordTypes(it, ts) { const rules = it.self.RULES.all; for (const keyword in rules) { const rule = rules[keyword]; if (typeof rule == "object" && (0, applicability_1.shouldUseRule)(it.schema, rule)) { const { type } = rule.definition; if (type.length && !type.some((t) => hasApplicableType(ts, t))) { strictTypesError(it, `missing type "${type.join(",")}" for keyword "${keyword}"`); } } } } function hasApplicableType(schTs, kwdT) { return schTs.includes(kwdT) || kwdT === "number" && schTs.includes("integer"); } function includesType(ts, t) { return ts.includes(t) || t === "integer" && ts.includes("number"); } function narrowSchemaTypes(it, withTypes) { const ts = []; for (const t of it.dataTypes) { if (includesType(withTypes, t)) ts.push(t); else if (withTypes.includes("integer") && t === "number") ts.push("integer"); } it.dataTypes = ts; } function strictTypesError(it, msg) { const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; msg += ` at "${schemaPath}" (strictTypes)`; (0, util_1.checkStrictMode)(it, msg, it.opts.strictTypes); } class KeywordCxt { constructor(it, def, keyword) { (0, keyword_1.validateKeywordUsage)(it, def, keyword); this.gen = it.gen; this.allErrors = it.allErrors; this.keyword = keyword; this.data = it.data; this.schema = it.schema[keyword]; this.$data = def.$data && it.opts.$data && this.schema && this.schema.$data; this.schemaValue = (0, util_1.schemaRefOrVal)(it, this.schema, keyword, this.$data); this.schemaType = def.schemaType; this.parentSchema = it.schema; this.params = {}; this.it = it; this.def = def; if (this.$data) { this.schemaCode = it.gen.const("vSchema", getData(this.$data, it)); } else { this.schemaCode = this.schemaValue; if (!(0, keyword_1.validSchemaType)(this.schema, def.schemaType, def.allowUndefined)) { throw new Error(`${keyword} value must be ${JSON.stringify(def.schemaType)}`); } } if ("code" in def ? def.trackErrors : def.errors !== false) { this.errsCount = it.gen.const("_errs", names_1.default.errors); } } result(condition, successAction, failAction) { this.failResult((0, codegen_1.not)(condition), successAction, failAction); } failResult(condition, successAction, failAction) { this.gen.if(condition); if (failAction) failAction(); else this.error(); if (successAction) { this.gen.else(); successAction(); if (this.allErrors) this.gen.endIf(); } else { if (this.allErrors) this.gen.endIf(); else this.gen.else(); } } pass(condition, failAction) { this.failResult((0, codegen_1.not)(condition), undefined, failAction); } fail(condition) { if (condition === undefined) { this.error(); if (!this.allErrors) this.gen.if(false); return; } this.gen.if(condition); this.error(); if (this.allErrors) this.gen.endIf(); else this.gen.else(); } fail$data(condition) { if (!this.$data) return this.fail(condition); const { schemaCode } = this; this.fail((0, codegen_1._)`${schemaCode} !== undefined && (${(0, codegen_1.or)(this.invalid$data(), condition)})`); } error(append, errorParams, errorPaths) { if (errorParams) { this.setParams(errorParams); this._error(append, errorPaths); this.setParams({}); return; } this._error(append, errorPaths); } _error(append, errorPaths) { (append ? errors_1.reportExtraError : errors_1.reportError)(this, this.def.error, errorPaths); } $dataError() { (0, errors_1.reportError)(this, this.def.$dataError || errors_1.keyword$DataError); } reset() { if (this.errsCount === undefined) throw new Error('add "trackErrors" to keyword definition'); (0, errors_1.resetErrorsCount)(this.gen, this.errsCount); } ok(cond) { if (!this.allErrors) this.gen.if(cond); } setParams(obj, assign) { if (assign) Object.assign(this.params, obj); else this.params = obj; } block$data(valid, codeBlock, $dataValid = codegen_1.nil) { this.gen.block(() => { this.check$data(valid, $dataValid); codeBlock(); }); } check$data(valid = codegen_1.nil, $dataValid = codegen_1.nil) { if (!this.$data) return; const { gen, schemaCode, schemaType, def } = this; gen.if((0, codegen_1.or)((0, codegen_1._)`${schemaCode} === undefined`, $dataValid)); if (valid !== codegen_1.nil) gen.assign(valid, true); if (schemaType.length || def.validateSchema) { gen.elseIf(this.invalid$data()); this.$dataError(); if (valid !== codegen_1.nil) gen.assign(valid, false); } gen.else(); } invalid$data() { const { gen, schemaCode, schemaType, def, it } = this; return (0, codegen_1.or)(wrong$DataType(), invalid$DataSchema()); function wrong$DataType() { if (schemaType.length) { if (!(schemaCode instanceof codegen_1.Name)) throw new Error("ajv implementation error"); const st = Array.isArray(schemaType) ? schemaType : [schemaType]; return (0, codegen_1._)`${(0, dataType_2.checkDataTypes)(st, schemaCode, it.opts.strictNumbers, dataType_2.DataType.Wrong)}`; } return codegen_1.nil; } function invalid$DataSchema() { if (def.validateSchema) { const validateSchemaRef = gen.scopeValue("validate$data", { ref: def.validateSchema }); return (0, codegen_1._)`!${validateSchemaRef}(${schemaCode})`; } return codegen_1.nil; } } subschema(appl, valid) { const subschema = (0, subschema_1.getSubschema)(this.it, appl); (0, subschema_1.extendSubschemaData)(subschema, this.it, appl); (0, subschema_1.extendSubschemaMode)(subschema, appl); const nextContext = { ...this.it, ...subschema, items: undefined, props: undefined }; subschemaCode(nextContext, valid); return nextContext; } mergeEvaluated(schemaCxt, toName) { const { it, gen } = this; if (!it.opts.unevaluated) return; if (it.props !== true && schemaCxt.props !== undefined) { it.props = util_1.mergeEvaluated.props(gen, schemaCxt.props, it.props, toName); } if (it.items !== true && schemaCxt.items !== undefined) { it.items = util_1.mergeEvaluated.items(gen, schemaCxt.items, it.items, toName); } } mergeValidEvaluated(schemaCxt, valid) { const { it, gen } = this; if (it.opts.unevaluated && (it.props !== true || it.items !== true)) { gen.if(valid, () => this.mergeEvaluated(schemaCxt, codegen_1.Name)); return true; } } } exports.KeywordCxt = KeywordCxt; function keywordCode(it, keyword, def, ruleType) { const cxt = new KeywordCxt(it, def, keyword); if ("code" in def) { def.code(cxt, ruleType); } else if (cxt.$data && def.validate) { (0, keyword_1.funcKeywordCode)(cxt, def); } else if ("macro" in def) { (0, keyword_1.macroKeywordCode)(cxt, def); } else if (def.compile || def.validate) { (0, keyword_1.funcKeywordCode)(cxt, def); } } var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/; var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/; function getData($data, { dataLevel, dataNames, dataPathArr }) { let jsonPointer; let data; if ($data === "") return names_1.default.rootData; if ($data[0] === "/") { if (!JSON_POINTER.test($data)) throw new Error(`Invalid JSON-pointer: ${$data}`); jsonPointer = $data; data = names_1.default.rootData; } else { const matches = RELATIVE_JSON_POINTER.exec($data); if (!matches) throw new Error(`Invalid JSON-pointer: ${$data}`); const up = +matches[1]; jsonPointer = matches[2]; if (jsonPointer === "#") { if (up >= dataLevel) throw new Error(errorMsg("property/index", up)); return dataPathArr[dataLevel - up]; } if (up > dataLevel) throw new Error(errorMsg("data", up)); data = dataNames[dataLevel - up]; if (!jsonPointer) return data; } let expr = data; const segments = jsonPointer.split("/"); for (const segment of segments) { if (segment) { data = (0, codegen_1._)`${data}${(0, codegen_1.getProperty)((0, util_1.unescapeJsonPointer)(segment))}`; expr = (0, codegen_1._)`${expr} && ${data}`; } } return expr; function errorMsg(pointerType, up) { return `Cannot access ${pointerType} ${up} levels up, current level is ${dataLevel}`; } } exports.getData = getData; }); var require_validation_error2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); class ValidationError extends Error { constructor(errors3) { super("validation failed"); this.errors = errors3; this.ajv = this.validation = true; } } exports.default = ValidationError; }); var require_ref_error2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var resolve_1 = require_resolve2(); class MissingRefError extends Error { constructor(resolver, baseId, ref, msg) { super(msg || `can't resolve reference ${ref} from id ${baseId}`); this.missingRef = (0, resolve_1.resolveUrl)(resolver, baseId, ref); this.missingSchema = (0, resolve_1.normalizeId)((0, resolve_1.getFullPath)(resolver, this.missingRef)); } } exports.default = MissingRefError; }); var require_compile2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveSchema = exports.getCompilingSchema = exports.resolveRef = exports.compileSchema = exports.SchemaEnv = undefined; var codegen_1 = require_codegen2(); var validation_error_1 = require_validation_error2(); var names_1 = require_names2(); var resolve_1 = require_resolve2(); var util_1 = require_util2(); var validate_1 = require_validate2(); class SchemaEnv { constructor(env) { var _a2; this.refs = {}; this.dynamicAnchors = {}; let schema; if (typeof env.schema == "object") schema = env.schema; this.schema = env.schema; this.schemaId = env.schemaId; this.root = env.root || this; this.baseId = (_a2 = env.baseId) !== null && _a2 !== undefined ? _a2 : (0, resolve_1.normalizeId)(schema === null || schema === undefined ? undefined : schema[env.schemaId || "$id"]); this.schemaPath = env.schemaPath; this.localRefs = env.localRefs; this.meta = env.meta; this.$async = schema === null || schema === undefined ? undefined : schema.$async; this.refs = {}; } } exports.SchemaEnv = SchemaEnv; function compileSchema(sch) { const _sch = getCompilingSchema.call(this, sch); if (_sch) return _sch; const rootId = (0, resolve_1.getFullPath)(this.opts.uriResolver, sch.root.baseId); const { es5, lines } = this.opts.code; const { ownProperties } = this.opts; const gen = new codegen_1.CodeGen(this.scope, { es5, lines, ownProperties }); let _ValidationError; if (sch.$async) { _ValidationError = gen.scopeValue("Error", { ref: validation_error_1.default, code: (0, codegen_1._)`require("ajv/dist/runtime/validation_error").default` }); } const validateName = gen.scopeName("validate"); sch.validateName = validateName; const schemaCxt = { gen, allErrors: this.opts.allErrors, data: names_1.default.data, parentData: names_1.default.parentData, parentDataProperty: names_1.default.parentDataProperty, dataNames: [names_1.default.data], dataPathArr: [codegen_1.nil], dataLevel: 0, dataTypes: [], definedProperties: new Set, topSchemaRef: gen.scopeValue("schema", this.opts.code.source === true ? { ref: sch.schema, code: (0, codegen_1.stringify)(sch.schema) } : { ref: sch.schema }), validateName, ValidationError: _ValidationError, schema: sch.schema, schemaEnv: sch, rootId, baseId: sch.baseId || rootId, schemaPath: codegen_1.nil, errSchemaPath: sch.schemaPath || (this.opts.jtd ? "" : "#"), errorPath: (0, codegen_1._)`""`, opts: this.opts, self: this }; let sourceCode; try { this._compilations.add(sch); (0, validate_1.validateFunctionCode)(schemaCxt); gen.optimize(this.opts.code.optimize); const validateCode = gen.toString(); sourceCode = `${gen.scopeRefs(names_1.default.scope)}return ${validateCode}`; if (this.opts.code.process) sourceCode = this.opts.code.process(sourceCode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode); const validate = makeValidate(this, this.scope.get()); this.scope.value(validateName, { ref: validate }); validate.errors = null; validate.schema = sch.schema; validate.schemaEnv = sch; if (sch.$async) validate.$async = true; if (this.opts.code.source === true) { validate.source = { validateName, validateCode, scopeValues: gen._values }; } if (this.opts.unevaluated) { const { props, items } = schemaCxt; validate.evaluated = { props: props instanceof codegen_1.Name ? undefined : props, items: items instanceof codegen_1.Name ? undefined : items, dynamicProps: props instanceof codegen_1.Name, dynamicItems: items instanceof codegen_1.Name }; if (validate.source) validate.source.evaluated = (0, codegen_1.stringify)(validate.evaluated); } sch.validate = validate; return sch; } catch (e) { delete sch.validate; delete sch.validateName; if (sourceCode) this.logger.error("Error compiling schema, function code:", sourceCode); throw e; } finally { this._compilations.delete(sch); } } exports.compileSchema = compileSchema; function resolveRef(root2, baseId, ref) { var _a2; ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, ref); const schOrFunc = root2.refs[ref]; if (schOrFunc) return schOrFunc; let _sch = resolve.call(this, root2, ref); if (_sch === undefined) { const schema = (_a2 = root2.localRefs) === null || _a2 === undefined ? undefined : _a2[ref]; const { schemaId } = this.opts; if (schema) _sch = new SchemaEnv({ schema, schemaId, root: root2, baseId }); } if (_sch === undefined) return; return root2.refs[ref] = inlineOrCompile.call(this, _sch); } exports.resolveRef = resolveRef; function inlineOrCompile(sch) { if ((0, resolve_1.inlineRef)(sch.schema, this.opts.inlineRefs)) return sch.schema; return sch.validate ? sch : compileSchema.call(this, sch); } function getCompilingSchema(schEnv) { for (const sch of this._compilations) { if (sameSchemaEnv(sch, schEnv)) return sch; } } exports.getCompilingSchema = getCompilingSchema; function sameSchemaEnv(s1, s2) { return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId; } function resolve(root2, ref) { let sch; while (typeof (sch = this.refs[ref]) == "string") ref = sch; return sch || this.schemas[ref] || resolveSchema.call(this, root2, ref); } function resolveSchema(root2, ref) { const p = this.opts.uriResolver.parse(ref); const refPath = (0, resolve_1._getFullPath)(this.opts.uriResolver, p); let baseId = (0, resolve_1.getFullPath)(this.opts.uriResolver, root2.baseId, undefined); if (Object.keys(root2.schema).length > 0 && refPath === baseId) { return getJsonPointer.call(this, p, root2); } const id = (0, resolve_1.normalizeId)(refPath); const schOrRef = this.refs[id] || this.schemas[id]; if (typeof schOrRef == "string") { const sch = resolveSchema.call(this, root2, schOrRef); if (typeof (sch === null || sch === undefined ? undefined : sch.schema) !== "object") return; return getJsonPointer.call(this, p, sch); } if (typeof (schOrRef === null || schOrRef === undefined ? undefined : schOrRef.schema) !== "object") return; if (!schOrRef.validate) compileSchema.call(this, schOrRef); if (id === (0, resolve_1.normalizeId)(ref)) { const { schema } = schOrRef; const { schemaId } = this.opts; const schId = schema[schemaId]; if (schId) baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); return new SchemaEnv({ schema, schemaId, root: root2, baseId }); } return getJsonPointer.call(this, p, schOrRef); } exports.resolveSchema = resolveSchema; var PREVENT_SCOPE_CHANGE = new Set([ "properties", "patternProperties", "enum", "dependencies", "definitions" ]); function getJsonPointer(parsedRef, { baseId, schema, root: root2 }) { var _a2; if (((_a2 = parsedRef.fragment) === null || _a2 === undefined ? undefined : _a2[0]) !== "/") return; for (const part of parsedRef.fragment.slice(1).split("/")) { if (typeof schema === "boolean") return; const partSchema = schema[(0, util_1.unescapeFragment)(part)]; if (partSchema === undefined) return; schema = partSchema; const schId = typeof schema === "object" && schema[this.opts.schemaId]; if (!PREVENT_SCOPE_CHANGE.has(part) && schId) { baseId = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schId); } } let env; if (typeof schema != "boolean" && schema.$ref && !(0, util_1.schemaHasRulesButRef)(schema, this.RULES)) { const $ref = (0, resolve_1.resolveUrl)(this.opts.uriResolver, baseId, schema.$ref); env = resolveSchema.call(this, root2, $ref); } const { schemaId } = this.opts; env = env || new SchemaEnv({ schema, schemaId, root: root2, baseId }); if (env.schema !== env.root.schema) return env; return; } }); var require_data2 = __commonJS2((exports, module) => { module.exports = { $id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#", description: "Meta-schema for $data reference (JSON AnySchema extension proposal)", type: "object", required: ["$data"], properties: { $data: { type: "string", anyOf: [{ format: "relative-json-pointer" }, { format: "json-pointer" }] } }, additionalProperties: false }; }); var require_scopedChars = __commonJS2((exports, module) => { var HEX = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, a: 10, A: 10, b: 11, B: 11, c: 12, C: 12, d: 13, D: 13, e: 14, E: 14, f: 15, F: 15 }; module.exports = { HEX }; }); var require_utils4 = __commonJS2((exports, module) => { var { HEX } = require_scopedChars(); var IPV4_REG = /^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u; function normalizeIPv4(host) { if (findToken(host, ".") < 3) { return { host, isIPV4: false }; } const matches = host.match(IPV4_REG) || []; const [address] = matches; if (address) { return { host: stripLeadingZeros(address, "."), isIPV4: true }; } else { return { host, isIPV4: false }; } } function stringArrayToHexStripped(input, keepZero = false) { let acc = ""; let strip = true; for (const c of input) { if (HEX[c] === undefined) return; if (c !== "0" && strip === true) strip = false; if (!strip) acc += c; } if (keepZero && acc.length === 0) acc = "0"; return acc; } function getIPV6(input) { let tokenCount = 0; const output = { error: false, address: "", zone: "" }; const address = []; const buffer = []; let isZone = false; let endipv6Encountered = false; let endIpv6 = false; function consume() { if (buffer.length) { if (isZone === false) { const hex = stringArrayToHexStripped(buffer); if (hex !== undefined) { address.push(hex); } else { output.error = true; return false; } } buffer.length = 0; } return true; } for (let i = 0;i < input.length; i++) { const cursor = input[i]; if (cursor === "[" || cursor === "]") { continue; } if (cursor === ":") { if (endipv6Encountered === true) { endIpv6 = true; } if (!consume()) { break; } tokenCount++; address.push(":"); if (tokenCount > 7) { output.error = true; break; } if (i - 1 >= 0 && input[i - 1] === ":") { endipv6Encountered = true; } continue; } else if (cursor === "%") { if (!consume()) { break; } isZone = true; } else { buffer.push(cursor); continue; } } if (buffer.length) { if (isZone) { output.zone = buffer.join(""); } else if (endIpv6) { address.push(buffer.join("")); } else { address.push(stringArrayToHexStripped(buffer)); } } output.address = address.join(""); return output; } function normalizeIPv6(host) { if (findToken(host, ":") < 2) { return { host, isIPV6: false }; } const ipv62 = getIPV6(host); if (!ipv62.error) { let newHost = ipv62.address; let escapedHost = ipv62.address; if (ipv62.zone) { newHost += "%" + ipv62.zone; escapedHost += "%25" + ipv62.zone; } return { host: newHost, escapedHost, isIPV6: true }; } else { return { host, isIPV6: false }; } } function stripLeadingZeros(str, token) { let out = ""; let skip = true; const l = str.length; for (let i = 0;i < l; i++) { const c = str[i]; if (c === "0" && skip) { if (i + 1 <= l && str[i + 1] === token || i + 1 === l) { out += c; skip = false; } } else { if (c === token) { skip = true; } else { skip = false; } out += c; } } return out; } function findToken(str, token) { let ind = 0; for (let i = 0;i < str.length; i++) { if (str[i] === token) ind++; } return ind; } var RDS1 = /^\.\.?\//u; var RDS2 = /^\/\.(?:\/|$)/u; var RDS3 = /^\/\.\.(?:\/|$)/u; var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/u; function removeDotSegments(input) { const output = []; while (input.length) { if (input.match(RDS1)) { input = input.replace(RDS1, ""); } else if (input.match(RDS2)) { input = input.replace(RDS2, "/"); } else if (input.match(RDS3)) { input = input.replace(RDS3, "/"); output.pop(); } else if (input === "." || input === "..") { input = ""; } else { const im = input.match(RDS5); if (im) { const s = im[0]; input = input.slice(s.length); output.push(s); } else { throw new Error("Unexpected dot segment condition"); } } } return output.join(""); } function normalizeComponentEncoding(components, esc2) { const func = esc2 !== true ? escape : unescape; if (components.scheme !== undefined) { components.scheme = func(components.scheme); } if (components.userinfo !== undefined) { components.userinfo = func(components.userinfo); } if (components.host !== undefined) { components.host = func(components.host); } if (components.path !== undefined) { components.path = func(components.path); } if (components.query !== undefined) { components.query = func(components.query); } if (components.fragment !== undefined) { components.fragment = func(components.fragment); } return components; } function recomposeAuthority(components) { const uriTokens = []; if (components.userinfo !== undefined) { uriTokens.push(components.userinfo); uriTokens.push("@"); } if (components.host !== undefined) { let host = unescape(components.host); const ipV4res = normalizeIPv4(host); if (ipV4res.isIPV4) { host = ipV4res.host; } else { const ipV6res = normalizeIPv6(ipV4res.host); if (ipV6res.isIPV6 === true) { host = `[${ipV6res.escapedHost}]`; } else { host = components.host; } } uriTokens.push(host); } if (typeof components.port === "number" || typeof components.port === "string") { uriTokens.push(":"); uriTokens.push(String(components.port)); } return uriTokens.length ? uriTokens.join("") : undefined; } module.exports = { recomposeAuthority, normalizeComponentEncoding, removeDotSegments, normalizeIPv4, normalizeIPv6, stringArrayToHexStripped }; }); var require_schemes2 = __commonJS2((exports, module) => { var UUID_REG = /^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu; var URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu; function isSecure(wsComponents) { return typeof wsComponents.secure === "boolean" ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss"; } function httpParse(components) { if (!components.host) { components.error = components.error || "HTTP URIs must have a host."; } return components; } function httpSerialize(components) { const secure = String(components.scheme).toLowerCase() === "https"; if (components.port === (secure ? 443 : 80) || components.port === "") { components.port = undefined; } if (!components.path) { components.path = "/"; } return components; } function wsParse(wsComponents) { wsComponents.secure = isSecure(wsComponents); wsComponents.resourceName = (wsComponents.path || "/") + (wsComponents.query ? "?" + wsComponents.query : ""); wsComponents.path = undefined; wsComponents.query = undefined; return wsComponents; } function wsSerialize(wsComponents) { if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") { wsComponents.port = undefined; } if (typeof wsComponents.secure === "boolean") { wsComponents.scheme = wsComponents.secure ? "wss" : "ws"; wsComponents.secure = undefined; } if (wsComponents.resourceName) { const [path13, query] = wsComponents.resourceName.split("?"); wsComponents.path = path13 && path13 !== "/" ? path13 : undefined; wsComponents.query = query; wsComponents.resourceName = undefined; } wsComponents.fragment = undefined; return wsComponents; } function urnParse(urnComponents, options) { if (!urnComponents.path) { urnComponents.error = "URN can not be parsed"; return urnComponents; } const matches = urnComponents.path.match(URN_REG); if (matches) { const scheme = options.scheme || urnComponents.scheme || "urn"; urnComponents.nid = matches[1].toLowerCase(); urnComponents.nss = matches[2]; const urnScheme = `${scheme}:${options.nid || urnComponents.nid}`; const schemeHandler = SCHEMES[urnScheme]; urnComponents.path = undefined; if (schemeHandler) { urnComponents = schemeHandler.parse(urnComponents, options); } } else { urnComponents.error = urnComponents.error || "URN can not be parsed."; } return urnComponents; } function urnSerialize(urnComponents, options) { const scheme = options.scheme || urnComponents.scheme || "urn"; const nid = urnComponents.nid.toLowerCase(); const urnScheme = `${scheme}:${options.nid || nid}`; const schemeHandler = SCHEMES[urnScheme]; if (schemeHandler) { urnComponents = schemeHandler.serialize(urnComponents, options); } const uriComponents = urnComponents; const nss = urnComponents.nss; uriComponents.path = `${nid || options.nid}:${nss}`; options.skipEscape = true; return uriComponents; } function urnuuidParse(urnComponents, options) { const uuidComponents = urnComponents; uuidComponents.uuid = uuidComponents.nss; uuidComponents.nss = undefined; if (!options.tolerant && (!uuidComponents.uuid || !UUID_REG.test(uuidComponents.uuid))) { uuidComponents.error = uuidComponents.error || "UUID is not valid."; } return uuidComponents; } function urnuuidSerialize(uuidComponents) { const urnComponents = uuidComponents; urnComponents.nss = (uuidComponents.uuid || "").toLowerCase(); return urnComponents; } var http = { scheme: "http", domainHost: true, parse: httpParse, serialize: httpSerialize }; var https = { scheme: "https", domainHost: http.domainHost, parse: httpParse, serialize: httpSerialize }; var ws = { scheme: "ws", domainHost: true, parse: wsParse, serialize: wsSerialize }; var wss = { scheme: "wss", domainHost: ws.domainHost, parse: ws.parse, serialize: ws.serialize }; var urn = { scheme: "urn", parse: urnParse, serialize: urnSerialize, skipNormalize: true }; var urnuuid = { scheme: "urn:uuid", parse: urnuuidParse, serialize: urnuuidSerialize, skipNormalize: true }; var SCHEMES = { http, https, ws, wss, urn, "urn:uuid": urnuuid }; module.exports = SCHEMES; }); var require_fast_uri2 = __commonJS2((exports, module) => { var { normalizeIPv6, normalizeIPv4, removeDotSegments, recomposeAuthority, normalizeComponentEncoding } = require_utils4(); var SCHEMES = require_schemes2(); function normalize(uri, options) { if (typeof uri === "string") { uri = serialize(parse6(uri, options), options); } else if (typeof uri === "object") { uri = parse6(serialize(uri, options), options); } return uri; } function resolve(baseURI, relativeURI, options) { const schemelessOptions = Object.assign({ scheme: "null" }, options); const resolved = resolveComponents(parse6(baseURI, schemelessOptions), parse6(relativeURI, schemelessOptions), schemelessOptions, true); return serialize(resolved, { ...schemelessOptions, skipEscape: true }); } function resolveComponents(base, relative, options, skipNormalization) { const target = {}; if (!skipNormalization) { base = parse6(serialize(base, options), options); relative = parse6(serialize(relative, options), options); } options = options || {}; if (!options.tolerant && relative.scheme) { target.scheme = relative.scheme; target.userinfo = relative.userinfo; target.host = relative.host; target.port = relative.port; target.path = removeDotSegments(relative.path || ""); target.query = relative.query; } else { if (relative.userinfo !== undefined || relative.host !== undefined || relative.port !== undefined) { target.userinfo = relative.userinfo; target.host = relative.host; target.port = relative.port; target.path = removeDotSegments(relative.path || ""); target.query = relative.query; } else { if (!relative.path) { target.path = base.path; if (relative.query !== undefined) { target.query = relative.query; } else { target.query = base.query; } } else { if (relative.path.charAt(0) === "/") { target.path = removeDotSegments(relative.path); } else { if ((base.userinfo !== undefined || base.host !== undefined || base.port !== undefined) && !base.path) { target.path = "/" + relative.path; } else if (!base.path) { target.path = relative.path; } else { target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative.path; } target.path = removeDotSegments(target.path); } target.query = relative.query; } target.userinfo = base.userinfo; target.host = base.host; target.port = base.port; } target.scheme = base.scheme; } target.fragment = relative.fragment; return target; } function equal(uriA, uriB, options) { if (typeof uriA === "string") { uriA = unescape(uriA); uriA = serialize(normalizeComponentEncoding(parse6(uriA, options), true), { ...options, skipEscape: true }); } else if (typeof uriA === "object") { uriA = serialize(normalizeComponentEncoding(uriA, true), { ...options, skipEscape: true }); } if (typeof uriB === "string") { uriB = unescape(uriB); uriB = serialize(normalizeComponentEncoding(parse6(uriB, options), true), { ...options, skipEscape: true }); } else if (typeof uriB === "object") { uriB = serialize(normalizeComponentEncoding(uriB, true), { ...options, skipEscape: true }); } return uriA.toLowerCase() === uriB.toLowerCase(); } function serialize(cmpts, opts) { const components = { host: cmpts.host, scheme: cmpts.scheme, userinfo: cmpts.userinfo, port: cmpts.port, path: cmpts.path, query: cmpts.query, nid: cmpts.nid, nss: cmpts.nss, uuid: cmpts.uuid, fragment: cmpts.fragment, reference: cmpts.reference, resourceName: cmpts.resourceName, secure: cmpts.secure, error: "" }; const options = Object.assign({}, opts); const uriTokens = []; const schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()]; if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options); if (components.path !== undefined) { if (!options.skipEscape) { components.path = escape(components.path); if (components.scheme !== undefined) { components.path = components.path.split("%3A").join(":"); } } else { components.path = unescape(components.path); } } if (options.reference !== "suffix" && components.scheme) { uriTokens.push(components.scheme, ":"); } const authority = recomposeAuthority(components); if (authority !== undefined) { if (options.reference !== "suffix") { uriTokens.push("//"); } uriTokens.push(authority); if (components.path && components.path.charAt(0) !== "/") { uriTokens.push("/"); } } if (components.path !== undefined) { let s = components.path; if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) { s = removeDotSegments(s); } if (authority === undefined) { s = s.replace(/^\/\//u, "/%2F"); } uriTokens.push(s); } if (components.query !== undefined) { uriTokens.push("?", components.query); } if (components.fragment !== undefined) { uriTokens.push("#", components.fragment); } return uriTokens.join(""); } var hexLookUp = Array.from({ length: 127 }, (_v, k) => /[^!"$&'()*+,\-.;=_`a-z{}~]/u.test(String.fromCharCode(k))); function nonSimpleDomain(value) { let code = 0; for (let i = 0, len = value.length;i < len; ++i) { code = value.charCodeAt(i); if (code > 126 || hexLookUp[code]) { return true; } } return false; } var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u; function parse6(uri, opts) { const options = Object.assign({}, opts); const parsed = { scheme: undefined, userinfo: undefined, host: "", port: undefined, path: "", query: undefined, fragment: undefined }; const gotEncoding = uri.indexOf("%") !== -1; let isIP = false; if (options.reference === "suffix") uri = (options.scheme ? options.scheme + ":" : "") + "//" + uri; const matches = uri.match(URI_PARSE); if (matches) { parsed.scheme = matches[1]; parsed.userinfo = matches[3]; parsed.host = matches[4]; parsed.port = parseInt(matches[5], 10); parsed.path = matches[6] || ""; parsed.query = matches[7]; parsed.fragment = matches[8]; if (isNaN(parsed.port)) { parsed.port = matches[5]; } if (parsed.host) { const ipv4result = normalizeIPv4(parsed.host); if (ipv4result.isIPV4 === false) { const ipv6result = normalizeIPv6(ipv4result.host); parsed.host = ipv6result.host.toLowerCase(); isIP = ipv6result.isIPV6; } else { parsed.host = ipv4result.host; isIP = true; } } if (parsed.scheme === undefined && parsed.userinfo === undefined && parsed.host === undefined && parsed.port === undefined && parsed.query === undefined && !parsed.path) { parsed.reference = "same-document"; } else if (parsed.scheme === undefined) { parsed.reference = "relative"; } else if (parsed.fragment === undefined) { parsed.reference = "absolute"; } else { parsed.reference = "uri"; } if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) { parsed.error = parsed.error || "URI is not a " + options.reference + " reference."; } const schemeHandler = SCHEMES[(options.scheme || parsed.scheme || "").toLowerCase()]; if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) { if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) { try { parsed.host = URL.domainToASCII(parsed.host.toLowerCase()); } catch (e) { parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e; } } } if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) { if (gotEncoding && parsed.scheme !== undefined) { parsed.scheme = unescape(parsed.scheme); } if (gotEncoding && parsed.host !== undefined) { parsed.host = unescape(parsed.host); } if (parsed.path) { parsed.path = escape(unescape(parsed.path)); } if (parsed.fragment) { parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment)); } } if (schemeHandler && schemeHandler.parse) { schemeHandler.parse(parsed, options); } } else { parsed.error = parsed.error || "URI can not be parsed."; } return parsed; } var fastUri = { SCHEMES, normalize, resolve, resolveComponents, equal, serialize, parse: parse6 }; module.exports = fastUri; module.exports.default = fastUri; module.exports.fastUri = fastUri; }); var require_uri3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var uri = require_fast_uri2(); uri.code = 'require("ajv/dist/runtime/uri").default'; exports.default = uri; }); var require_core3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = undefined; var validate_1 = require_validate2(); Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { return validate_1.KeywordCxt; } }); var codegen_1 = require_codegen2(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return codegen_1._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return codegen_1.str; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return codegen_1.stringify; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return codegen_1.nil; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return codegen_1.Name; } }); Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { return codegen_1.CodeGen; } }); var validation_error_1 = require_validation_error2(); var ref_error_1 = require_ref_error2(); var rules_1 = require_rules2(); var compile_1 = require_compile2(); var codegen_2 = require_codegen2(); var resolve_1 = require_resolve2(); var dataType_1 = require_dataType2(); var util_1 = require_util2(); var $dataRefSchema = require_data2(); var uri_1 = require_uri3(); var defaultRegExp = (str, flags) => new RegExp(str, flags); defaultRegExp.code = "new RegExp"; var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes"]; var EXT_SCOPE_NAMES = new Set([ "validate", "serialize", "parse", "wrapper", "root", "schema", "keyword", "pattern", "formats", "validate$data", "func", "obj", "Error" ]); var removedOptions = { errorDataPath: "", format: "`validateFormats: false` can be used instead.", nullable: '"nullable" keyword is supported by default.', jsonPointers: "Deprecated jsPropertySyntax can be used instead.", extendRefs: "Deprecated ignoreKeywordsWithRef can be used instead.", missingRefs: "Pass empty schema with $id that should be ignored to ajv.addSchema.", processCode: "Use option `code: {process: (code, schemaEnv: object) => string}`", sourceCode: "Use option `code: {source: true}`", strictDefaults: "It is default now, see option `strict`.", strictKeywords: "It is default now, see option `strict`.", uniqueItems: '"uniqueItems" keyword is always validated.', unknownFormats: "Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).", cache: "Map is used as cache, schema object as key.", serialize: "Map is used as cache, schema object as key.", ajvErrors: "It is default now." }; var deprecatedOptions = { ignoreKeywordsWithRef: "", jsPropertySyntax: "", unicode: '"minLength"/"maxLength" account for unicode characters by default.' }; var MAX_EXPRESSION = 200; function requiredOptions(o) { var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0; const s = o.strict; const _optz = (_a2 = o.code) === null || _a2 === undefined ? undefined : _a2.optimize; const optimize = _optz === true || _optz === undefined ? 1 : _optz || 0; const regExp = (_c = (_b = o.code) === null || _b === undefined ? undefined : _b.regExp) !== null && _c !== undefined ? _c : defaultRegExp; const uriResolver = (_d = o.uriResolver) !== null && _d !== undefined ? _d : uri_1.default; return { strictSchema: (_f = (_e = o.strictSchema) !== null && _e !== undefined ? _e : s) !== null && _f !== undefined ? _f : true, strictNumbers: (_h = (_g = o.strictNumbers) !== null && _g !== undefined ? _g : s) !== null && _h !== undefined ? _h : true, strictTypes: (_k = (_j = o.strictTypes) !== null && _j !== undefined ? _j : s) !== null && _k !== undefined ? _k : "log", strictTuples: (_m = (_l = o.strictTuples) !== null && _l !== undefined ? _l : s) !== null && _m !== undefined ? _m : "log", strictRequired: (_p = (_o = o.strictRequired) !== null && _o !== undefined ? _o : s) !== null && _p !== undefined ? _p : false, code: o.code ? { ...o.code, optimize, regExp } : { optimize, regExp }, loopRequired: (_q = o.loopRequired) !== null && _q !== undefined ? _q : MAX_EXPRESSION, loopEnum: (_r = o.loopEnum) !== null && _r !== undefined ? _r : MAX_EXPRESSION, meta: (_s = o.meta) !== null && _s !== undefined ? _s : true, messages: (_t = o.messages) !== null && _t !== undefined ? _t : true, inlineRefs: (_u = o.inlineRefs) !== null && _u !== undefined ? _u : true, schemaId: (_v = o.schemaId) !== null && _v !== undefined ? _v : "$id", addUsedSchema: (_w = o.addUsedSchema) !== null && _w !== undefined ? _w : true, validateSchema: (_x = o.validateSchema) !== null && _x !== undefined ? _x : true, validateFormats: (_y = o.validateFormats) !== null && _y !== undefined ? _y : true, unicodeRegExp: (_z = o.unicodeRegExp) !== null && _z !== undefined ? _z : true, int32range: (_0 = o.int32range) !== null && _0 !== undefined ? _0 : true, uriResolver }; } class Ajv2 { constructor(opts = {}) { this.schemas = {}; this.refs = {}; this.formats = {}; this._compilations = new Set; this._loading = {}; this._cache = new Map; opts = this.opts = { ...opts, ...requiredOptions(opts) }; const { es5, lines } = this.opts.code; this.scope = new codegen_2.ValueScope({ scope: {}, prefixes: EXT_SCOPE_NAMES, es5, lines }); this.logger = getLogger(opts.logger); const formatOpt = opts.validateFormats; opts.validateFormats = false; this.RULES = (0, rules_1.getRules)(); checkOptions.call(this, removedOptions, opts, "NOT SUPPORTED"); checkOptions.call(this, deprecatedOptions, opts, "DEPRECATED", "warn"); this._metaOpts = getMetaSchemaOptions.call(this); if (opts.formats) addInitialFormats.call(this); this._addVocabularies(); this._addDefaultMetaSchema(); if (opts.keywords) addInitialKeywords.call(this, opts.keywords); if (typeof opts.meta == "object") this.addMetaSchema(opts.meta); addInitialSchemas.call(this); opts.validateFormats = formatOpt; } _addVocabularies() { this.addKeyword("$async"); } _addDefaultMetaSchema() { const { $data, meta: meta2, schemaId } = this.opts; let _dataRefSchema = $dataRefSchema; if (schemaId === "id") { _dataRefSchema = { ...$dataRefSchema }; _dataRefSchema.id = _dataRefSchema.$id; delete _dataRefSchema.$id; } if (meta2 && $data) this.addMetaSchema(_dataRefSchema, _dataRefSchema[schemaId], false); } defaultMeta() { const { meta: meta2, schemaId } = this.opts; return this.opts.defaultMeta = typeof meta2 == "object" ? meta2[schemaId] || meta2 : undefined; } validate(schemaKeyRef, data) { let v; if (typeof schemaKeyRef == "string") { v = this.getSchema(schemaKeyRef); if (!v) throw new Error(`no schema with key or ref "${schemaKeyRef}"`); } else { v = this.compile(schemaKeyRef); } const valid = v(data); if (!("$async" in v)) this.errors = v.errors; return valid; } compile(schema, _meta) { const sch = this._addSchema(schema, _meta); return sch.validate || this._compileSchemaEnv(sch); } compileAsync(schema, meta2) { if (typeof this.opts.loadSchema != "function") { throw new Error("options.loadSchema should be a function"); } const { loadSchema } = this.opts; return runCompileAsync.call(this, schema, meta2); async function runCompileAsync(_schema, _meta) { await loadMetaSchema.call(this, _schema.$schema); const sch = this._addSchema(_schema, _meta); return sch.validate || _compileAsync.call(this, sch); } async function loadMetaSchema($ref) { if ($ref && !this.getSchema($ref)) { await runCompileAsync.call(this, { $ref }, true); } } async function _compileAsync(sch) { try { return this._compileSchemaEnv(sch); } catch (e) { if (!(e instanceof ref_error_1.default)) throw e; checkLoaded.call(this, e); await loadMissingSchema.call(this, e.missingSchema); return _compileAsync.call(this, sch); } } function checkLoaded({ missingSchema: ref, missingRef }) { if (this.refs[ref]) { throw new Error(`AnySchema ${ref} is loaded but ${missingRef} cannot be resolved`); } } async function loadMissingSchema(ref) { const _schema = await _loadSchema.call(this, ref); if (!this.refs[ref]) await loadMetaSchema.call(this, _schema.$schema); if (!this.refs[ref]) this.addSchema(_schema, ref, meta2); } async function _loadSchema(ref) { const p = this._loading[ref]; if (p) return p; try { return await (this._loading[ref] = loadSchema(ref)); } finally { delete this._loading[ref]; } } } addSchema(schema, key, _meta, _validateSchema = this.opts.validateSchema) { if (Array.isArray(schema)) { for (const sch of schema) this.addSchema(sch, undefined, _meta, _validateSchema); return this; } let id; if (typeof schema === "object") { const { schemaId } = this.opts; id = schema[schemaId]; if (id !== undefined && typeof id != "string") { throw new Error(`schema ${schemaId} must be string`); } } key = (0, resolve_1.normalizeId)(key || id); this._checkUnique(key); this.schemas[key] = this._addSchema(schema, _meta, key, _validateSchema, true); return this; } addMetaSchema(schema, key, _validateSchema = this.opts.validateSchema) { this.addSchema(schema, key, true, _validateSchema); return this; } validateSchema(schema, throwOrLogError) { if (typeof schema == "boolean") return true; let $schema; $schema = schema.$schema; if ($schema !== undefined && typeof $schema != "string") { throw new Error("$schema must be a string"); } $schema = $schema || this.opts.defaultMeta || this.defaultMeta(); if (!$schema) { this.logger.warn("meta-schema not available"); this.errors = null; return true; } const valid = this.validate($schema, schema); if (!valid && throwOrLogError) { const message = "schema is invalid: " + this.errorsText(); if (this.opts.validateSchema === "log") this.logger.error(message); else throw new Error(message); } return valid; } getSchema(keyRef) { let sch; while (typeof (sch = getSchEnv.call(this, keyRef)) == "string") keyRef = sch; if (sch === undefined) { const { schemaId } = this.opts; const root2 = new compile_1.SchemaEnv({ schema: {}, schemaId }); sch = compile_1.resolveSchema.call(this, root2, keyRef); if (!sch) return; this.refs[keyRef] = sch; } return sch.validate || this._compileSchemaEnv(sch); } removeSchema(schemaKeyRef) { if (schemaKeyRef instanceof RegExp) { this._removeAllSchemas(this.schemas, schemaKeyRef); this._removeAllSchemas(this.refs, schemaKeyRef); return this; } switch (typeof schemaKeyRef) { case "undefined": this._removeAllSchemas(this.schemas); this._removeAllSchemas(this.refs); this._cache.clear(); return this; case "string": { const sch = getSchEnv.call(this, schemaKeyRef); if (typeof sch == "object") this._cache.delete(sch.schema); delete this.schemas[schemaKeyRef]; delete this.refs[schemaKeyRef]; return this; } case "object": { const cacheKey = schemaKeyRef; this._cache.delete(cacheKey); let id = schemaKeyRef[this.opts.schemaId]; if (id) { id = (0, resolve_1.normalizeId)(id); delete this.schemas[id]; delete this.refs[id]; } return this; } default: throw new Error("ajv.removeSchema: invalid parameter"); } } addVocabulary(definitions) { for (const def of definitions) this.addKeyword(def); return this; } addKeyword(kwdOrDef, def) { let keyword; if (typeof kwdOrDef == "string") { keyword = kwdOrDef; if (typeof def == "object") { this.logger.warn("these parameters are deprecated, see docs for addKeyword"); def.keyword = keyword; } } else if (typeof kwdOrDef == "object" && def === undefined) { def = kwdOrDef; keyword = def.keyword; if (Array.isArray(keyword) && !keyword.length) { throw new Error("addKeywords: keyword must be string or non-empty array"); } } else { throw new Error("invalid addKeywords parameters"); } checkKeyword.call(this, keyword, def); if (!def) { (0, util_1.eachItem)(keyword, (kwd) => addRule.call(this, kwd)); return this; } keywordMetaschema.call(this, def); const definition = { ...def, type: (0, dataType_1.getJSONTypes)(def.type), schemaType: (0, dataType_1.getJSONTypes)(def.schemaType) }; (0, util_1.eachItem)(keyword, definition.type.length === 0 ? (k) => addRule.call(this, k, definition) : (k) => definition.type.forEach((t) => addRule.call(this, k, definition, t))); return this; } getKeyword(keyword) { const rule = this.RULES.all[keyword]; return typeof rule == "object" ? rule.definition : !!rule; } removeKeyword(keyword) { const { RULES } = this; delete RULES.keywords[keyword]; delete RULES.all[keyword]; for (const group of RULES.rules) { const i = group.rules.findIndex((rule) => rule.keyword === keyword); if (i >= 0) group.rules.splice(i, 1); } return this; } addFormat(name, format) { if (typeof format == "string") format = new RegExp(format); this.formats[name] = format; return this; } errorsText(errors3 = this.errors, { separator = ", ", dataVar = "data" } = {}) { if (!errors3 || errors3.length === 0) return "No errors"; return errors3.map((e) => `${dataVar}${e.instancePath} ${e.message}`).reduce((text, msg) => text + separator + msg); } $dataMetaSchema(metaSchema, keywordsJsonPointers) { const rules = this.RULES.all; metaSchema = JSON.parse(JSON.stringify(metaSchema)); for (const jsonPointer of keywordsJsonPointers) { const segments = jsonPointer.split("/").slice(1); let keywords = metaSchema; for (const seg of segments) keywords = keywords[seg]; for (const key in rules) { const rule = rules[key]; if (typeof rule != "object") continue; const { $data } = rule.definition; const schema = keywords[key]; if ($data && schema) keywords[key] = schemaOrData(schema); } } return metaSchema; } _removeAllSchemas(schemas4, regex) { for (const keyRef in schemas4) { const sch = schemas4[keyRef]; if (!regex || regex.test(keyRef)) { if (typeof sch == "string") { delete schemas4[keyRef]; } else if (sch && !sch.meta) { this._cache.delete(sch.schema); delete schemas4[keyRef]; } } } } _addSchema(schema, meta2, baseId, validateSchema = this.opts.validateSchema, addSchema = this.opts.addUsedSchema) { let id; const { schemaId } = this.opts; if (typeof schema == "object") { id = schema[schemaId]; } else { if (this.opts.jtd) throw new Error("schema must be object"); else if (typeof schema != "boolean") throw new Error("schema must be object or boolean"); } let sch = this._cache.get(schema); if (sch !== undefined) return sch; baseId = (0, resolve_1.normalizeId)(id || baseId); const localRefs = resolve_1.getSchemaRefs.call(this, schema, baseId); sch = new compile_1.SchemaEnv({ schema, schemaId, meta: meta2, baseId, localRefs }); this._cache.set(sch.schema, sch); if (addSchema && !baseId.startsWith("#")) { if (baseId) this._checkUnique(baseId); this.refs[baseId] = sch; } if (validateSchema) this.validateSchema(schema, true); return sch; } _checkUnique(id) { if (this.schemas[id] || this.refs[id]) { throw new Error(`schema with key or id "${id}" already exists`); } } _compileSchemaEnv(sch) { if (sch.meta) this._compileMetaSchema(sch); else compile_1.compileSchema.call(this, sch); if (!sch.validate) throw new Error("ajv implementation error"); return sch.validate; } _compileMetaSchema(sch) { const currentOpts = this.opts; this.opts = this._metaOpts; try { compile_1.compileSchema.call(this, sch); } finally { this.opts = currentOpts; } } } Ajv2.ValidationError = validation_error_1.default; Ajv2.MissingRefError = ref_error_1.default; exports.default = Ajv2; function checkOptions(checkOpts, options, msg, log = "error") { for (const key in checkOpts) { const opt = key; if (opt in options) this.logger[log](`${msg}: option ${key}. ${checkOpts[opt]}`); } } function getSchEnv(keyRef) { keyRef = (0, resolve_1.normalizeId)(keyRef); return this.schemas[keyRef] || this.refs[keyRef]; } function addInitialSchemas() { const optsSchemas = this.opts.schemas; if (!optsSchemas) return; if (Array.isArray(optsSchemas)) this.addSchema(optsSchemas); else for (const key in optsSchemas) this.addSchema(optsSchemas[key], key); } function addInitialFormats() { for (const name in this.opts.formats) { const format = this.opts.formats[name]; if (format) this.addFormat(name, format); } } function addInitialKeywords(defs) { if (Array.isArray(defs)) { this.addVocabulary(defs); return; } this.logger.warn("keywords option as map is deprecated, pass array"); for (const keyword in defs) { const def = defs[keyword]; if (!def.keyword) def.keyword = keyword; this.addKeyword(def); } } function getMetaSchemaOptions() { const metaOpts = { ...this.opts }; for (const opt of META_IGNORE_OPTIONS) delete metaOpts[opt]; return metaOpts; } var noLogs = { log() {}, warn() {}, error() {} }; function getLogger(logger2) { if (logger2 === false) return noLogs; if (logger2 === undefined) return console; if (logger2.log && logger2.warn && logger2.error) return logger2; throw new Error("logger must implement log, warn and error methods"); } var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i; function checkKeyword(keyword, def) { const { RULES } = this; (0, util_1.eachItem)(keyword, (kwd) => { if (RULES.keywords[kwd]) throw new Error(`Keyword ${kwd} is already defined`); if (!KEYWORD_NAME.test(kwd)) throw new Error(`Keyword ${kwd} has invalid name`); }); if (!def) return; if (def.$data && !(("code" in def) || ("validate" in def))) { throw new Error('$data keyword must have "code" or "validate" function'); } } function addRule(keyword, definition, dataType) { var _a2; const post = definition === null || definition === undefined ? undefined : definition.post; if (dataType && post) throw new Error('keyword with "post" flag cannot have "type"'); const { RULES } = this; let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t }) => t === dataType); if (!ruleGroup) { ruleGroup = { type: dataType, rules: [] }; RULES.rules.push(ruleGroup); } RULES.keywords[keyword] = true; if (!definition) return; const rule = { keyword, definition: { ...definition, type: (0, dataType_1.getJSONTypes)(definition.type), schemaType: (0, dataType_1.getJSONTypes)(definition.schemaType) } }; if (definition.before) addBeforeRule.call(this, ruleGroup, rule, definition.before); else ruleGroup.rules.push(rule); RULES.all[keyword] = rule; (_a2 = definition.implements) === null || _a2 === undefined || _a2.forEach((kwd) => this.addKeyword(kwd)); } function addBeforeRule(ruleGroup, rule, before) { const i = ruleGroup.rules.findIndex((_rule) => _rule.keyword === before); if (i >= 0) { ruleGroup.rules.splice(i, 0, rule); } else { ruleGroup.rules.push(rule); this.logger.warn(`rule ${before} is not defined`); } } function keywordMetaschema(def) { let { metaSchema } = def; if (metaSchema === undefined) return; if (def.$data && this.opts.$data) metaSchema = schemaOrData(metaSchema); def.validateSchema = this.compile(metaSchema, true); } var $dataRef = { $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" }; function schemaOrData(schema) { return { anyOf: [schema, $dataRef] }; } }); var require_id2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var def = { keyword: "id", code() { throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID'); } }; exports.default = def; }); var require_ref3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.callRef = exports.getValidate = undefined; var ref_error_1 = require_ref_error2(); var code_1 = require_code22(); var codegen_1 = require_codegen2(); var names_1 = require_names2(); var compile_1 = require_compile2(); var util_1 = require_util2(); var def = { keyword: "$ref", schemaType: "string", code(cxt) { const { gen, schema: $ref, it } = cxt; const { baseId, schemaEnv: env, validateName, opts, self: self2 } = it; const { root: root2 } = env; if (($ref === "#" || $ref === "#/") && baseId === root2.baseId) return callRootRef(); const schOrEnv = compile_1.resolveRef.call(self2, root2, baseId, $ref); if (schOrEnv === undefined) throw new ref_error_1.default(it.opts.uriResolver, baseId, $ref); if (schOrEnv instanceof compile_1.SchemaEnv) return callValidate(schOrEnv); return inlineRefSchema(schOrEnv); function callRootRef() { if (env === root2) return callRef(cxt, validateName, env, env.$async); const rootName = gen.scopeValue("root", { ref: root2 }); return callRef(cxt, (0, codegen_1._)`${rootName}.validate`, root2, root2.$async); } function callValidate(sch) { const v = getValidate(cxt, sch); callRef(cxt, v, sch, sch.$async); } function inlineRefSchema(sch) { const schName = gen.scopeValue("schema", opts.code.source === true ? { ref: sch, code: (0, codegen_1.stringify)(sch) } : { ref: sch }); const valid = gen.name("valid"); const schCxt = cxt.subschema({ schema: sch, dataTypes: [], schemaPath: codegen_1.nil, topSchemaRef: schName, errSchemaPath: $ref }, valid); cxt.mergeEvaluated(schCxt); cxt.ok(valid); } } }; function getValidate(cxt, sch) { const { gen } = cxt; return sch.validate ? gen.scopeValue("validate", { ref: sch.validate }) : (0, codegen_1._)`${gen.scopeValue("wrapper", { ref: sch })}.validate`; } exports.getValidate = getValidate; function callRef(cxt, v, sch, $async) { const { gen, it } = cxt; const { allErrors, schemaEnv: env, opts } = it; const passCxt = opts.passContext ? names_1.default.this : codegen_1.nil; if ($async) callAsyncRef(); else callSyncRef(); function callAsyncRef() { if (!env.$async) throw new Error("async schema referenced by sync schema"); const valid = gen.let("valid"); gen.try(() => { gen.code((0, codegen_1._)`await ${(0, code_1.callValidateCode)(cxt, v, passCxt)}`); addEvaluatedFrom(v); if (!allErrors) gen.assign(valid, true); }, (e) => { gen.if((0, codegen_1._)`!(${e} instanceof ${it.ValidationError})`, () => gen.throw(e)); addErrorsFrom(e); if (!allErrors) gen.assign(valid, false); }); cxt.ok(valid); } function callSyncRef() { cxt.result((0, code_1.callValidateCode)(cxt, v, passCxt), () => addEvaluatedFrom(v), () => addErrorsFrom(v)); } function addErrorsFrom(source) { const errs = (0, codegen_1._)`${source}.errors`; gen.assign(names_1.default.vErrors, (0, codegen_1._)`${names_1.default.vErrors} === null ? ${errs} : ${names_1.default.vErrors}.concat(${errs})`); gen.assign(names_1.default.errors, (0, codegen_1._)`${names_1.default.vErrors}.length`); } function addEvaluatedFrom(source) { var _a2; if (!it.opts.unevaluated) return; const schEvaluated = (_a2 = sch === null || sch === undefined ? undefined : sch.validate) === null || _a2 === undefined ? undefined : _a2.evaluated; if (it.props !== true) { if (schEvaluated && !schEvaluated.dynamicProps) { if (schEvaluated.props !== undefined) { it.props = util_1.mergeEvaluated.props(gen, schEvaluated.props, it.props); } } else { const props = gen.var("props", (0, codegen_1._)`${source}.evaluated.props`); it.props = util_1.mergeEvaluated.props(gen, props, it.props, codegen_1.Name); } } if (it.items !== true) { if (schEvaluated && !schEvaluated.dynamicItems) { if (schEvaluated.items !== undefined) { it.items = util_1.mergeEvaluated.items(gen, schEvaluated.items, it.items); } } else { const items = gen.var("items", (0, codegen_1._)`${source}.evaluated.items`); it.items = util_1.mergeEvaluated.items(gen, items, it.items, codegen_1.Name); } } } } exports.callRef = callRef; exports.default = def; }); var require_core22 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var id_1 = require_id2(); var ref_1 = require_ref3(); var core2 = [ "$schema", "$id", "$defs", "$vocabulary", { keyword: "$comment" }, "definitions", id_1.default, ref_1.default ]; exports.default = core2; }); var require_limitNumber2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var ops = codegen_1.operators; var KWDs = { maximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, minimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, exclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, exclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } }; var error2 = { message: ({ keyword, schemaCode }) => (0, codegen_1.str)`must be ${KWDs[keyword].okStr} ${schemaCode}`, params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` }; var def = { keyword: Object.keys(KWDs), type: "number", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; cxt.fail$data((0, codegen_1._)`${data} ${KWDs[keyword].fail} ${schemaCode} || isNaN(${data})`); } }; exports.default = def; }); var require_multipleOf2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must be multiple of ${schemaCode}`, params: ({ schemaCode }) => (0, codegen_1._)`{multipleOf: ${schemaCode}}` }; var def = { keyword: "multipleOf", type: "number", schemaType: "number", $data: true, error: error2, code(cxt) { const { gen, data, schemaCode, it } = cxt; const prec = it.opts.multipleOfPrecision; const res = gen.let("res"); const invalid = prec ? (0, codegen_1._)`Math.abs(Math.round(${res}) - ${res}) > 1e-${prec}` : (0, codegen_1._)`${res} !== parseInt(${res})`; cxt.fail$data((0, codegen_1._)`(${schemaCode} === 0 || (${res} = ${data}/${schemaCode}, ${invalid}))`); } }; exports.default = def; }); var require_ucs2length2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); function ucs2length(str) { const len = str.length; let length = 0; let pos = 0; let value; while (pos < len) { length++; value = str.charCodeAt(pos++); if (value >= 55296 && value <= 56319 && pos < len) { value = str.charCodeAt(pos); if ((value & 64512) === 56320) pos++; } } return length; } exports.default = ucs2length; ucs2length.code = 'require("ajv/dist/runtime/ucs2length").default'; }); var require_limitLength2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var ucs2length_1 = require_ucs2length2(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxLength" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} characters`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxLength", "minLength"], type: "string", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode, it } = cxt; const op = keyword === "maxLength" ? codegen_1.operators.GT : codegen_1.operators.LT; const len = it.opts.unicode === false ? (0, codegen_1._)`${data}.length` : (0, codegen_1._)`${(0, util_1.useFunc)(cxt.gen, ucs2length_1.default)}(${data})`; cxt.fail$data((0, codegen_1._)`${len} ${op} ${schemaCode}`); } }; exports.default = def; }); var require_pattern2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code22(); var codegen_1 = require_codegen2(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must match pattern "${schemaCode}"`, params: ({ schemaCode }) => (0, codegen_1._)`{pattern: ${schemaCode}}` }; var def = { keyword: "pattern", type: "string", schemaType: "string", $data: true, error: error2, code(cxt) { const { data, $data, schema, schemaCode, it } = cxt; const u = it.opts.unicodeRegExp ? "u" : ""; const regExp = $data ? (0, codegen_1._)`(new RegExp(${schemaCode}, ${u}))` : (0, code_1.usePattern)(cxt, schema); cxt.fail$data((0, codegen_1._)`!${regExp}.test(${data})`); } }; exports.default = def; }); var require_limitProperties2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxProperties" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} properties`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxProperties", "minProperties"], type: "object", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; const op = keyword === "maxProperties" ? codegen_1.operators.GT : codegen_1.operators.LT; cxt.fail$data((0, codegen_1._)`Object.keys(${data}).length ${op} ${schemaCode}`); } }; exports.default = def; }); var require_required2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code22(); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: ({ params: { missingProperty } }) => (0, codegen_1.str)`must have required property '${missingProperty}'`, params: ({ params: { missingProperty } }) => (0, codegen_1._)`{missingProperty: ${missingProperty}}` }; var def = { keyword: "required", type: "object", schemaType: "array", $data: true, error: error2, code(cxt) { const { gen, schema, schemaCode, data, $data, it } = cxt; const { opts } = it; if (!$data && schema.length === 0) return; const useLoop = schema.length >= opts.loopRequired; if (it.allErrors) allErrorsMode(); else exitOnErrorMode(); if (opts.strictRequired) { const props = cxt.parentSchema.properties; const { definedProperties } = cxt.it; for (const requiredKey of schema) { if ((props === null || props === undefined ? undefined : props[requiredKey]) === undefined && !definedProperties.has(requiredKey)) { const schemaPath = it.schemaEnv.baseId + it.errSchemaPath; const msg = `required property "${requiredKey}" is not defined at "${schemaPath}" (strictRequired)`; (0, util_1.checkStrictMode)(it, msg, it.opts.strictRequired); } } } function allErrorsMode() { if (useLoop || $data) { cxt.block$data(codegen_1.nil, loopAllRequired); } else { for (const prop of schema) { (0, code_1.checkReportMissingProp)(cxt, prop); } } } function exitOnErrorMode() { const missing = gen.let("missing"); if (useLoop || $data) { const valid = gen.let("valid", true); cxt.block$data(valid, () => loopUntilMissing(missing, valid)); cxt.ok(valid); } else { gen.if((0, code_1.checkMissingProp)(cxt, schema, missing)); (0, code_1.reportMissingProp)(cxt, missing); gen.else(); } } function loopAllRequired() { gen.forOf("prop", schemaCode, (prop) => { cxt.setParams({ missingProperty: prop }); gen.if((0, code_1.noPropertyInData)(gen, data, prop, opts.ownProperties), () => cxt.error()); }); } function loopUntilMissing(missing, valid) { cxt.setParams({ missingProperty: missing }); gen.forOf(missing, schemaCode, () => { gen.assign(valid, (0, code_1.propertyInData)(gen, data, missing, opts.ownProperties)); gen.if((0, codegen_1.not)(valid), () => { cxt.error(); gen.break(); }); }, codegen_1.nil); } } }; exports.default = def; }); var require_limitItems2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var error2 = { message({ keyword, schemaCode }) { const comp = keyword === "maxItems" ? "more" : "fewer"; return (0, codegen_1.str)`must NOT have ${comp} than ${schemaCode} items`; }, params: ({ schemaCode }) => (0, codegen_1._)`{limit: ${schemaCode}}` }; var def = { keyword: ["maxItems", "minItems"], type: "array", schemaType: "number", $data: true, error: error2, code(cxt) { const { keyword, data, schemaCode } = cxt; const op = keyword === "maxItems" ? codegen_1.operators.GT : codegen_1.operators.LT; cxt.fail$data((0, codegen_1._)`${data}.length ${op} ${schemaCode}`); } }; exports.default = def; }); var require_equal2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var equal = require_fast_deep_equal2(); equal.code = 'require("ajv/dist/runtime/equal").default'; exports.default = equal; }); var require_uniqueItems2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var dataType_1 = require_dataType2(); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var equal_1 = require_equal2(); var error2 = { message: ({ params: { i, j } }) => (0, codegen_1.str)`must NOT have duplicate items (items ## ${j} and ${i} are identical)`, params: ({ params: { i, j } }) => (0, codegen_1._)`{i: ${i}, j: ${j}}` }; var def = { keyword: "uniqueItems", type: "array", schemaType: "boolean", $data: true, error: error2, code(cxt) { const { gen, data, $data, schema, parentSchema, schemaCode, it } = cxt; if (!$data && !schema) return; const valid = gen.let("valid"); const itemTypes = parentSchema.items ? (0, dataType_1.getSchemaTypes)(parentSchema.items) : []; cxt.block$data(valid, validateUniqueItems, (0, codegen_1._)`${schemaCode} === false`); cxt.ok(valid); function validateUniqueItems() { const i = gen.let("i", (0, codegen_1._)`${data}.length`); const j = gen.let("j"); cxt.setParams({ i, j }); gen.assign(valid, true); gen.if((0, codegen_1._)`${i} > 1`, () => (canOptimize() ? loopN : loopN2)(i, j)); } function canOptimize() { return itemTypes.length > 0 && !itemTypes.some((t) => t === "object" || t === "array"); } function loopN(i, j) { const item = gen.name("item"); const wrongType = (0, dataType_1.checkDataTypes)(itemTypes, item, it.opts.strictNumbers, dataType_1.DataType.Wrong); const indices = gen.const("indices", (0, codegen_1._)`{}`); gen.for((0, codegen_1._)`;${i}--;`, () => { gen.let(item, (0, codegen_1._)`${data}[${i}]`); gen.if(wrongType, (0, codegen_1._)`continue`); if (itemTypes.length > 1) gen.if((0, codegen_1._)`typeof ${item} == "string"`, (0, codegen_1._)`${item} += "_"`); gen.if((0, codegen_1._)`typeof ${indices}[${item}] == "number"`, () => { gen.assign(j, (0, codegen_1._)`${indices}[${item}]`); cxt.error(); gen.assign(valid, false).break(); }).code((0, codegen_1._)`${indices}[${item}] = ${i}`); }); } function loopN2(i, j) { const eql = (0, util_1.useFunc)(gen, equal_1.default); const outer = gen.name("outer"); gen.label(outer).for((0, codegen_1._)`;${i}--;`, () => gen.for((0, codegen_1._)`${j} = ${i}; ${j}--;`, () => gen.if((0, codegen_1._)`${eql}(${data}[${i}], ${data}[${j}])`, () => { cxt.error(); gen.assign(valid, false).break(outer); }))); } } }; exports.default = def; }); var require_const2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var equal_1 = require_equal2(); var error2 = { message: "must be equal to constant", params: ({ schemaCode }) => (0, codegen_1._)`{allowedValue: ${schemaCode}}` }; var def = { keyword: "const", $data: true, error: error2, code(cxt) { const { gen, data, $data, schemaCode, schema } = cxt; if ($data || schema && typeof schema == "object") { cxt.fail$data((0, codegen_1._)`!${(0, util_1.useFunc)(gen, equal_1.default)}(${data}, ${schemaCode})`); } else { cxt.fail((0, codegen_1._)`${schema} !== ${data}`); } } }; exports.default = def; }); var require_enum2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var equal_1 = require_equal2(); var error2 = { message: "must be equal to one of the allowed values", params: ({ schemaCode }) => (0, codegen_1._)`{allowedValues: ${schemaCode}}` }; var def = { keyword: "enum", schemaType: "array", $data: true, error: error2, code(cxt) { const { gen, data, $data, schema, schemaCode, it } = cxt; if (!$data && schema.length === 0) throw new Error("enum must have non-empty array"); const useLoop = schema.length >= it.opts.loopEnum; let eql; const getEql = () => eql !== null && eql !== undefined ? eql : eql = (0, util_1.useFunc)(gen, equal_1.default); let valid; if (useLoop || $data) { valid = gen.let("valid"); cxt.block$data(valid, loopEnum); } else { if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const vSchema = gen.const("vSchema", schemaCode); valid = (0, codegen_1.or)(...schema.map((_x, i) => equalCode(vSchema, i))); } cxt.pass(valid); function loopEnum() { gen.assign(valid, false); gen.forOf("v", schemaCode, (v) => gen.if((0, codegen_1._)`${getEql()}(${data}, ${v})`, () => gen.assign(valid, true).break())); } function equalCode(vSchema, i) { const sch = schema[i]; return typeof sch === "object" && sch !== null ? (0, codegen_1._)`${getEql()}(${data}, ${vSchema}[${i}])` : (0, codegen_1._)`${data} === ${sch}`; } } }; exports.default = def; }); var require_validation2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var limitNumber_1 = require_limitNumber2(); var multipleOf_1 = require_multipleOf2(); var limitLength_1 = require_limitLength2(); var pattern_1 = require_pattern2(); var limitProperties_1 = require_limitProperties2(); var required_1 = require_required2(); var limitItems_1 = require_limitItems2(); var uniqueItems_1 = require_uniqueItems2(); var const_1 = require_const2(); var enum_1 = require_enum2(); var validation = [ limitNumber_1.default, multipleOf_1.default, limitLength_1.default, pattern_1.default, limitProperties_1.default, required_1.default, limitItems_1.default, uniqueItems_1.default, { keyword: "type", schemaType: ["string", "array"] }, { keyword: "nullable", schemaType: "boolean" }, const_1.default, enum_1.default ]; exports.default = validation; }); var require_additionalItems2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateAdditionalItems = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` }; var def = { keyword: "additionalItems", type: "array", schemaType: ["boolean", "object"], before: "uniqueItems", error: error2, code(cxt) { const { parentSchema, it } = cxt; const { items } = parentSchema; if (!Array.isArray(items)) { (0, util_1.checkStrictMode)(it, '"additionalItems" is ignored when "items" is not an array of schemas'); return; } validateAdditionalItems(cxt, items); } }; function validateAdditionalItems(cxt, items) { const { gen, schema, data, keyword, it } = cxt; it.items = true; const len = gen.const("len", (0, codegen_1._)`${data}.length`); if (schema === false) { cxt.setParams({ len: items.length }); cxt.pass((0, codegen_1._)`${len} <= ${items.length}`); } else if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { const valid = gen.var("valid", (0, codegen_1._)`${len} <= ${items.length}`); gen.if((0, codegen_1.not)(valid), () => validateItems(valid)); cxt.ok(valid); } function validateItems(valid) { gen.forRange("i", items.length, len, (i) => { cxt.subschema({ keyword, dataProp: i, dataPropType: util_1.Type.Num }, valid); if (!it.allErrors) gen.if((0, codegen_1.not)(valid), () => gen.break()); }); } } exports.validateAdditionalItems = validateAdditionalItems; exports.default = def; }); var require_items2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateTuple = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); var code_1 = require_code22(); var def = { keyword: "items", type: "array", schemaType: ["object", "array", "boolean"], before: "uniqueItems", code(cxt) { const { schema, it } = cxt; if (Array.isArray(schema)) return validateTuple(cxt, "additionalItems", schema); it.items = true; if ((0, util_1.alwaysValidSchema)(it, schema)) return; cxt.ok((0, code_1.validateArray)(cxt)); } }; function validateTuple(cxt, extraItems, schArr = cxt.schema) { const { gen, parentSchema, data, keyword, it } = cxt; checkStrictTuple(parentSchema); if (it.opts.unevaluated && schArr.length && it.items !== true) { it.items = util_1.mergeEvaluated.items(gen, schArr.length, it.items); } const valid = gen.name("valid"); const len = gen.const("len", (0, codegen_1._)`${data}.length`); schArr.forEach((sch, i) => { if ((0, util_1.alwaysValidSchema)(it, sch)) return; gen.if((0, codegen_1._)`${len} > ${i}`, () => cxt.subschema({ keyword, schemaProp: i, dataProp: i }, valid)); cxt.ok(valid); }); function checkStrictTuple(sch) { const { opts, errSchemaPath } = it; const l = schArr.length; const fullTuple = l === sch.minItems && (l === sch.maxItems || sch[extraItems] === false); if (opts.strictTuples && !fullTuple) { const msg = `"${keyword}" is ${l}-tuple, but minItems or maxItems/${extraItems} are not specified or different at path "${errSchemaPath}"`; (0, util_1.checkStrictMode)(it, msg, opts.strictTuples); } } } exports.validateTuple = validateTuple; exports.default = def; }); var require_prefixItems2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var items_1 = require_items2(); var def = { keyword: "prefixItems", type: "array", schemaType: ["array"], before: "uniqueItems", code: (cxt) => (0, items_1.validateTuple)(cxt, "items") }; exports.default = def; }); var require_items20202 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var code_1 = require_code22(); var additionalItems_1 = require_additionalItems2(); var error2 = { message: ({ params: { len } }) => (0, codegen_1.str)`must NOT have more than ${len} items`, params: ({ params: { len } }) => (0, codegen_1._)`{limit: ${len}}` }; var def = { keyword: "items", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", error: error2, code(cxt) { const { schema, parentSchema, it } = cxt; const { prefixItems } = parentSchema; it.items = true; if ((0, util_1.alwaysValidSchema)(it, schema)) return; if (prefixItems) (0, additionalItems_1.validateAdditionalItems)(cxt, prefixItems); else cxt.ok((0, code_1.validateArray)(cxt)); } }; exports.default = def; }); var require_contains2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: ({ params: { min, max } }) => max === undefined ? (0, codegen_1.str)`must contain at least ${min} valid item(s)` : (0, codegen_1.str)`must contain at least ${min} and no more than ${max} valid item(s)`, params: ({ params: { min, max } }) => max === undefined ? (0, codegen_1._)`{minContains: ${min}}` : (0, codegen_1._)`{minContains: ${min}, maxContains: ${max}}` }; var def = { keyword: "contains", type: "array", schemaType: ["object", "boolean"], before: "uniqueItems", trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, data, it } = cxt; let min; let max; const { minContains, maxContains } = parentSchema; if (it.opts.next) { min = minContains === undefined ? 1 : minContains; max = maxContains; } else { min = 1; } const len = gen.const("len", (0, codegen_1._)`${data}.length`); cxt.setParams({ min, max }); if (max === undefined && min === 0) { (0, util_1.checkStrictMode)(it, `"minContains" == 0 without "maxContains": "contains" keyword ignored`); return; } if (max !== undefined && min > max) { (0, util_1.checkStrictMode)(it, `"minContains" > "maxContains" is always invalid`); cxt.fail(); return; } if ((0, util_1.alwaysValidSchema)(it, schema)) { let cond = (0, codegen_1._)`${len} >= ${min}`; if (max !== undefined) cond = (0, codegen_1._)`${cond} && ${len} <= ${max}`; cxt.pass(cond); return; } it.items = true; const valid = gen.name("valid"); if (max === undefined && min === 1) { validateItems(valid, () => gen.if(valid, () => gen.break())); } else if (min === 0) { gen.let(valid, true); if (max !== undefined) gen.if((0, codegen_1._)`${data}.length > 0`, validateItemsWithCount); } else { gen.let(valid, false); validateItemsWithCount(); } cxt.result(valid, () => cxt.reset()); function validateItemsWithCount() { const schValid = gen.name("_valid"); const count = gen.let("count", 0); validateItems(schValid, () => gen.if(schValid, () => checkLimits(count))); } function validateItems(_valid, block) { gen.forRange("i", 0, len, (i) => { cxt.subschema({ keyword: "contains", dataProp: i, dataPropType: util_1.Type.Num, compositeRule: true }, _valid); block(); }); } function checkLimits(count) { gen.code((0, codegen_1._)`${count}++`); if (max === undefined) { gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true).break()); } else { gen.if((0, codegen_1._)`${count} > ${max}`, () => gen.assign(valid, false).break()); if (min === 1) gen.assign(valid, true); else gen.if((0, codegen_1._)`${count} >= ${min}`, () => gen.assign(valid, true)); } } } }; exports.default = def; }); var require_dependencies2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.validateSchemaDeps = exports.validatePropertyDeps = exports.error = undefined; var codegen_1 = require_codegen2(); var util_1 = require_util2(); var code_1 = require_code22(); exports.error = { message: ({ params: { property, depsCount, deps } }) => { const property_ies = depsCount === 1 ? "property" : "properties"; return (0, codegen_1.str)`must have ${property_ies} ${deps} when property ${property} is present`; }, params: ({ params: { property, depsCount, deps, missingProperty } }) => (0, codegen_1._)`{property: ${property}, missingProperty: ${missingProperty}, depsCount: ${depsCount}, deps: ${deps}}` }; var def = { keyword: "dependencies", type: "object", schemaType: "object", error: exports.error, code(cxt) { const [propDeps, schDeps] = splitDependencies(cxt); validatePropertyDeps(cxt, propDeps); validateSchemaDeps(cxt, schDeps); } }; function splitDependencies({ schema }) { const propertyDeps = {}; const schemaDeps = {}; for (const key in schema) { if (key === "__proto__") continue; const deps = Array.isArray(schema[key]) ? propertyDeps : schemaDeps; deps[key] = schema[key]; } return [propertyDeps, schemaDeps]; } function validatePropertyDeps(cxt, propertyDeps = cxt.schema) { const { gen, data, it } = cxt; if (Object.keys(propertyDeps).length === 0) return; const missing = gen.let("missing"); for (const prop in propertyDeps) { const deps = propertyDeps[prop]; if (deps.length === 0) continue; const hasProperty = (0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties); cxt.setParams({ property: prop, depsCount: deps.length, deps: deps.join(", ") }); if (it.allErrors) { gen.if(hasProperty, () => { for (const depProp of deps) { (0, code_1.checkReportMissingProp)(cxt, depProp); } }); } else { gen.if((0, codegen_1._)`${hasProperty} && (${(0, code_1.checkMissingProp)(cxt, deps, missing)})`); (0, code_1.reportMissingProp)(cxt, missing); gen.else(); } } } exports.validatePropertyDeps = validatePropertyDeps; function validateSchemaDeps(cxt, schemaDeps = cxt.schema) { const { gen, data, keyword, it } = cxt; const valid = gen.name("valid"); for (const prop in schemaDeps) { if ((0, util_1.alwaysValidSchema)(it, schemaDeps[prop])) continue; gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties), () => { const schCxt = cxt.subschema({ keyword, schemaProp: prop }, valid); cxt.mergeValidEvaluated(schCxt, valid); }, () => gen.var(valid, true)); cxt.ok(valid); } } exports.validateSchemaDeps = validateSchemaDeps; exports.default = def; }); var require_propertyNames2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: "property name must be valid", params: ({ params }) => (0, codegen_1._)`{propertyName: ${params.propertyName}}` }; var def = { keyword: "propertyNames", type: "object", schemaType: ["object", "boolean"], error: error2, code(cxt) { const { gen, schema, data, it } = cxt; if ((0, util_1.alwaysValidSchema)(it, schema)) return; const valid = gen.name("valid"); gen.forIn("key", data, (key) => { cxt.setParams({ propertyName: key }); cxt.subschema({ keyword: "propertyNames", data: key, dataTypes: ["string"], propertyName: key, compositeRule: true }, valid); gen.if((0, codegen_1.not)(valid), () => { cxt.error(true); if (!it.allErrors) gen.break(); }); }); cxt.ok(valid); } }; exports.default = def; }); var require_additionalProperties2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code22(); var codegen_1 = require_codegen2(); var names_1 = require_names2(); var util_1 = require_util2(); var error2 = { message: "must NOT have additional properties", params: ({ params }) => (0, codegen_1._)`{additionalProperty: ${params.additionalProperty}}` }; var def = { keyword: "additionalProperties", type: ["object"], schemaType: ["boolean", "object"], allowUndefined: true, trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, data, errsCount, it } = cxt; if (!errsCount) throw new Error("ajv implementation error"); const { allErrors, opts } = it; it.props = true; if (opts.removeAdditional !== "all" && (0, util_1.alwaysValidSchema)(it, schema)) return; const props = (0, code_1.allSchemaProperties)(parentSchema.properties); const patProps = (0, code_1.allSchemaProperties)(parentSchema.patternProperties); checkAdditionalProperties(); cxt.ok((0, codegen_1._)`${errsCount} === ${names_1.default.errors}`); function checkAdditionalProperties() { gen.forIn("key", data, (key) => { if (!props.length && !patProps.length) additionalPropertyCode(key); else gen.if(isAdditional(key), () => additionalPropertyCode(key)); }); } function isAdditional(key) { let definedProp; if (props.length > 8) { const propsSchema = (0, util_1.schemaRefOrVal)(it, parentSchema.properties, "properties"); definedProp = (0, code_1.isOwnProperty)(gen, propsSchema, key); } else if (props.length) { definedProp = (0, codegen_1.or)(...props.map((p) => (0, codegen_1._)`${key} === ${p}`)); } else { definedProp = codegen_1.nil; } if (patProps.length) { definedProp = (0, codegen_1.or)(definedProp, ...patProps.map((p) => (0, codegen_1._)`${(0, code_1.usePattern)(cxt, p)}.test(${key})`)); } return (0, codegen_1.not)(definedProp); } function deleteAdditional(key) { gen.code((0, codegen_1._)`delete ${data}[${key}]`); } function additionalPropertyCode(key) { if (opts.removeAdditional === "all" || opts.removeAdditional && schema === false) { deleteAdditional(key); return; } if (schema === false) { cxt.setParams({ additionalProperty: key }); cxt.error(); if (!allErrors) gen.break(); return; } if (typeof schema == "object" && !(0, util_1.alwaysValidSchema)(it, schema)) { const valid = gen.name("valid"); if (opts.removeAdditional === "failing") { applyAdditionalSchema(key, valid, false); gen.if((0, codegen_1.not)(valid), () => { cxt.reset(); deleteAdditional(key); }); } else { applyAdditionalSchema(key, valid); if (!allErrors) gen.if((0, codegen_1.not)(valid), () => gen.break()); } } } function applyAdditionalSchema(key, valid, errors3) { const subschema = { keyword: "additionalProperties", dataProp: key, dataPropType: util_1.Type.Str }; if (errors3 === false) { Object.assign(subschema, { compositeRule: true, createErrors: false, allErrors: false }); } cxt.subschema(subschema, valid); } } }; exports.default = def; }); var require_properties2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var validate_1 = require_validate2(); var code_1 = require_code22(); var util_1 = require_util2(); var additionalProperties_1 = require_additionalProperties2(); var def = { keyword: "properties", type: "object", schemaType: "object", code(cxt) { const { gen, schema, parentSchema, data, it } = cxt; if (it.opts.removeAdditional === "all" && parentSchema.additionalProperties === undefined) { additionalProperties_1.default.code(new validate_1.KeywordCxt(it, additionalProperties_1.default, "additionalProperties")); } const allProps = (0, code_1.allSchemaProperties)(schema); for (const prop of allProps) { it.definedProperties.add(prop); } if (it.opts.unevaluated && allProps.length && it.props !== true) { it.props = util_1.mergeEvaluated.props(gen, (0, util_1.toHash)(allProps), it.props); } const properties = allProps.filter((p) => !(0, util_1.alwaysValidSchema)(it, schema[p])); if (properties.length === 0) return; const valid = gen.name("valid"); for (const prop of properties) { if (hasDefault(prop)) { applyPropertySchema(prop); } else { gen.if((0, code_1.propertyInData)(gen, data, prop, it.opts.ownProperties)); applyPropertySchema(prop); if (!it.allErrors) gen.else().var(valid, true); gen.endIf(); } cxt.it.definedProperties.add(prop); cxt.ok(valid); } function hasDefault(prop) { return it.opts.useDefaults && !it.compositeRule && schema[prop].default !== undefined; } function applyPropertySchema(prop) { cxt.subschema({ keyword: "properties", schemaProp: prop, dataProp: prop }, valid); } } }; exports.default = def; }); var require_patternProperties2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code22(); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var util_2 = require_util2(); var def = { keyword: "patternProperties", type: "object", schemaType: "object", code(cxt) { const { gen, schema, data, parentSchema, it } = cxt; const { opts } = it; const patterns = (0, code_1.allSchemaProperties)(schema); const alwaysValidPatterns = patterns.filter((p) => (0, util_1.alwaysValidSchema)(it, schema[p])); if (patterns.length === 0 || alwaysValidPatterns.length === patterns.length && (!it.opts.unevaluated || it.props === true)) { return; } const checkProperties = opts.strictSchema && !opts.allowMatchingProperties && parentSchema.properties; const valid = gen.name("valid"); if (it.props !== true && !(it.props instanceof codegen_1.Name)) { it.props = (0, util_2.evaluatedPropsToName)(gen, it.props); } const { props } = it; validatePatternProperties(); function validatePatternProperties() { for (const pat of patterns) { if (checkProperties) checkMatchingProperties(pat); if (it.allErrors) { validateProperties(pat); } else { gen.var(valid, true); validateProperties(pat); gen.if(valid); } } } function checkMatchingProperties(pat) { for (const prop in checkProperties) { if (new RegExp(pat).test(prop)) { (0, util_1.checkStrictMode)(it, `property ${prop} matches pattern ${pat} (use allowMatchingProperties)`); } } } function validateProperties(pat) { gen.forIn("key", data, (key) => { gen.if((0, codegen_1._)`${(0, code_1.usePattern)(cxt, pat)}.test(${key})`, () => { const alwaysValid = alwaysValidPatterns.includes(pat); if (!alwaysValid) { cxt.subschema({ keyword: "patternProperties", schemaProp: pat, dataProp: key, dataPropType: util_2.Type.Str }, valid); } if (it.opts.unevaluated && props !== true) { gen.assign((0, codegen_1._)`${props}[${key}]`, true); } else if (!alwaysValid && !it.allErrors) { gen.if((0, codegen_1.not)(valid), () => gen.break()); } }); }); } } }; exports.default = def; }); var require_not2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util2(); var def = { keyword: "not", schemaType: ["object", "boolean"], trackErrors: true, code(cxt) { const { gen, schema, it } = cxt; if ((0, util_1.alwaysValidSchema)(it, schema)) { cxt.fail(); return; } const valid = gen.name("valid"); cxt.subschema({ keyword: "not", compositeRule: true, createErrors: false, allErrors: false }, valid); cxt.failResult(valid, () => cxt.reset(), () => cxt.error()); }, error: { message: "must NOT be valid" } }; exports.default = def; }); var require_anyOf2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var code_1 = require_code22(); var def = { keyword: "anyOf", schemaType: "array", trackErrors: true, code: code_1.validateUnion, error: { message: "must match a schema in anyOf" } }; exports.default = def; }); var require_oneOf2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: "must match exactly one schema in oneOf", params: ({ params }) => (0, codegen_1._)`{passingSchemas: ${params.passing}}` }; var def = { keyword: "oneOf", schemaType: "array", trackErrors: true, error: error2, code(cxt) { const { gen, schema, parentSchema, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); if (it.opts.discriminator && parentSchema.discriminator) return; const schArr = schema; const valid = gen.let("valid", false); const passing = gen.let("passing", null); const schValid = gen.name("_valid"); cxt.setParams({ passing }); gen.block(validateOneOf); cxt.result(valid, () => cxt.reset(), () => cxt.error(true)); function validateOneOf() { schArr.forEach((sch, i) => { let schCxt; if ((0, util_1.alwaysValidSchema)(it, sch)) { gen.var(schValid, true); } else { schCxt = cxt.subschema({ keyword: "oneOf", schemaProp: i, compositeRule: true }, schValid); } if (i > 0) { gen.if((0, codegen_1._)`${schValid} && ${valid}`).assign(valid, false).assign(passing, (0, codegen_1._)`[${passing}, ${i}]`).else(); } gen.if(schValid, () => { gen.assign(valid, true); gen.assign(passing, i); if (schCxt) cxt.mergeEvaluated(schCxt, codegen_1.Name); }); }); } } }; exports.default = def; }); var require_allOf2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util2(); var def = { keyword: "allOf", schemaType: "array", code(cxt) { const { gen, schema, it } = cxt; if (!Array.isArray(schema)) throw new Error("ajv implementation error"); const valid = gen.name("valid"); schema.forEach((sch, i) => { if ((0, util_1.alwaysValidSchema)(it, sch)) return; const schCxt = cxt.subschema({ keyword: "allOf", schemaProp: i }, valid); cxt.ok(valid); cxt.mergeEvaluated(schCxt); }); } }; exports.default = def; }); var require_if2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var util_1 = require_util2(); var error2 = { message: ({ params }) => (0, codegen_1.str)`must match "${params.ifClause}" schema`, params: ({ params }) => (0, codegen_1._)`{failingKeyword: ${params.ifClause}}` }; var def = { keyword: "if", schemaType: ["object", "boolean"], trackErrors: true, error: error2, code(cxt) { const { gen, parentSchema, it } = cxt; if (parentSchema.then === undefined && parentSchema.else === undefined) { (0, util_1.checkStrictMode)(it, '"if" without "then" and "else" is ignored'); } const hasThen = hasSchema(it, "then"); const hasElse = hasSchema(it, "else"); if (!hasThen && !hasElse) return; const valid = gen.let("valid", true); const schValid = gen.name("_valid"); validateIf(); cxt.reset(); if (hasThen && hasElse) { const ifClause = gen.let("ifClause"); cxt.setParams({ ifClause }); gen.if(schValid, validateClause("then", ifClause), validateClause("else", ifClause)); } else if (hasThen) { gen.if(schValid, validateClause("then")); } else { gen.if((0, codegen_1.not)(schValid), validateClause("else")); } cxt.pass(valid, () => cxt.error(true)); function validateIf() { const schCxt = cxt.subschema({ keyword: "if", compositeRule: true, createErrors: false, allErrors: false }, schValid); cxt.mergeEvaluated(schCxt); } function validateClause(keyword, ifClause) { return () => { const schCxt = cxt.subschema({ keyword }, schValid); gen.assign(valid, schValid); cxt.mergeValidEvaluated(schCxt, valid); if (ifClause) gen.assign(ifClause, (0, codegen_1._)`${keyword}`); else cxt.setParams({ ifClause: keyword }); }; } } }; function hasSchema(it, keyword) { const schema = it.schema[keyword]; return schema !== undefined && !(0, util_1.alwaysValidSchema)(it, schema); } exports.default = def; }); var require_thenElse2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var util_1 = require_util2(); var def = { keyword: ["then", "else"], schemaType: ["object", "boolean"], code({ keyword, parentSchema, it }) { if (parentSchema.if === undefined) (0, util_1.checkStrictMode)(it, `"${keyword}" without "if" is ignored`); } }; exports.default = def; }); var require_applicator2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var additionalItems_1 = require_additionalItems2(); var prefixItems_1 = require_prefixItems2(); var items_1 = require_items2(); var items2020_1 = require_items20202(); var contains_1 = require_contains2(); var dependencies_1 = require_dependencies2(); var propertyNames_1 = require_propertyNames2(); var additionalProperties_1 = require_additionalProperties2(); var properties_1 = require_properties2(); var patternProperties_1 = require_patternProperties2(); var not_1 = require_not2(); var anyOf_1 = require_anyOf2(); var oneOf_1 = require_oneOf2(); var allOf_1 = require_allOf2(); var if_1 = require_if2(); var thenElse_1 = require_thenElse2(); function getApplicator(draft2020 = false) { const applicator = [ not_1.default, anyOf_1.default, oneOf_1.default, allOf_1.default, if_1.default, thenElse_1.default, propertyNames_1.default, additionalProperties_1.default, dependencies_1.default, properties_1.default, patternProperties_1.default ]; if (draft2020) applicator.push(prefixItems_1.default, items2020_1.default); else applicator.push(additionalItems_1.default, items_1.default); applicator.push(contains_1.default); return applicator; } exports.default = getApplicator; }); var require_format3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var error2 = { message: ({ schemaCode }) => (0, codegen_1.str)`must match format "${schemaCode}"`, params: ({ schemaCode }) => (0, codegen_1._)`{format: ${schemaCode}}` }; var def = { keyword: "format", type: ["number", "string"], schemaType: "string", $data: true, error: error2, code(cxt, ruleType) { const { gen, data, $data, schema, schemaCode, it } = cxt; const { opts, errSchemaPath, schemaEnv, self: self2 } = it; if (!opts.validateFormats) return; if ($data) validate$DataFormat(); else validateFormat(); function validate$DataFormat() { const fmts = gen.scopeValue("formats", { ref: self2.formats, code: opts.code.formats }); const fDef = gen.const("fDef", (0, codegen_1._)`${fmts}[${schemaCode}]`); const fType = gen.let("fType"); const format = gen.let("format"); gen.if((0, codegen_1._)`typeof ${fDef} == "object" && !(${fDef} instanceof RegExp)`, () => gen.assign(fType, (0, codegen_1._)`${fDef}.type || "string"`).assign(format, (0, codegen_1._)`${fDef}.validate`), () => gen.assign(fType, (0, codegen_1._)`"string"`).assign(format, fDef)); cxt.fail$data((0, codegen_1.or)(unknownFmt(), invalidFmt())); function unknownFmt() { if (opts.strictSchema === false) return codegen_1.nil; return (0, codegen_1._)`${schemaCode} && !${format}`; } function invalidFmt() { const callFormat = schemaEnv.$async ? (0, codegen_1._)`(${fDef}.async ? await ${format}(${data}) : ${format}(${data}))` : (0, codegen_1._)`${format}(${data})`; const validData = (0, codegen_1._)`(typeof ${format} == "function" ? ${callFormat} : ${format}.test(${data}))`; return (0, codegen_1._)`${format} && ${format} !== true && ${fType} === ${ruleType} && !${validData}`; } } function validateFormat() { const formatDef = self2.formats[schema]; if (!formatDef) { unknownFormat(); return; } if (formatDef === true) return; const [fmtType, format, fmtRef] = getFormat(formatDef); if (fmtType === ruleType) cxt.pass(validCondition()); function unknownFormat() { if (opts.strictSchema === false) { self2.logger.warn(unknownMsg()); return; } throw new Error(unknownMsg()); function unknownMsg() { return `unknown format "${schema}" ignored in schema at path "${errSchemaPath}"`; } } function getFormat(fmtDef) { const code = fmtDef instanceof RegExp ? (0, codegen_1.regexpCode)(fmtDef) : opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(schema)}` : undefined; const fmt = gen.scopeValue("formats", { key: schema, ref: fmtDef, code }); if (typeof fmtDef == "object" && !(fmtDef instanceof RegExp)) { return [fmtDef.type || "string", fmtDef.validate, (0, codegen_1._)`${fmt}.validate`]; } return ["string", fmtDef, fmt]; } function validCondition() { if (typeof formatDef == "object" && !(formatDef instanceof RegExp) && formatDef.async) { if (!schemaEnv.$async) throw new Error("async format in sync schema"); return (0, codegen_1._)`await ${fmtRef}(${data})`; } return typeof format == "function" ? (0, codegen_1._)`${fmtRef}(${data})` : (0, codegen_1._)`${fmtRef}.test(${data})`; } } } }; exports.default = def; }); var require_format22 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var format_1 = require_format3(); var format = [format_1.default]; exports.default = format; }); var require_metadata2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.contentVocabulary = exports.metadataVocabulary = undefined; exports.metadataVocabulary = [ "title", "description", "default", "deprecated", "readOnly", "writeOnly", "examples" ]; exports.contentVocabulary = [ "contentMediaType", "contentEncoding", "contentSchema" ]; }); var require_draft72 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require_core22(); var validation_1 = require_validation2(); var applicator_1 = require_applicator2(); var format_1 = require_format22(); var metadata_1 = require_metadata2(); var draft7Vocabularies = [ core_1.default, validation_1.default, (0, applicator_1.default)(), format_1.default, metadata_1.metadataVocabulary, metadata_1.contentVocabulary ]; exports.default = draft7Vocabularies; }); var require_types3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.DiscrError = undefined; var DiscrError; (function(DiscrError2) { DiscrError2["Tag"] = "tag"; DiscrError2["Mapping"] = "mapping"; })(DiscrError || (exports.DiscrError = DiscrError = {})); }); var require_discriminator2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); var codegen_1 = require_codegen2(); var types_1 = require_types3(); var compile_1 = require_compile2(); var ref_error_1 = require_ref_error2(); var util_1 = require_util2(); var error2 = { message: ({ params: { discrError, tagName } }) => discrError === types_1.DiscrError.Tag ? `tag "${tagName}" must be string` : `value of tag "${tagName}" must be in oneOf`, params: ({ params: { discrError, tag, tagName } }) => (0, codegen_1._)`{error: ${discrError}, tag: ${tagName}, tagValue: ${tag}}` }; var def = { keyword: "discriminator", type: "object", schemaType: "object", error: error2, code(cxt) { const { gen, data, schema, parentSchema, it } = cxt; const { oneOf } = parentSchema; if (!it.opts.discriminator) { throw new Error("discriminator: requires discriminator option"); } const tagName = schema.propertyName; if (typeof tagName != "string") throw new Error("discriminator: requires propertyName"); if (schema.mapping) throw new Error("discriminator: mapping is not supported"); if (!oneOf) throw new Error("discriminator: requires oneOf keyword"); const valid = gen.let("valid", false); const tag = gen.const("tag", (0, codegen_1._)`${data}${(0, codegen_1.getProperty)(tagName)}`); gen.if((0, codegen_1._)`typeof ${tag} == "string"`, () => validateMapping(), () => cxt.error(false, { discrError: types_1.DiscrError.Tag, tag, tagName })); cxt.ok(valid); function validateMapping() { const mapping = getMapping(); gen.if(false); for (const tagValue in mapping) { gen.elseIf((0, codegen_1._)`${tag} === ${tagValue}`); gen.assign(valid, applyTagSchema(mapping[tagValue])); } gen.else(); cxt.error(false, { discrError: types_1.DiscrError.Mapping, tag, tagName }); gen.endIf(); } function applyTagSchema(schemaProp) { const _valid = gen.name("valid"); const schCxt = cxt.subschema({ keyword: "oneOf", schemaProp }, _valid); cxt.mergeEvaluated(schCxt, codegen_1.Name); return _valid; } function getMapping() { var _a2; const oneOfMapping = {}; const topRequired = hasRequired(parentSchema); let tagRequired = true; for (let i = 0;i < oneOf.length; i++) { let sch = oneOf[i]; if ((sch === null || sch === undefined ? undefined : sch.$ref) && !(0, util_1.schemaHasRulesButRef)(sch, it.self.RULES)) { const ref = sch.$ref; sch = compile_1.resolveRef.call(it.self, it.schemaEnv.root, it.baseId, ref); if (sch instanceof compile_1.SchemaEnv) sch = sch.schema; if (sch === undefined) throw new ref_error_1.default(it.opts.uriResolver, it.baseId, ref); } const propSch = (_a2 = sch === null || sch === undefined ? undefined : sch.properties) === null || _a2 === undefined ? undefined : _a2[tagName]; if (typeof propSch != "object") { throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${tagName}"`); } tagRequired = tagRequired && (topRequired || hasRequired(sch)); addMappings(propSch, i); } if (!tagRequired) throw new Error(`discriminator: "${tagName}" must be required`); return oneOfMapping; function hasRequired({ required: required2 }) { return Array.isArray(required2) && required2.includes(tagName); } function addMappings(sch, i) { if (sch.const) { addMapping(sch.const, i); } else if (sch.enum) { for (const tagValue of sch.enum) { addMapping(tagValue, i); } } else { throw new Error(`discriminator: "properties/${tagName}" must have "const" or "enum"`); } } function addMapping(tagValue, i) { if (typeof tagValue != "string" || tagValue in oneOfMapping) { throw new Error(`discriminator: "${tagName}" values must be unique strings`); } oneOfMapping[tagValue] = i; } } } }; exports.default = def; }); var require_json_schema_draft_072 = __commonJS2((exports, module) => { module.exports = { $schema: "http://json-schema.org/draft-07/schema#", $id: "http://json-schema.org/draft-07/schema#", title: "Core schema meta-schema", definitions: { schemaArray: { type: "array", minItems: 1, items: { $ref: "#" } }, nonNegativeInteger: { type: "integer", minimum: 0 }, nonNegativeIntegerDefault0: { allOf: [{ $ref: "#/definitions/nonNegativeInteger" }, { default: 0 }] }, simpleTypes: { enum: ["array", "boolean", "integer", "null", "number", "object", "string"] }, stringArray: { type: "array", items: { type: "string" }, uniqueItems: true, default: [] } }, type: ["object", "boolean"], properties: { $id: { type: "string", format: "uri-reference" }, $schema: { type: "string", format: "uri" }, $ref: { type: "string", format: "uri-reference" }, $comment: { type: "string" }, title: { type: "string" }, description: { type: "string" }, default: true, readOnly: { type: "boolean", default: false }, examples: { type: "array", items: true }, multipleOf: { type: "number", exclusiveMinimum: 0 }, maximum: { type: "number" }, exclusiveMaximum: { type: "number" }, minimum: { type: "number" }, exclusiveMinimum: { type: "number" }, maxLength: { $ref: "#/definitions/nonNegativeInteger" }, minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, pattern: { type: "string", format: "regex" }, additionalItems: { $ref: "#" }, items: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/schemaArray" }], default: true }, maxItems: { $ref: "#/definitions/nonNegativeInteger" }, minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, uniqueItems: { type: "boolean", default: false }, contains: { $ref: "#" }, maxProperties: { $ref: "#/definitions/nonNegativeInteger" }, minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" }, required: { $ref: "#/definitions/stringArray" }, additionalProperties: { $ref: "#" }, definitions: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, properties: { type: "object", additionalProperties: { $ref: "#" }, default: {} }, patternProperties: { type: "object", additionalProperties: { $ref: "#" }, propertyNames: { format: "regex" }, default: {} }, dependencies: { type: "object", additionalProperties: { anyOf: [{ $ref: "#" }, { $ref: "#/definitions/stringArray" }] } }, propertyNames: { $ref: "#" }, const: true, enum: { type: "array", items: true, minItems: 1, uniqueItems: true }, type: { anyOf: [ { $ref: "#/definitions/simpleTypes" }, { type: "array", items: { $ref: "#/definitions/simpleTypes" }, minItems: 1, uniqueItems: true } ] }, format: { type: "string" }, contentMediaType: { type: "string" }, contentEncoding: { type: "string" }, if: { $ref: "#" }, then: { $ref: "#" }, else: { $ref: "#" }, allOf: { $ref: "#/definitions/schemaArray" }, anyOf: { $ref: "#/definitions/schemaArray" }, oneOf: { $ref: "#/definitions/schemaArray" }, not: { $ref: "#" } }, default: true }; }); var require_ajv2 = __commonJS2((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.MissingRefError = exports.ValidationError = exports.CodeGen = exports.Name = exports.nil = exports.stringify = exports.str = exports._ = exports.KeywordCxt = exports.Ajv = undefined; var core_1 = require_core3(); var draft7_1 = require_draft72(); var discriminator_1 = require_discriminator2(); var draft7MetaSchema = require_json_schema_draft_072(); var META_SUPPORT_DATA = ["/properties"]; var META_SCHEMA_ID = "http://json-schema.org/draft-07/schema"; class Ajv2 extends core_1.default { _addVocabularies() { super._addVocabularies(); draft7_1.default.forEach((v) => this.addVocabulary(v)); if (this.opts.discriminator) this.addKeyword(discriminator_1.default); } _addDefaultMetaSchema() { super._addDefaultMetaSchema(); if (!this.opts.meta) return; const metaSchema = this.opts.$data ? this.$dataMetaSchema(draft7MetaSchema, META_SUPPORT_DATA) : draft7MetaSchema; this.addMetaSchema(metaSchema, META_SCHEMA_ID, false); this.refs["http://json-schema.org/schema"] = META_SCHEMA_ID; } defaultMeta() { return this.opts.defaultMeta = super.defaultMeta() || (this.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : undefined); } } exports.Ajv = Ajv2; module.exports = exports = Ajv2; module.exports.Ajv = Ajv2; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = Ajv2; var validate_1 = require_validate2(); Object.defineProperty(exports, "KeywordCxt", { enumerable: true, get: function() { return validate_1.KeywordCxt; } }); var codegen_1 = require_codegen2(); Object.defineProperty(exports, "_", { enumerable: true, get: function() { return codegen_1._; } }); Object.defineProperty(exports, "str", { enumerable: true, get: function() { return codegen_1.str; } }); Object.defineProperty(exports, "stringify", { enumerable: true, get: function() { return codegen_1.stringify; } }); Object.defineProperty(exports, "nil", { enumerable: true, get: function() { return codegen_1.nil; } }); Object.defineProperty(exports, "Name", { enumerable: true, get: function() { return codegen_1.Name; } }); Object.defineProperty(exports, "CodeGen", { enumerable: true, get: function() { return codegen_1.CodeGen; } }); var validation_error_1 = require_validation_error2(); Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function() { return validation_error_1.default; } }); var ref_error_1 = require_ref_error2(); Object.defineProperty(exports, "MissingRefError", { enumerable: true, get: function() { return ref_error_1.default; } }); }); var require_formats3 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatNames = exports.fastFormats = exports.fullFormats = undefined; function fmtDef(validate, compare) { return { validate, compare }; } exports.fullFormats = { date: fmtDef(date4, compareDate), time: fmtDef(getTime(true), compareTime), "date-time": fmtDef(getDateTime(true), compareDateTime), "iso-time": fmtDef(getTime(), compareIsoTime), "iso-date-time": fmtDef(getDateTime(), compareIsoDateTime), duration: /^P(?!$)((\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?|(\d+W)?)$/, uri, "uri-reference": /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i, "uri-template": /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i, url: /^(?:https?|ftp):\/\/(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)(?:\.(?:[a-z0-9\u{00a1}-\u{ffff}]+-)*[a-z0-9\u{00a1}-\u{ffff}]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu, email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i, hostname: /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i, ipv4: /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/, ipv6: /^((([0-9a-f]{1,4}:){7}([0-9a-f]{1,4}|:))|(([0-9a-f]{1,4}:){6}(:[0-9a-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){5}(((:[0-9a-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9a-f]{1,4}:){4}(((:[0-9a-f]{1,4}){1,3})|((:[0-9a-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){3}(((:[0-9a-f]{1,4}){1,4})|((:[0-9a-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){2}(((:[0-9a-f]{1,4}){1,5})|((:[0-9a-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9a-f]{1,4}:){1}(((:[0-9a-f]{1,4}){1,6})|((:[0-9a-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9a-f]{1,4}){1,7})|((:[0-9a-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))$/i, regex, uuid: /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i, "json-pointer": /^(?:\/(?:[^~/]|~0|~1)*)*$/, "json-pointer-uri-fragment": /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i, "relative-json-pointer": /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/, byte, int32: { type: "number", validate: validateInt32 }, int64: { type: "number", validate: validateInt64 }, float: { type: "number", validate: validateNumber }, double: { type: "number", validate: validateNumber }, password: true, binary: true }; exports.fastFormats = { ...exports.fullFormats, date: fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d$/, compareDate), time: fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareTime), "date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\dt(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i, compareDateTime), "iso-time": fmtDef(/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoTime), "iso-date-time": fmtDef(/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i, compareIsoDateTime), uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i, "uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i, email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i }; exports.formatNames = Object.keys(exports.fullFormats); function isLeapYear(year) { return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); } var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/; var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function date4(str) { const matches = DATE.exec(str); if (!matches) return false; const year = +matches[1]; const month = +matches[2]; const day = +matches[3]; return month >= 1 && month <= 12 && day >= 1 && day <= (month === 2 && isLeapYear(year) ? 29 : DAYS[month]); } function compareDate(d1, d2) { if (!(d1 && d2)) return; if (d1 > d2) return 1; if (d1 < d2) return -1; return 0; } var TIME = /^(\d\d):(\d\d):(\d\d(?:\.\d+)?)(z|([+-])(\d\d)(?::?(\d\d))?)?$/i; function getTime(strictTimeZone) { return function time3(str) { const matches = TIME.exec(str); if (!matches) return false; const hr = +matches[1]; const min = +matches[2]; const sec = +matches[3]; const tz = matches[4]; const tzSign = matches[5] === "-" ? -1 : 1; const tzH = +(matches[6] || 0); const tzM = +(matches[7] || 0); if (tzH > 23 || tzM > 59 || strictTimeZone && !tz) return false; if (hr <= 23 && min <= 59 && sec < 60) return true; const utcMin = min - tzM * tzSign; const utcHr = hr - tzH * tzSign - (utcMin < 0 ? 1 : 0); return (utcHr === 23 || utcHr === -1) && (utcMin === 59 || utcMin === -1) && sec < 61; }; } function compareTime(s1, s2) { if (!(s1 && s2)) return; const t1 = new Date("2020-01-01T" + s1).valueOf(); const t2 = new Date("2020-01-01T" + s2).valueOf(); if (!(t1 && t2)) return; return t1 - t2; } function compareIsoTime(t1, t2) { if (!(t1 && t2)) return; const a1 = TIME.exec(t1); const a2 = TIME.exec(t2); if (!(a1 && a2)) return; t1 = a1[1] + a1[2] + a1[3]; t2 = a2[1] + a2[2] + a2[3]; if (t1 > t2) return 1; if (t1 < t2) return -1; return 0; } var DATE_TIME_SEPARATOR = /t|\s/i; function getDateTime(strictTimeZone) { const time3 = getTime(strictTimeZone); return function date_time(str) { const dateTime = str.split(DATE_TIME_SEPARATOR); return dateTime.length === 2 && date4(dateTime[0]) && time3(dateTime[1]); }; } function compareDateTime(dt1, dt2) { if (!(dt1 && dt2)) return; const d1 = new Date(dt1).valueOf(); const d2 = new Date(dt2).valueOf(); if (!(d1 && d2)) return; return d1 - d2; } function compareIsoDateTime(dt1, dt2) { if (!(dt1 && dt2)) return; const [d1, t1] = dt1.split(DATE_TIME_SEPARATOR); const [d2, t2] = dt2.split(DATE_TIME_SEPARATOR); const res = compareDate(d1, d2); if (res === undefined) return; return res || compareTime(t1, t2); } var NOT_URI_FRAGMENT = /\/|:/; var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i; function uri(str) { return NOT_URI_FRAGMENT.test(str) && URI.test(str); } var BYTE = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/gm; function byte(str) { BYTE.lastIndex = 0; return BYTE.test(str); } var MIN_INT32 = -(2 ** 31); var MAX_INT32 = 2 ** 31 - 1; function validateInt32(value) { return Number.isInteger(value) && value <= MAX_INT32 && value >= MIN_INT32; } function validateInt64(value) { return Number.isInteger(value); } function validateNumber() { return true; } var Z_ANCHOR = /[^\\]\\Z/; function regex(str) { if (Z_ANCHOR.test(str)) return false; try { new RegExp(str); return true; } catch (e) { return false; } } }); var require_limit2 = __commonJS2((exports) => { Object.defineProperty(exports, "__esModule", { value: true }); exports.formatLimitDefinition = undefined; var ajv_1 = require_ajv2(); var codegen_1 = require_codegen2(); var ops = codegen_1.operators; var KWDs = { formatMaximum: { okStr: "<=", ok: ops.LTE, fail: ops.GT }, formatMinimum: { okStr: ">=", ok: ops.GTE, fail: ops.LT }, formatExclusiveMaximum: { okStr: "<", ok: ops.LT, fail: ops.GTE }, formatExclusiveMinimum: { okStr: ">", ok: ops.GT, fail: ops.LTE } }; var error2 = { message: ({ keyword, schemaCode }) => (0, codegen_1.str)`should be ${KWDs[keyword].okStr} ${schemaCode}`, params: ({ keyword, schemaCode }) => (0, codegen_1._)`{comparison: ${KWDs[keyword].okStr}, limit: ${schemaCode}}` }; exports.formatLimitDefinition = { keyword: Object.keys(KWDs), type: "string", schemaType: "string", $data: true, error: error2, code(cxt) { const { gen, data, schemaCode, keyword, it } = cxt; const { opts, self: self2 } = it; if (!opts.validateFormats) return; const fCxt = new ajv_1.KeywordCxt(it, self2.RULES.all.format.definition, "format"); if (fCxt.$data) validate$DataFormat(); else validateFormat(); function validate$DataFormat() { const fmts = gen.scopeValue("formats", { ref: self2.formats, code: opts.code.formats }); const fmt = gen.const("fmt", (0, codegen_1._)`${fmts}[${fCxt.schemaCode}]`); cxt.fail$data((0, codegen_1.or)((0, codegen_1._)`typeof ${fmt} != "object"`, (0, codegen_1._)`${fmt} instanceof RegExp`, (0, codegen_1._)`typeof ${fmt}.compare != "function"`, compareCode(fmt))); } function validateFormat() { const format = fCxt.schema; const fmtDef = self2.formats[format]; if (!fmtDef || fmtDef === true) return; if (typeof fmtDef != "object" || fmtDef instanceof RegExp || typeof fmtDef.compare != "function") { throw new Error(`"${keyword}": format "${format}" does not define "compare" function`); } const fmt = gen.scopeValue("formats", { key: format, ref: fmtDef, code: opts.code.formats ? (0, codegen_1._)`${opts.code.formats}${(0, codegen_1.getProperty)(format)}` : undefined }); cxt.fail$data(compareCode(fmt)); } function compareCode(fmt) { return (0, codegen_1._)`${fmt}.compare(${data}, ${schemaCode}) ${KWDs[keyword].fail} 0`; } }, dependencies: ["format"] }; var formatLimitPlugin = (ajv) => { ajv.addKeyword(exports.formatLimitDefinition); return ajv; }; exports.default = formatLimitPlugin; }); var require_dist2 = __commonJS2((exports, module) => { Object.defineProperty(exports, "__esModule", { value: true }); var formats_1 = require_formats3(); var limit_1 = require_limit2(); var codegen_1 = require_codegen2(); var fullName = new codegen_1.Name("fullFormats"); var fastName = new codegen_1.Name("fastFormats"); var formatsPlugin = (ajv, opts = { keywords: true }) => { if (Array.isArray(opts)) { addFormats(ajv, opts, formats_1.fullFormats, fullName); return ajv; } const [formats, exportName] = opts.mode === "fast" ? [formats_1.fastFormats, fastName] : [formats_1.fullFormats, fullName]; const list = opts.formats || formats_1.formatNames; addFormats(ajv, list, formats, exportName); if (opts.keywords) (0, limit_1.default)(ajv); return ajv; }; formatsPlugin.get = (name, mode = "full") => { const formats = mode === "fast" ? formats_1.fastFormats : formats_1.fullFormats; const f = formats[name]; if (!f) throw new Error(`Unknown format "${name}"`); return f; }; function addFormats(ajv, list, fs22, exportName) { var _a2; var _b; (_a2 = (_b = ajv.opts.code).formats) !== null && _a2 !== undefined || (_b.formats = (0, codegen_1._)`require("ajv-formats/dist/formats").${exportName}`); for (const f of list) ajv.addFormat(f, fs22[f]); } module.exports = exports = formatsPlugin; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = formatsPlugin; }); var DEFAULT_MAX_LISTENERS = 50; function createAbortController(maxListeners = DEFAULT_MAX_LISTENERS) { const controller = new AbortController; setMaxListeners(maxListeners, controller.signal); return controller; } var freeGlobal = typeof global == "object" && global && global.Object === Object && global; var _freeGlobal_default = freeGlobal; var freeSelf = typeof self == "object" && self && self.Object === Object && self; var root = _freeGlobal_default || freeSelf || Function("return this")(); var _root_default = root; var Symbol2 = _root_default.Symbol; var _Symbol_default = Symbol2; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; var nativeObjectToString = objectProto.toString; var symToStringTag = _Symbol_default ? _Symbol_default.toStringTag : undefined; function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } var _getRawTag_default = getRawTag; var objectProto2 = Object.prototype; var nativeObjectToString2 = objectProto2.toString; function objectToString(value) { return nativeObjectToString2.call(value); } var _objectToString_default = objectToString; var nullTag = "[object Null]"; var undefinedTag = "[object Undefined]"; var symToStringTag2 = _Symbol_default ? _Symbol_default.toStringTag : undefined; function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag2 && symToStringTag2 in Object(value) ? _getRawTag_default(value) : _objectToString_default(value); } var _baseGetTag_default = baseGetTag; function isObject2(value) { var type = typeof value; return value != null && (type == "object" || type == "function"); } var isObject_default = isObject2; var asyncTag = "[object AsyncFunction]"; var funcTag = "[object Function]"; var genTag = "[object GeneratorFunction]"; var proxyTag = "[object Proxy]"; function isFunction(value) { if (!isObject_default(value)) { return false; } var tag = _baseGetTag_default(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } var isFunction_default = isFunction; var coreJsData = _root_default["__core-js_shared__"]; var _coreJsData_default = coreJsData; var maskSrcKey = function() { var uid = /[^.]+$/.exec(_coreJsData_default && _coreJsData_default.keys && _coreJsData_default.keys.IE_PROTO || ""); return uid ? "Symbol(src)_1." + uid : ""; }(); function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var _isMasked_default = isMasked; var funcProto = Function.prototype; var funcToString = funcProto.toString; function toSource(func) { if (func != null) { try { return funcToString.call(func); } catch (e) {} try { return func + ""; } catch (e) {} } return ""; } var _toSource_default = toSource; var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto2 = Function.prototype; var objectProto3 = Object.prototype; var funcToString2 = funcProto2.toString; var hasOwnProperty2 = objectProto3.hasOwnProperty; var reIsNative = RegExp("^" + funcToString2.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); function baseIsNative(value) { if (!isObject_default(value) || _isMasked_default(value)) { return false; } var pattern = isFunction_default(value) ? reIsNative : reIsHostCtor; return pattern.test(_toSource_default(value)); } var _baseIsNative_default = baseIsNative; function getValue(object4, key) { return object4 == null ? undefined : object4[key]; } var _getValue_default = getValue; function getNative(object4, key) { var value = _getValue_default(object4, key); return _baseIsNative_default(value) ? value : undefined; } var _getNative_default = getNative; var nativeCreate = _getNative_default(Object, "create"); var _nativeCreate_default = nativeCreate; function hashClear() { this.__data__ = _nativeCreate_default ? _nativeCreate_default(null) : {}; this.size = 0; } var _hashClear_default = hashClear; function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var _hashDelete_default = hashDelete; var HASH_UNDEFINED = "__lodash_hash_undefined__"; var objectProto4 = Object.prototype; var hasOwnProperty3 = objectProto4.hasOwnProperty; function hashGet(key) { var data = this.__data__; if (_nativeCreate_default) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty3.call(data, key) ? data[key] : undefined; } var _hashGet_default = hashGet; var objectProto5 = Object.prototype; var hasOwnProperty4 = objectProto5.hasOwnProperty; function hashHas(key) { var data = this.__data__; return _nativeCreate_default ? data[key] !== undefined : hasOwnProperty4.call(data, key); } var _hashHas_default = hashHas; var HASH_UNDEFINED2 = "__lodash_hash_undefined__"; function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = _nativeCreate_default && value === undefined ? HASH_UNDEFINED2 : value; return this; } var _hashSet_default = hashSet; function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } Hash.prototype.clear = _hashClear_default; Hash.prototype["delete"] = _hashDelete_default; Hash.prototype.get = _hashGet_default; Hash.prototype.has = _hashHas_default; Hash.prototype.set = _hashSet_default; var _Hash_default = Hash; function listCacheClear() { this.__data__ = []; this.size = 0; } var _listCacheClear_default = listCacheClear; function eq(value, other) { return value === other || value !== value && other !== other; } var eq_default = eq; function assocIndexOf(array3, key) { var length = array3.length; while (length--) { if (eq_default(array3[length][0], key)) { return length; } } return -1; } var _assocIndexOf_default = assocIndexOf; var arrayProto = Array.prototype; var splice = arrayProto.splice; function listCacheDelete(key) { var data = this.__data__, index = _assocIndexOf_default(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } var _listCacheDelete_default = listCacheDelete; function listCacheGet(key) { var data = this.__data__, index = _assocIndexOf_default(data, key); return index < 0 ? undefined : data[index][1]; } var _listCacheGet_default = listCacheGet; function listCacheHas(key) { return _assocIndexOf_default(this.__data__, key) > -1; } var _listCacheHas_default = listCacheHas; function listCacheSet(key, value) { var data = this.__data__, index = _assocIndexOf_default(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } var _listCacheSet_default = listCacheSet; function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } ListCache.prototype.clear = _listCacheClear_default; ListCache.prototype["delete"] = _listCacheDelete_default; ListCache.prototype.get = _listCacheGet_default; ListCache.prototype.has = _listCacheHas_default; ListCache.prototype.set = _listCacheSet_default; var _ListCache_default = ListCache; var Map2 = _getNative_default(_root_default, "Map"); var _Map_default = Map2; function mapCacheClear() { this.size = 0; this.__data__ = { hash: new _Hash_default, map: new (_Map_default || _ListCache_default), string: new _Hash_default }; } var _mapCacheClear_default = mapCacheClear; function isKeyable(value) { var type = typeof value; return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; } var _isKeyable_default = isKeyable; function getMapData(map2, key) { var data = map2.__data__; return _isKeyable_default(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; } var _getMapData_default = getMapData; function mapCacheDelete(key) { var result = _getMapData_default(this, key)["delete"](key); this.size -= result ? 1 : 0; return result; } var _mapCacheDelete_default = mapCacheDelete; function mapCacheGet(key) { return _getMapData_default(this, key).get(key); } var _mapCacheGet_default = mapCacheGet; function mapCacheHas(key) { return _getMapData_default(this, key).has(key); } var _mapCacheHas_default = mapCacheHas; function mapCacheSet(key, value) { var data = _getMapData_default(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } var _mapCacheSet_default = mapCacheSet; function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } MapCache.prototype.clear = _mapCacheClear_default; MapCache.prototype["delete"] = _mapCacheDelete_default; MapCache.prototype.get = _mapCacheGet_default; MapCache.prototype.has = _mapCacheHas_default; MapCache.prototype.set = _mapCacheSet_default; var _MapCache_default = MapCache; var FUNC_ERROR_TEXT = "Expected a function"; function memoize(func, resolver) { if (typeof func != "function" || resolver != null && typeof resolver != "function") { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || _MapCache_default); return memoized; } memoize.Cache = _MapCache_default; var memoize_default = memoize; var CHUNK_SIZE = 2000; function writeToStderr(data) { if (process.stderr.destroyed) { return; } for (let i = 0;i < data.length; i += CHUNK_SIZE) { process.stderr.write(data.substring(i, i + CHUNK_SIZE)); } } var parseDebugFilter = memoize_default((filterString) => { if (!filterString || filterString.trim() === "") { return null; } const filters = filterString.split(",").map((f) => f.trim()).filter(Boolean); if (filters.length === 0) { return null; } const hasExclusive = filters.some((f) => f.startsWith("!")); const hasInclusive = filters.some((f) => !f.startsWith("!")); if (hasExclusive && hasInclusive) { return null; } const cleanFilters = filters.map((f) => f.replace(/^!/, "").toLowerCase()); return { include: hasExclusive ? [] : cleanFilters, exclude: hasExclusive ? cleanFilters : [], isExclusive: hasExclusive }; }); function extractDebugCategories(message) { const categories = []; const mcpMatch = message.match(/^MCP server ["']([^"']+)["']/); if (mcpMatch && mcpMatch[1]) { categories.push("mcp"); categories.push(mcpMatch[1].toLowerCase()); } else { const prefixMatch = message.match(/^([^:[]+):/); if (prefixMatch && prefixMatch[1]) { categories.push(prefixMatch[1].trim().toLowerCase()); } } const bracketMatch = message.match(/^\[([^\]]+)]/); if (bracketMatch && bracketMatch[1]) { categories.push(bracketMatch[1].trim().toLowerCase()); } if (message.toLowerCase().includes("statsig event:")) { categories.push("statsig"); } const secondaryMatch = message.match(/:\s*([^:]+?)(?:\s+(?:type|mode|status|event))?:/); if (secondaryMatch && secondaryMatch[1]) { const secondary = secondaryMatch[1].trim().toLowerCase(); if (secondary.length < 30 && !secondary.includes(" ")) { categories.push(secondary); } } return Array.from(new Set(categories)); } function shouldShowDebugCategories(categories, filter) { if (!filter) { return true; } if (categories.length === 0) { return false; } if (filter.isExclusive) { return !categories.some((cat) => filter.exclude.includes(cat)); } else { return categories.some((cat) => filter.include.includes(cat)); } } function shouldShowDebugMessage(message, filter) { if (!filter) { return true; } const categories = extractDebugCategories(message); return shouldShowDebugCategories(categories, filter); } function getClaudeConfigHomeDir() { return process.env.CLAUDE_CONFIG_DIR ?? join8(homedir11(), ".claude"); } function isEnvTruthy(envVar) { if (!envVar) return false; if (typeof envVar === "boolean") return envVar; const normalizedValue = envVar.toLowerCase().trim(); return ["1", "true", "yes", "on"].includes(normalizedValue); } var MAX_OUTPUT_LENGTH = 150000; var DEFAULT_MAX_OUTPUT_LENGTH = 30000; function createMaxOutputLengthValidator(name) { return { name, default: DEFAULT_MAX_OUTPUT_LENGTH, validate: (value) => { if (!value) { return { effective: DEFAULT_MAX_OUTPUT_LENGTH, status: "valid" }; } const parsed = parseInt(value, 10); if (isNaN(parsed) || parsed <= 0) { return { effective: DEFAULT_MAX_OUTPUT_LENGTH, status: "invalid", message: `Invalid value "${value}" (using default: ${DEFAULT_MAX_OUTPUT_LENGTH})` }; } if (parsed > MAX_OUTPUT_LENGTH) { return { effective: MAX_OUTPUT_LENGTH, status: "capped", message: `Capped from ${parsed} to ${MAX_OUTPUT_LENGTH}` }; } return { effective: parsed, status: "valid" }; } }; } var bashMaxOutputLengthValidator = createMaxOutputLengthValidator("BASH_MAX_OUTPUT_LENGTH"); var taskMaxOutputLengthValidator = createMaxOutputLengthValidator("TASK_MAX_OUTPUT_LENGTH"); var maxOutputTokensValidator = { name: "CLAUDE_CODE_MAX_OUTPUT_TOKENS", default: 32000, validate: (value) => { const MAX_OUTPUT_TOKENS = 64000; const DEFAULT_MAX_OUTPUT_TOKENS = 32000; if (!value) { return { effective: DEFAULT_MAX_OUTPUT_TOKENS, status: "valid" }; } const parsed = parseInt(value, 10); if (isNaN(parsed) || parsed <= 0) { return { effective: DEFAULT_MAX_OUTPUT_TOKENS, status: "invalid", message: `Invalid value "${value}" (using default: ${DEFAULT_MAX_OUTPUT_TOKENS})` }; } if (parsed > MAX_OUTPUT_TOKENS) { return { effective: MAX_OUTPUT_TOKENS, status: "capped", message: `Capped from ${parsed} to ${MAX_OUTPUT_TOKENS}` }; } return { effective: parsed, status: "valid" }; } }; var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219"; var INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14"; var FINE_GRAINED_TOOL_STREAMING_BETA_HEADER = "fine-grained-tool-streaming-2025-05-14"; var SONNET_1M_BETA_HEADER = "context-1m-2025-08-07"; var CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27"; var TOOL_EXAMPLES_BETA_HEADER = "tool-examples-2025-10-29"; var TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19"; var BEDROCK_EXTRA_PARAMS_HEADERS = new Set([ INTERLEAVED_THINKING_BETA_HEADER, SONNET_1M_BETA_HEADER, TOOL_SEARCH_BETA_HEADER_3P, TOOL_EXAMPLES_BETA_HEADER ]); var VERTEX_COUNT_TOKENS_ALLOWED_BETAS = new Set([ CLAUDE_CODE_20250219_BETA_HEADER, INTERLEAVED_THINKING_BETA_HEADER, FINE_GRAINED_TOOL_STREAMING_BETA_HEADER, CONTEXT_MANAGEMENT_BETA_HEADER ]); function getInitialState() { let resolvedCwd = ""; if (typeof process !== "undefined" && typeof process.cwd === "function") { resolvedCwd = realpathSync2(cwd()); } return { originalCwd: resolvedCwd, totalCostUSD: 0, totalAPIDuration: 0, totalAPIDurationWithoutRetries: 0, totalToolDuration: 0, startTime: Date.now(), lastInteractionTime: Date.now(), totalLinesAdded: 0, totalLinesRemoved: 0, hasUnknownModelCost: false, cwd: resolvedCwd, modelUsage: {}, mainLoopModelOverride: undefined, initialMainLoopModel: null, modelStrings: null, isInteractive: false, clientType: "cli", sessionIngressToken: undefined, oauthTokenFromFd: undefined, apiKeyFromFd: undefined, flagSettingsPath: undefined, allowedSettingSources: [ "userSettings", "projectSettings", "localSettings", "flagSettings", "policySettings" ], meter: null, sessionCounter: null, locCounter: null, prCounter: null, commitCounter: null, costCounter: null, tokenCounter: null, codeEditToolDecisionCounter: null, activeTimeCounter: null, sessionId: randomUUID(), loggerProvider: null, eventLogger: null, meterProvider: null, tracerProvider: null, agentColorMap: new Map, agentColorIndex: 0, envVarValidators: [bashMaxOutputLengthValidator, maxOutputTokensValidator], lastAPIRequest: null, inMemoryErrorLog: [], inlinePlugins: [], sessionBypassPermissionsMode: false, sessionPersistenceDisabled: false, hasExitedPlanMode: false, needsPlanModeExitAttachment: false, hasExitedDelegateMode: false, needsDelegateModeExitAttachment: false, lspRecommendationShownThisSession: false, initJsonSchema: null, registeredHooks: null, planSlugCache: new Map, teleportedSessionInfo: null, invokedSkills: new Map, slowOperations: [], sdkBetas: undefined }; } var STATE = getInitialState(); function getSessionId() { return STATE.sessionId; } var MAX_SLOW_OPERATIONS = 10; var SLOW_OPERATION_TTL_MS = 1e4; function addSlowOperation(operation, durationMs) { if (true) return; const now = Date.now(); STATE.slowOperations = STATE.slowOperations.filter((op) => now - op.timestamp < SLOW_OPERATION_TTL_MS); STATE.slowOperations.push({ operation, durationMs, timestamp: now }); if (STATE.slowOperations.length > MAX_SLOW_OPERATIONS) { STATE.slowOperations = STATE.slowOperations.slice(-MAX_SLOW_OPERATIONS); } } function createBufferedWriter({ writeFn, flushIntervalMs = 1000, maxBufferSize = 100, immediateMode = false }) { let buffer = []; let flushTimer = null; function clearTimer() { if (flushTimer) { clearTimeout(flushTimer); flushTimer = null; } } function flush() { if (buffer.length === 0) return; writeFn(buffer.join("")); buffer = []; clearTimer(); } function scheduleFlush() { if (!flushTimer) { flushTimer = setTimeout(flush, flushIntervalMs); } } return { write(content) { if (immediateMode) { writeFn(content); return; } buffer.push(content); scheduleFlush(); if (buffer.length >= maxBufferSize) { flush(); } }, flush, dispose() { flush(); } }; } var cleanupFunctions = new Set; function registerCleanup(cleanupFn) { cleanupFunctions.add(cleanupFn); return () => cleanupFunctions.delete(cleanupFn); } var SLOW_OPERATION_THRESHOLD_MS = Infinity; function describeValue(value) { if (value === null) return "null"; if (value === undefined) return "undefined"; if (Array.isArray(value)) return `Array[${value.length}]`; if (typeof value === "object") { const keys = Object.keys(value); return `Object{${keys.length} keys}`; } if (typeof value === "string") return `string(${value.length} chars)`; return typeof value; } function withSlowLogging(operation, fn) { const startTime = performance.now(); try { return fn(); } finally { const duration3 = performance.now() - startTime; if (duration3 > SLOW_OPERATION_THRESHOLD_MS) { logForDebugging(`[SLOW OPERATION DETECTED] ${operation} (${duration3.toFixed(1)}ms)`); addSlowOperation(operation, duration3); } } } function jsonStringify(value, replacer, space) { const description = describeValue(value); return withSlowLogging(`JSON.stringify(${description})`, () => JSON.stringify(value, replacer, space)); } var jsonParse = (text, reviver) => { const length = typeof text === "string" ? text.length : 0; return withSlowLogging(`JSON.parse(${length} chars)`, () => JSON.parse(text, reviver)); }; var isDebugMode = memoize_default(() => { return isEnvTruthy(process.env.DEBUG) || isEnvTruthy(process.env.DEBUG_SDK) || process.argv.includes("--debug") || process.argv.includes("-d") || isDebugToStdErr() || process.argv.some((arg) => arg.startsWith("--debug=")); }); var getDebugFilter = memoize_default(() => { const debugArg = process.argv.find((arg) => arg.startsWith("--debug=")); if (!debugArg) { return null; } const filterPattern = debugArg.substring("--debug=".length); return parseDebugFilter(filterPattern); }); var isDebugToStdErr = memoize_default(() => { return process.argv.includes("--debug-to-stderr") || process.argv.includes("-d2e"); }); function shouldLogDebugMessage(message) { if (false) {} if (typeof process === "undefined" || typeof process.versions === "undefined" || typeof process.versions.node === "undefined") { return false; } const filter = getDebugFilter(); return shouldShowDebugMessage(message, filter); } var hasFormattedOutput = false; var debugWriter = null; function getDebugWriter() { if (!debugWriter) { debugWriter = createBufferedWriter({ writeFn: (content) => { const path13 = getDebugLogPath(); if (!getFsImplementation().existsSync(dirname4(path13))) { getFsImplementation().mkdirSync(dirname4(path13)); } getFsImplementation().appendFileSync(path13, content); updateLatestDebugLogSymlink(); }, flushIntervalMs: 1000, maxBufferSize: 100, immediateMode: isDebugMode() }); registerCleanup(async () => debugWriter?.dispose()); } return debugWriter; } function logForDebugging(message, { level } = { level: "debug" }) { if (!shouldLogDebugMessage(message)) { return; } if (hasFormattedOutput && message.includes(` `)) { message = jsonStringify(message); } const timestamp = new Date().toISOString(); const output = `${timestamp} [${level.toUpperCase()}] ${message.trim()} `; if (isDebugToStdErr()) { writeToStderr(output); return; } getDebugWriter().write(output); } function getDebugLogPath() { return process.env.CLAUDE_CODE_DEBUG_LOGS_DIR ?? join22(getClaudeConfigHomeDir(), "debug", `${getSessionId()}.txt`); } var updateLatestDebugLogSymlink = memoize_default(() => { if (process.argv[2] === "--ripgrep") { return; } try { const debugLogPath = getDebugLogPath(); const debugLogsDir = dirname4(debugLogPath); const latestSymlinkPath = join22(debugLogsDir, "latest"); if (!getFsImplementation().existsSync(debugLogsDir)) { getFsImplementation().mkdirSync(debugLogsDir); } if (getFsImplementation().existsSync(latestSymlinkPath)) { try { getFsImplementation().unlinkSync(latestSymlinkPath); } catch {} } getFsImplementation().symlinkSync(debugLogPath, latestSymlinkPath); } catch {} }); function withSlowLogging2(operation, fn) { const startTime = performance.now(); try { return fn(); } finally { const duration3 = performance.now() - startTime; if (duration3 > SLOW_OPERATION_THRESHOLD_MS) { logForDebugging(`[SLOW OPERATION DETECTED] fs.${operation} (${duration3.toFixed(1)}ms)`); addSlowOperation(`fs.${operation}`, duration3); } } } var NodeFsOperations = { cwd() { return process.cwd(); }, existsSync(fsPath) { return withSlowLogging2(`existsSync(${fsPath})`, () => fs3.existsSync(fsPath)); }, async stat(fsPath) { return statPromise(fsPath); }, statSync(fsPath) { return withSlowLogging2(`statSync(${fsPath})`, () => fs3.statSync(fsPath)); }, lstatSync(fsPath) { return withSlowLogging2(`lstatSync(${fsPath})`, () => fs3.lstatSync(fsPath)); }, readFileSync(fsPath, options) { return withSlowLogging2(`readFileSync(${fsPath})`, () => fs3.readFileSync(fsPath, { encoding: options.encoding })); }, readFileBytesSync(fsPath) { return withSlowLogging2(`readFileBytesSync(${fsPath})`, () => fs3.readFileSync(fsPath)); }, readSync(fsPath, options) { return withSlowLogging2(`readSync(${fsPath}, ${options.length} bytes)`, () => { let fd = undefined; try { fd = fs3.openSync(fsPath, "r"); const buffer = Buffer.alloc(options.length); const bytesRead = fs3.readSync(fd, buffer, 0, options.length, 0); return { buffer, bytesRead }; } finally { if (fd) fs3.closeSync(fd); } }); }, appendFileSync(path13, data, options) { return withSlowLogging2(`appendFileSync(${path13}, ${data.length} chars)`, () => { if (!fs3.existsSync(path13) && options?.mode !== undefined) { const fd = fs3.openSync(path13, "a", options.mode); try { fs3.appendFileSync(fd, data); } finally { fs3.closeSync(fd); } } else { fs3.appendFileSync(path13, data); } }); }, copyFileSync(src, dest) { return withSlowLogging2(`copyFileSync(${src} → ${dest})`, () => fs3.copyFileSync(src, dest)); }, unlinkSync(path13) { return withSlowLogging2(`unlinkSync(${path13})`, () => fs3.unlinkSync(path13)); }, renameSync(oldPath, newPath) { return withSlowLogging2(`renameSync(${oldPath} → ${newPath})`, () => fs3.renameSync(oldPath, newPath)); }, linkSync(target, path13) { return withSlowLogging2(`linkSync(${target} → ${path13})`, () => fs3.linkSync(target, path13)); }, symlinkSync(target, path13) { return withSlowLogging2(`symlinkSync(${target} → ${path13})`, () => fs3.symlinkSync(target, path13)); }, readlinkSync(path13) { return withSlowLogging2(`readlinkSync(${path13})`, () => fs3.readlinkSync(path13)); }, realpathSync(path13) { return withSlowLogging2(`realpathSync(${path13})`, () => fs3.realpathSync(path13)); }, mkdirSync(dirPath, options) { return withSlowLogging2(`mkdirSync(${dirPath})`, () => { if (!fs3.existsSync(dirPath)) { const mkdirOptions = { recursive: true }; if (options?.mode !== undefined) { mkdirOptions.mode = options.mode; } fs3.mkdirSync(dirPath, mkdirOptions); } }); }, readdirSync(dirPath) { return withSlowLogging2(`readdirSync(${dirPath})`, () => fs3.readdirSync(dirPath, { withFileTypes: true })); }, readdirStringSync(dirPath) { return withSlowLogging2(`readdirStringSync(${dirPath})`, () => fs3.readdirSync(dirPath)); }, isDirEmptySync(dirPath) { return withSlowLogging2(`isDirEmptySync(${dirPath})`, () => { const files = this.readdirSync(dirPath); return files.length === 0; }); }, rmdirSync(dirPath) { return withSlowLogging2(`rmdirSync(${dirPath})`, () => fs3.rmdirSync(dirPath)); }, rmSync(path13, options) { return withSlowLogging2(`rmSync(${path13})`, () => fs3.rmSync(path13, options)); }, createWriteStream(path13) { return fs3.createWriteStream(path13); } }; var activeFs = NodeFsOperations; function getFsImplementation() { return activeFs; } class AbortError extends Error { } function isRunningWithBun() { return process.versions.bun !== undefined; } var debugFilePath = null; var initialized = false; function getOrCreateDebugFile() { if (initialized) { return debugFilePath; } initialized = true; if (!process.env.DEBUG_CLAUDE_AGENT_SDK) { return null; } const debugDir = join32(getClaudeConfigHomeDir(), "debug"); debugFilePath = join32(debugDir, `sdk-${randomUUID2()}.txt`); if (!existsSync22(debugDir)) { mkdirSync22(debugDir, { recursive: true }); } process.stderr.write(`SDK debug logs: ${debugFilePath} `); return debugFilePath; } function logForSdkDebugging(message) { const path13 = getOrCreateDebugFile(); if (!path13) { return; } const timestamp = new Date().toISOString(); const output = `${timestamp} ${message} `; appendFileSync22(path13, output); } function mergeSandboxIntoExtraArgs(extraArgs, sandbox) { const effectiveExtraArgs = { ...extraArgs }; if (sandbox) { let settingsObj = { sandbox }; if (effectiveExtraArgs.settings) { try { const existingSettings = jsonParse(effectiveExtraArgs.settings); settingsObj = { ...existingSettings, sandbox }; } catch {} } effectiveExtraArgs.settings = jsonStringify(settingsObj); } return effectiveExtraArgs; } class ProcessTransport { options; process; processStdin; processStdout; ready = false; abortController; exitError; exitListeners = []; processExitHandler; abortHandler; constructor(options) { this.options = options; this.abortController = options.abortController || createAbortController(); this.initialize(); } getDefaultExecutable() { return isRunningWithBun() ? "bun" : "node"; } spawnLocalProcess(spawnOptions) { const { command, args, cwd: cwd2, env, signal } = spawnOptions; const stderrMode = env.DEBUG_CLAUDE_AGENT_SDK || this.options.stderr ? "pipe" : "ignore"; const childProcess = spawn4(command, args, { cwd: cwd2, stdio: ["pipe", "pipe", stderrMode], signal, env, windowsHide: true }); if (env.DEBUG_CLAUDE_AGENT_SDK || this.options.stderr) { childProcess.stderr.on("data", (data) => { const message = data.toString(); logForSdkDebugging(message); if (this.options.stderr) { this.options.stderr(message); } }); } const mappedProcess = { stdin: childProcess.stdin, stdout: childProcess.stdout, get killed() { return childProcess.killed; }, get exitCode() { return childProcess.exitCode; }, kill: childProcess.kill.bind(childProcess), on: childProcess.on.bind(childProcess), once: childProcess.once.bind(childProcess), off: childProcess.off.bind(childProcess) }; return mappedProcess; } initialize() { try { const { additionalDirectories = [], betas, cwd: cwd2, executable = this.getDefaultExecutable(), executableArgs = [], extraArgs = {}, pathToClaudeCodeExecutable, env = { ...process.env }, maxThinkingTokens, maxTurns, maxBudgetUsd, model, fallbackModel, jsonSchema, permissionMode, allowDangerouslySkipPermissions, permissionPromptToolName, continueConversation, resume, settingSources, allowedTools = [], disallowedTools = [], tools, mcpServers, strictMcpConfig, canUseTool, includePartialMessages, plugins, sandbox } = this.options; const args = [ "--output-format", "stream-json", "--verbose", "--input-format", "stream-json" ]; if (maxThinkingTokens !== undefined) { args.push("--max-thinking-tokens", maxThinkingTokens.toString()); } if (maxTurns) args.push("--max-turns", maxTurns.toString()); if (maxBudgetUsd !== undefined) { args.push("--max-budget-usd", maxBudgetUsd.toString()); } if (model) args.push("--model", model); if (betas && betas.length > 0) { args.push("--betas", betas.join(",")); } if (jsonSchema) { args.push("--json-schema", jsonStringify(jsonSchema)); } if (env.DEBUG_CLAUDE_AGENT_SDK) { args.push("--debug-to-stderr"); } if (canUseTool) { if (permissionPromptToolName) { throw new Error("canUseTool callback cannot be used with permissionPromptToolName. Please use one or the other."); } args.push("--permission-prompt-tool", "stdio"); } else if (permissionPromptToolName) { args.push("--permission-prompt-tool", permissionPromptToolName); } if (continueConversation) args.push("--continue"); if (resume) args.push("--resume", resume); if (allowedTools.length > 0) { args.push("--allowedTools", allowedTools.join(",")); } if (disallowedTools.length > 0) { args.push("--disallowedTools", disallowedTools.join(",")); } if (tools !== undefined) { if (Array.isArray(tools)) { if (tools.length === 0) { args.push("--tools", ""); } else { args.push("--tools", tools.join(",")); } } else { args.push("--tools", "default"); } } if (mcpServers && Object.keys(mcpServers).length > 0) { args.push("--mcp-config", jsonStringify({ mcpServers })); } if (settingSources) { args.push("--setting-sources", settingSources.join(",")); } if (strictMcpConfig) { args.push("--strict-mcp-config"); } if (permissionMode) { args.push("--permission-mode", permissionMode); } if (allowDangerouslySkipPermissions) { args.push("--allow-dangerously-skip-permissions"); } if (fallbackModel) { if (model && fallbackModel === model) { throw new Error("Fallback model cannot be the same as the main model. Please specify a different model for fallbackModel option."); } args.push("--fallback-model", fallbackModel); } if (includePartialMessages) { args.push("--include-partial-messages"); } for (const dir of additionalDirectories) { args.push("--add-dir", dir); } if (plugins && plugins.length > 0) { for (const plugin of plugins) { if (plugin.type === "local") { args.push("--plugin-dir", plugin.path); } else { throw new Error(`Unsupported plugin type: ${plugin.type}`); } } } if (this.options.forkSession) { args.push("--fork-session"); } if (this.options.resumeSessionAt) { args.push("--resume-session-at", this.options.resumeSessionAt); } if (this.options.persistSession === false) { args.push("--no-session-persistence"); } const effectiveExtraArgs = mergeSandboxIntoExtraArgs(extraArgs ?? {}, sandbox); for (const [flag, value] of Object.entries(effectiveExtraArgs)) { if (value === null) { args.push(`--${flag}`); } else { args.push(`--${flag}`, value); } } if (!env.CLAUDE_CODE_ENTRYPOINT) { env.CLAUDE_CODE_ENTRYPOINT = "sdk-ts"; } delete env.NODE_OPTIONS; if (env.DEBUG_CLAUDE_AGENT_SDK) { env.DEBUG = "1"; } else { delete env.DEBUG; } const isNative = isNativeBinary(pathToClaudeCodeExecutable); const spawnCommand = isNative ? pathToClaudeCodeExecutable : executable; const spawnArgs = isNative ? [...executableArgs, ...args] : [...executableArgs, pathToClaudeCodeExecutable, ...args]; const spawnOptions = { command: spawnCommand, args: spawnArgs, cwd: cwd2, env, signal: this.abortController.signal }; if (this.options.spawnClaudeCodeProcess) { logForSdkDebugging(`Spawning Claude Code (custom): ${spawnCommand} ${spawnArgs.join(" ")}`); this.process = this.options.spawnClaudeCodeProcess(spawnOptions); } else { const fs22 = getFsImplementation(); if (!fs22.existsSync(pathToClaudeCodeExecutable)) { const errorMessage = isNative ? `Claude Code native binary not found at ${pathToClaudeCodeExecutable}. Please ensure Claude Code is installed via native installer or specify a valid path with options.pathToClaudeCodeExecutable.` : `Claude Code executable not found at ${pathToClaudeCodeExecutable}. Is options.pathToClaudeCodeExecutable set?`; throw new ReferenceError(errorMessage); } logForSdkDebugging(`Spawning Claude Code: ${spawnCommand} ${spawnArgs.join(" ")}`); this.process = this.spawnLocalProcess(spawnOptions); } this.processStdin = this.process.stdin; this.processStdout = this.process.stdout; const cleanup = () => { if (this.process && !this.process.killed) { this.process.kill("SIGTERM"); } }; this.processExitHandler = cleanup; this.abortHandler = cleanup; process.on("exit", this.processExitHandler); this.abortController.signal.addEventListener("abort", this.abortHandler); this.process.on("error", (error2) => { this.ready = false; if (this.abortController.signal.aborted) { this.exitError = new AbortError("Claude Code process aborted by user"); } else { this.exitError = new Error(`Failed to spawn Claude Code process: ${error2.message}`); logForSdkDebugging(this.exitError.message); } }); this.process.on("exit", (code, signal) => { this.ready = false; if (this.abortController.signal.aborted) { this.exitError = new AbortError("Claude Code process aborted by user"); } else { const error2 = this.getProcessExitError(code, signal); if (error2) { this.exitError = error2; logForSdkDebugging(error2.message); } } }); this.ready = true; } catch (error2) { this.ready = false; throw error2; } } getProcessExitError(code, signal) { if (code !== 0 && code !== null) { return new Error(`Claude Code process exited with code ${code}`); } else if (signal) { return new Error(`Claude Code process terminated by signal ${signal}`); } return; } write(data) { if (this.abortController.signal.aborted) { throw new AbortError("Operation aborted"); } if (!this.ready || !this.processStdin) { throw new Error("ProcessTransport is not ready for writing"); } if (this.process?.killed || this.process?.exitCode !== null) { throw new Error("Cannot write to terminated process"); } if (this.exitError) { throw new Error(`Cannot write to process that exited with error: ${this.exitError.message}`); } logForSdkDebugging(`[ProcessTransport] Writing to stdin: ${data.substring(0, 100)}`); try { const written = this.processStdin.write(data); if (!written) { logForSdkDebugging("[ProcessTransport] Write buffer full, data queued"); } } catch (error2) { this.ready = false; throw new Error(`Failed to write to process stdin: ${error2.message}`); } } close() { if (this.processStdin) { this.processStdin.end(); this.processStdin = undefined; } if (this.abortHandler) { this.abortController.signal.removeEventListener("abort", this.abortHandler); this.abortHandler = undefined; } for (const { handler } of this.exitListeners) { this.process?.off("exit", handler); } this.exitListeners = []; if (this.process && !this.process.killed) { this.process.kill("SIGTERM"); setTimeout(() => { if (this.process && !this.process.killed) { this.process.kill("SIGKILL"); } }, 5000); } this.ready = false; if (this.processExitHandler) { process.off("exit", this.processExitHandler); this.processExitHandler = undefined; } } isReady() { return this.ready; } async* readMessages() { if (!this.processStdout) { throw new Error("ProcessTransport output stream not available"); } const rl = createInterface({ input: this.processStdout }); try { for await (const line of rl) { if (line.trim()) { const message = jsonParse(line); yield message; } } await this.waitForExit(); } catch (error2) { throw error2; } finally { rl.close(); } } endInput() { if (this.processStdin) { this.processStdin.end(); } } getInputStream() { return this.processStdin; } onExit(callback) { if (!this.process) return () => {}; const handler = (code, signal) => { const error2 = this.getProcessExitError(code, signal); callback(error2); }; this.process.on("exit", handler); this.exitListeners.push({ callback, handler }); return () => { if (this.process) { this.process.off("exit", handler); } const index = this.exitListeners.findIndex((l) => l.handler === handler); if (index !== -1) { this.exitListeners.splice(index, 1); } }; } async waitForExit() { if (!this.process) { if (this.exitError) { throw this.exitError; } return; } if (this.process.exitCode !== null || this.process.killed) { if (this.exitError) { throw this.exitError; } return; } return new Promise((resolve, reject) => { const exitHandler = (code, signal) => { if (this.abortController.signal.aborted) { reject(new AbortError("Operation aborted")); return; } const error2 = this.getProcessExitError(code, signal); if (error2) { reject(error2); } else { resolve(); } }; this.process.once("exit", exitHandler); const errorHandler2 = (error2) => { this.process.off("exit", exitHandler); reject(error2); }; this.process.once("error", errorHandler2); this.process.once("exit", () => { this.process.off("error", errorHandler2); }); }); } } function isNativeBinary(executablePath) { const jsExtensions = [".js", ".mjs", ".tsx", ".ts", ".jsx"]; return !jsExtensions.some((ext) => executablePath.endsWith(ext)); } class Stream { returned; queue = []; readResolve; readReject; isDone = false; hasError; started = false; constructor(returned) { this.returned = returned; } [Symbol.asyncIterator]() { if (this.started) { throw new Error("Stream can only be iterated once"); } this.started = true; return this; } next() { if (this.queue.length > 0) { return Promise.resolve({ done: false, value: this.queue.shift() }); } if (this.isDone) { return Promise.resolve({ done: true, value: undefined }); } if (this.hasError) { return Promise.reject(this.hasError); } return new Promise((resolve, reject) => { this.readResolve = resolve; this.readReject = reject; }); } enqueue(value) { if (this.readResolve) { const resolve = this.readResolve; this.readResolve = undefined; this.readReject = undefined; resolve({ done: false, value }); } else { this.queue.push(value); } } done() { this.isDone = true; if (this.readResolve) { const resolve = this.readResolve; this.readResolve = undefined; this.readReject = undefined; resolve({ done: true, value: undefined }); } } error(error2) { this.hasError = error2; if (this.readReject) { const reject = this.readReject; this.readResolve = undefined; this.readReject = undefined; reject(error2); } } return() { this.isDone = true; if (this.returned) { this.returned(); } return Promise.resolve({ done: true, value: undefined }); } } class SdkControlServerTransport { sendMcpMessage; isClosed = false; constructor(sendMcpMessage) { this.sendMcpMessage = sendMcpMessage; } onclose; onerror; onmessage; async start() {} async send(message) { if (this.isClosed) { throw new Error("Transport is closed"); } this.sendMcpMessage(message); } async close() { if (this.isClosed) { return; } this.isClosed = true; this.onclose?.(); } } class Query { transport; isSingleUserTurn; canUseTool; hooks; abortController; jsonSchema; initConfig; pendingControlResponses = new Map; cleanupPerformed = false; sdkMessages; inputStream = new Stream; initialization; cancelControllers = new Map; hookCallbacks = new Map; nextCallbackId = 0; sdkMcpTransports = new Map; sdkMcpServerInstances = new Map; pendingMcpResponses = new Map; firstResultReceivedResolve; firstResultReceived = false; hasBidirectionalNeeds() { return this.sdkMcpTransports.size > 0 || this.hooks !== undefined && Object.keys(this.hooks).length > 0 || this.canUseTool !== undefined; } constructor(transport, isSingleUserTurn, canUseTool, hooks, abortController, sdkMcpServers = new Map, jsonSchema, initConfig) { this.transport = transport; this.isSingleUserTurn = isSingleUserTurn; this.canUseTool = canUseTool; this.hooks = hooks; this.abortController = abortController; this.jsonSchema = jsonSchema; this.initConfig = initConfig; for (const [name, server] of sdkMcpServers) { this.connectSdkMcpServer(name, server); } this.sdkMessages = this.readSdkMessages(); this.readMessages(); this.initialization = this.initialize(); this.initialization.catch(() => {}); } setError(error2) { this.inputStream.error(error2); } cleanup(error2) { if (this.cleanupPerformed) return; this.cleanupPerformed = true; try { this.transport.close(); this.pendingControlResponses.clear(); this.pendingMcpResponses.clear(); this.cancelControllers.clear(); this.hookCallbacks.clear(); for (const transport of this.sdkMcpTransports.values()) { try { transport.close(); } catch {} } this.sdkMcpTransports.clear(); if (error2) { this.inputStream.error(error2); } else { this.inputStream.done(); } } catch (_error) {} } next(...[value]) { return this.sdkMessages.next(...[value]); } return(value) { return this.sdkMessages.return(value); } throw(e) { return this.sdkMessages.throw(e); } [Symbol.asyncIterator]() { return this.sdkMessages; } [Symbol.asyncDispose]() { return this.sdkMessages[Symbol.asyncDispose](); } async readMessages() { try { for await (const message of this.transport.readMessages()) { if (message.type === "control_response") { const handler = this.pendingControlResponses.get(message.response.request_id); if (handler) { handler(message.response); } continue; } else if (message.type === "control_request") { this.handleControlRequest(message); continue; } else if (message.type === "control_cancel_request") { this.handleControlCancelRequest(message); continue; } else if (message.type === "keep_alive") { continue; } if (message.type === "result") { this.firstResultReceived = true; if (this.firstResultReceivedResolve) { this.firstResultReceivedResolve(); } if (this.isSingleUserTurn) { logForDebugging(`[Query.readMessages] First result received for single-turn query, closing stdin`); this.transport.endInput(); } } this.inputStream.enqueue(message); } if (this.firstResultReceivedResolve) { this.firstResultReceivedResolve(); } this.inputStream.done(); this.cleanup(); } catch (error2) { if (this.firstResultReceivedResolve) { this.firstResultReceivedResolve(); } this.inputStream.error(error2); this.cleanup(error2); } } async handleControlRequest(request) { const controller = new AbortController; this.cancelControllers.set(request.request_id, controller); try { const response = await this.processControlRequest(request, controller.signal); const controlResponse = { type: "control_response", response: { subtype: "success", request_id: request.request_id, response } }; await Promise.resolve(this.transport.write(jsonStringify(controlResponse) + ` `)); } catch (error2) { const controlErrorResponse = { type: "control_response", response: { subtype: "error", request_id: request.request_id, error: error2.message || String(error2) } }; await Promise.resolve(this.transport.write(jsonStringify(controlErrorResponse) + ` `)); } finally { this.cancelControllers.delete(request.request_id); } } handleControlCancelRequest(request) { const controller = this.cancelControllers.get(request.request_id); if (controller) { controller.abort(); this.cancelControllers.delete(request.request_id); } } async processControlRequest(request, signal) { if (request.request.subtype === "can_use_tool") { if (!this.canUseTool) { throw new Error("canUseTool callback is not provided."); } const result = await this.canUseTool(request.request.tool_name, request.request.input, { signal, suggestions: request.request.permission_suggestions, blockedPath: request.request.blocked_path, decisionReason: request.request.decision_reason, toolUseID: request.request.tool_use_id, agentID: request.request.agent_id }); return { ...result, toolUseID: request.request.tool_use_id }; } else if (request.request.subtype === "hook_callback") { const result = await this.handleHookCallbacks(request.request.callback_id, request.request.input, request.request.tool_use_id, signal); return result; } else if (request.request.subtype === "mcp_message") { const mcpRequest = request.request; const transport = this.sdkMcpTransports.get(mcpRequest.server_name); if (!transport) { throw new Error(`SDK MCP server not found: ${mcpRequest.server_name}`); } if ("method" in mcpRequest.message && "id" in mcpRequest.message && mcpRequest.message.id !== null) { const response = await this.handleMcpControlRequest(mcpRequest.server_name, mcpRequest, transport); return { mcp_response: response }; } else { if (transport.onmessage) { transport.onmessage(mcpRequest.message); } return { mcp_response: { jsonrpc: "2.0", result: {}, id: 0 } }; } } throw new Error("Unsupported control request subtype: " + request.request.subtype); } async* readSdkMessages() { for await (const message of this.inputStream) { yield message; } } async initialize() { let hooks; if (this.hooks) { hooks = {}; for (const [event, matchers] of Object.entries(this.hooks)) { if (matchers.length > 0) { hooks[event] = matchers.map((matcher) => { const callbackIds = []; for (const callback of matcher.hooks) { const callbackId = `hook_${this.nextCallbackId++}`; this.hookCallbacks.set(callbackId, callback); callbackIds.push(callbackId); } return { matcher: matcher.matcher, hookCallbackIds: callbackIds, timeout: matcher.timeout }; }); } } } const sdkMcpServers = this.sdkMcpTransports.size > 0 ? Array.from(this.sdkMcpTransports.keys()) : undefined; const initRequest = { subtype: "initialize", hooks, sdkMcpServers, jsonSchema: this.jsonSchema, systemPrompt: this.initConfig?.systemPrompt, appendSystemPrompt: this.initConfig?.appendSystemPrompt, agents: this.initConfig?.agents }; const response = await this.request(initRequest); return response.response; } async interrupt() { await this.request({ subtype: "interrupt" }); } async setPermissionMode(mode) { await this.request({ subtype: "set_permission_mode", mode }); } async setModel(model) { await this.request({ subtype: "set_model", model }); } async setMaxThinkingTokens(maxThinkingTokens) { await this.request({ subtype: "set_max_thinking_tokens", max_thinking_tokens: maxThinkingTokens }); } async rewindFiles(userMessageId, options) { const response = await this.request({ subtype: "rewind_files", user_message_id: userMessageId, dry_run: options?.dryRun }); return response.response; } async processPendingPermissionRequests(pendingPermissionRequests) { for (const request of pendingPermissionRequests) { if (request.request.subtype === "can_use_tool") { this.handleControlRequest(request).catch(() => {}); } } } request(request) { const requestId = Math.random().toString(36).substring(2, 15); const sdkRequest = { request_id: requestId, type: "control_request", request }; return new Promise((resolve, reject) => { this.pendingControlResponses.set(requestId, (response) => { if (response.subtype === "success") { resolve(response); } else { reject(new Error(response.error)); if (response.pending_permission_requests) { this.processPendingPermissionRequests(response.pending_permission_requests); } } }); Promise.resolve(this.transport.write(jsonStringify(sdkRequest) + ` `)); }); } async supportedCommands() { return (await this.initialization).commands; } async supportedModels() { return (await this.initialization).models; } async mcpServerStatus() { const response = await this.request({ subtype: "mcp_status" }); const mcpStatusResponse = response.response; return mcpStatusResponse.mcpServers; } async setMcpServers(servers) { const sdkServers = {}; const processServers = {}; for (const [name, config2] of Object.entries(servers)) { if (config2.type === "sdk" && "instance" in config2) { sdkServers[name] = config2.instance; } else { processServers[name] = config2; } } const currentSdkNames = new Set(this.sdkMcpServerInstances.keys()); const newSdkNames = new Set(Object.keys(sdkServers)); for (const name of currentSdkNames) { if (!newSdkNames.has(name)) { await this.disconnectSdkMcpServer(name); } } for (const [name, server] of Object.entries(sdkServers)) { if (!currentSdkNames.has(name)) { this.connectSdkMcpServer(name, server); } } const sdkServerConfigs = {}; for (const name of Object.keys(sdkServers)) { sdkServerConfigs[name] = { type: "sdk", name }; } const response = await this.request({ subtype: "mcp_set_servers", servers: { ...processServers, ...sdkServerConfigs } }); return response.response; } async accountInfo() { return (await this.initialization).account; } async streamInput(stream) { logForDebugging(`[Query.streamInput] Starting to process input stream`); try { let messageCount = 0; for await (const message of stream) { messageCount++; logForDebugging(`[Query.streamInput] Processing message ${messageCount}: ${message.type}`); if (this.abortController?.signal.aborted) break; await Promise.resolve(this.transport.write(jsonStringify(message) + ` `)); } logForDebugging(`[Query.streamInput] Finished processing ${messageCount} messages from input stream`); if (messageCount > 0 && this.hasBidirectionalNeeds()) { logForDebugging(`[Query.streamInput] Has bidirectional needs, waiting for first result`); await this.waitForFirstResult(); } logForDebugging(`[Query] Calling transport.endInput() to close stdin to CLI process`); this.transport.endInput(); } catch (error2) { if (!(error2 instanceof AbortError)) { throw error2; } } } waitForFirstResult() { if (this.firstResultReceived) { logForDebugging(`[Query.waitForFirstResult] Result already received, returning immediately`); return Promise.resolve(); } return new Promise((resolve) => { if (this.abortController?.signal.aborted) { resolve(); return; } this.abortController?.signal.addEventListener("abort", () => resolve(), { once: true }); this.firstResultReceivedResolve = resolve; }); } handleHookCallbacks(callbackId, input, toolUseID, abortSignal) { const callback = this.hookCallbacks.get(callbackId); if (!callback) { throw new Error(`No hook callback found for ID: ${callbackId}`); } return callback(input, toolUseID, { signal: abortSignal }); } connectSdkMcpServer(name, server) { const sdkTransport = new SdkControlServerTransport((message) => this.sendMcpServerMessageToCli(name, message)); this.sdkMcpTransports.set(name, sdkTransport); this.sdkMcpServerInstances.set(name, server); server.connect(sdkTransport); } async disconnectSdkMcpServer(name) { const transport = this.sdkMcpTransports.get(name); if (transport) { await transport.close(); this.sdkMcpTransports.delete(name); } this.sdkMcpServerInstances.delete(name); } sendMcpServerMessageToCli(serverName, message) { if ("id" in message && message.id !== null && message.id !== undefined) { const key = `${serverName}:${message.id}`; const pending = this.pendingMcpResponses.get(key); if (pending) { pending.resolve(message); this.pendingMcpResponses.delete(key); return; } } const controlRequest = { type: "control_request", request_id: randomUUID3(), request: { subtype: "mcp_message", server_name: serverName, message } }; this.transport.write(jsonStringify(controlRequest) + ` `); } handleMcpControlRequest(serverName, mcpRequest, transport) { const messageId = "id" in mcpRequest.message ? mcpRequest.message.id : null; const key = `${serverName}:${messageId}`; return new Promise((resolve, reject) => { const cleanup = () => { this.pendingMcpResponses.delete(key); }; const resolveAndCleanup = (response) => { cleanup(); resolve(response); }; const rejectAndCleanup = (error2) => { cleanup(); reject(error2); }; this.pendingMcpResponses.set(key, { resolve: resolveAndCleanup, reject: rejectAndCleanup }); if (transport.onmessage) { transport.onmessage(mcpRequest.message); } else { cleanup(); reject(new Error("No message handler registered")); return; } }); } } var util; (function(util2) { util2.assertEqual = (_) => {}; function assertIs2(_arg) {} util2.assertIs = assertIs2; function assertNever2(_x) { throw new Error; } util2.assertNever = assertNever2; util2.arrayToEnum = (items) => { const obj = {}; for (const item of items) { obj[item] = item; } return obj; }; util2.getValidEnumValues = (obj) => { const validKeys = util2.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== "number"); const filtered = {}; for (const k of validKeys) { filtered[k] = obj[k]; } return util2.objectValues(filtered); }; util2.objectValues = (obj) => { return util2.objectKeys(obj).map(function(e) { return obj[e]; }); }; util2.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object4) => { const keys = []; for (const key in object4) { if (Object.prototype.hasOwnProperty.call(object4, key)) { keys.push(key); } } return keys; }; util2.find = (arr, checker) => { for (const item of arr) { if (checker(item)) return item; } return; }; util2.isInteger = typeof Number.isInteger === "function" ? (val) => Number.isInteger(val) : (val) => typeof val === "number" && Number.isFinite(val) && Math.floor(val) === val; function joinValues2(array3, separator = " | ") { return array3.map((val) => typeof val === "string" ? `'${val}'` : val).join(separator); } util2.joinValues = joinValues2; util2.jsonStringifyReplacer = (_, value) => { if (typeof value === "bigint") { return value.toString(); } return value; }; })(util || (util = {})); var objectUtil; (function(objectUtil2) { objectUtil2.mergeShapes = (first, second) => { return { ...first, ...second }; }; })(objectUtil || (objectUtil = {})); var ZodParsedType = util.arrayToEnum([ "string", "nan", "number", "integer", "float", "boolean", "date", "bigint", "symbol", "function", "undefined", "null", "array", "object", "unknown", "promise", "void", "never", "map", "set" ]); var getParsedType2 = (data) => { const t = typeof data; switch (t) { case "undefined": return ZodParsedType.undefined; case "string": return ZodParsedType.string; case "number": return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number; case "boolean": return ZodParsedType.boolean; case "function": return ZodParsedType.function; case "bigint": return ZodParsedType.bigint; case "symbol": return ZodParsedType.symbol; case "object": if (Array.isArray(data)) { return ZodParsedType.array; } if (data === null) { return ZodParsedType.null; } if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { return ZodParsedType.promise; } if (typeof Map !== "undefined" && data instanceof Map) { return ZodParsedType.map; } if (typeof Set !== "undefined" && data instanceof Set) { return ZodParsedType.set; } if (typeof Date !== "undefined" && data instanceof Date) { return ZodParsedType.date; } return ZodParsedType.object; default: return ZodParsedType.unknown; } }; var ZodIssueCode = util.arrayToEnum([ "invalid_type", "invalid_literal", "custom", "invalid_union", "invalid_union_discriminator", "invalid_enum_value", "unrecognized_keys", "invalid_arguments", "invalid_return_type", "invalid_date", "invalid_string", "too_small", "too_big", "invalid_intersection_types", "not_multiple_of", "not_finite" ]); class ZodError2 extends Error { get errors() { return this.issues; } constructor(issues) { super(); this.issues = []; this.addIssue = (sub) => { this.issues = [...this.issues, sub]; }; this.addIssues = (subs = []) => { this.issues = [...this.issues, ...subs]; }; const actualProto = new.target.prototype; if (Object.setPrototypeOf) { Object.setPrototypeOf(this, actualProto); } else { this.__proto__ = actualProto; } this.name = "ZodError"; this.issues = issues; } format(_mapper) { const mapper = _mapper || function(issue2) { return issue2.message; }; const fieldErrors = { _errors: [] }; const processError = (error2) => { for (const issue2 of error2.issues) { if (issue2.code === "invalid_union") { issue2.unionErrors.map(processError); } else if (issue2.code === "invalid_return_type") { processError(issue2.returnTypeError); } else if (issue2.code === "invalid_arguments") { processError(issue2.argumentsError); } else if (issue2.path.length === 0) { fieldErrors._errors.push(mapper(issue2)); } else { let curr = fieldErrors; let i = 0; while (i < issue2.path.length) { const el = issue2.path[i]; const terminal = i === issue2.path.length - 1; if (!terminal) { curr[el] = curr[el] || { _errors: [] }; } else { curr[el] = curr[el] || { _errors: [] }; curr[el]._errors.push(mapper(issue2)); } curr = curr[el]; i++; } } } }; processError(this); return fieldErrors; } static assert(value) { if (!(value instanceof ZodError2)) { throw new Error(`Not a ZodError: ${value}`); } } toString() { return this.message; } get message() { return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2); } get isEmpty() { return this.issues.length === 0; } flatten(mapper = (issue2) => issue2.message) { const fieldErrors = {}; const formErrors = []; for (const sub of this.issues) { if (sub.path.length > 0) { const firstEl = sub.path[0]; fieldErrors[firstEl] = fieldErrors[firstEl] || []; fieldErrors[firstEl].push(mapper(sub)); } else { formErrors.push(mapper(sub)); } } return { formErrors, fieldErrors }; } get formErrors() { return this.flatten(); } } ZodError2.create = (issues) => { const error2 = new ZodError2(issues); return error2; }; var errorMap = (issue2, _ctx) => { let message; switch (issue2.code) { case ZodIssueCode.invalid_type: if (issue2.received === ZodParsedType.undefined) { message = "Required"; } else { message = `Expected ${issue2.expected}, received ${issue2.received}`; } break; case ZodIssueCode.invalid_literal: message = `Invalid literal value, expected ${JSON.stringify(issue2.expected, util.jsonStringifyReplacer)}`; break; case ZodIssueCode.unrecognized_keys: message = `Unrecognized key(s) in object: ${util.joinValues(issue2.keys, ", ")}`; break; case ZodIssueCode.invalid_union: message = `Invalid input`; break; case ZodIssueCode.invalid_union_discriminator: message = `Invalid discriminator value. Expected ${util.joinValues(issue2.options)}`; break; case ZodIssueCode.invalid_enum_value: message = `Invalid enum value. Expected ${util.joinValues(issue2.options)}, received '${issue2.received}'`; break; case ZodIssueCode.invalid_arguments: message = `Invalid function arguments`; break; case ZodIssueCode.invalid_return_type: message = `Invalid function return type`; break; case ZodIssueCode.invalid_date: message = `Invalid date`; break; case ZodIssueCode.invalid_string: if (typeof issue2.validation === "object") { if ("includes" in issue2.validation) { message = `Invalid input: must include "${issue2.validation.includes}"`; if (typeof issue2.validation.position === "number") { message = `${message} at one or more positions greater than or equal to ${issue2.validation.position}`; } } else if ("startsWith" in issue2.validation) { message = `Invalid input: must start with "${issue2.validation.startsWith}"`; } else if ("endsWith" in issue2.validation) { message = `Invalid input: must end with "${issue2.validation.endsWith}"`; } else { util.assertNever(issue2.validation); } } else if (issue2.validation !== "regex") { message = `Invalid ${issue2.validation}`; } else { message = "Invalid"; } break; case ZodIssueCode.too_small: if (issue2.type === "array") message = `Array must contain ${issue2.exact ? "exactly" : issue2.inclusive ? `at least` : `more than`} ${issue2.minimum} element(s)`; else if (issue2.type === "string") message = `String must contain ${issue2.exact ? "exactly" : issue2.inclusive ? `at least` : `over`} ${issue2.minimum} character(s)`; else if (issue2.type === "number") message = `Number must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${issue2.minimum}`; else if (issue2.type === "bigint") message = `Number must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${issue2.minimum}`; else if (issue2.type === "date") message = `Date must be ${issue2.exact ? `exactly equal to ` : issue2.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue2.minimum))}`; else message = "Invalid input"; break; case ZodIssueCode.too_big: if (issue2.type === "array") message = `Array must contain ${issue2.exact ? `exactly` : issue2.inclusive ? `at most` : `less than`} ${issue2.maximum} element(s)`; else if (issue2.type === "string") message = `String must contain ${issue2.exact ? `exactly` : issue2.inclusive ? `at most` : `under`} ${issue2.maximum} character(s)`; else if (issue2.type === "number") message = `Number must be ${issue2.exact ? `exactly` : issue2.inclusive ? `less than or equal to` : `less than`} ${issue2.maximum}`; else if (issue2.type === "bigint") message = `BigInt must be ${issue2.exact ? `exactly` : issue2.inclusive ? `less than or equal to` : `less than`} ${issue2.maximum}`; else if (issue2.type === "date") message = `Date must be ${issue2.exact ? `exactly` : issue2.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue2.maximum))}`; else message = "Invalid input"; break; case ZodIssueCode.custom: message = `Invalid input`; break; case ZodIssueCode.invalid_intersection_types: message = `Intersection results could not be merged`; break; case ZodIssueCode.not_multiple_of: message = `Number must be a multiple of ${issue2.multipleOf}`; break; case ZodIssueCode.not_finite: message = "Number must be finite"; break; default: message = _ctx.defaultError; util.assertNever(issue2); } return { message }; }; var en_default2 = errorMap; var overrideErrorMap = en_default2; function getErrorMap() { return overrideErrorMap; } var makeIssue = (params) => { const { data, path: path13, errorMaps, issueData } = params; const fullPath = [...path13, ...issueData.path || []]; const fullIssue = { ...issueData, path: fullPath }; if (issueData.message !== undefined) { return { ...issueData, path: fullPath, message: issueData.message }; } let errorMessage = ""; const maps = errorMaps.filter((m) => !!m).slice().reverse(); for (const map2 of maps) { errorMessage = map2(fullIssue, { data, defaultError: errorMessage }).message; } return { ...issueData, path: fullPath, message: errorMessage }; }; function addIssueToContext(ctx, issueData) { const overrideMap = getErrorMap(); const issue2 = makeIssue({ issueData, data: ctx.data, path: ctx.path, errorMaps: [ ctx.common.contextualErrorMap, ctx.schemaErrorMap, overrideMap, overrideMap === en_default2 ? undefined : en_default2 ].filter((x) => !!x) }); ctx.common.issues.push(issue2); } class ParseStatus { constructor() { this.value = "valid"; } dirty() { if (this.value === "valid") this.value = "dirty"; } abort() { if (this.value !== "aborted") this.value = "aborted"; } static mergeArray(status, results) { const arrayValue = []; for (const s of results) { if (s.status === "aborted") return INVALID; if (s.status === "dirty") status.dirty(); arrayValue.push(s.value); } return { status: status.value, value: arrayValue }; } static async mergeObjectAsync(status, pairs) { const syncPairs = []; for (const pair of pairs) { const key = await pair.key; const value = await pair.value; syncPairs.push({ key, value }); } return ParseStatus.mergeObjectSync(status, syncPairs); } static mergeObjectSync(status, pairs) { const finalObject = {}; for (const pair of pairs) { const { key, value } = pair; if (key.status === "aborted") return INVALID; if (value.status === "aborted") return INVALID; if (key.status === "dirty") status.dirty(); if (value.status === "dirty") status.dirty(); if (key.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) { finalObject[key.value] = value.value; } } return { status: status.value, value: finalObject }; } } var INVALID = Object.freeze({ status: "aborted" }); var DIRTY = (value) => ({ status: "dirty", value }); var OK = (value) => ({ status: "valid", value }); var isAborted = (x) => x.status === "aborted"; var isDirty = (x) => x.status === "dirty"; var isValid = (x) => x.status === "valid"; var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise; var errorUtil; (function(errorUtil2) { errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {}; errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message; })(errorUtil || (errorUtil = {})); class ParseInputLazyPath { constructor(parent, value, path13, key) { this._cachedPath = []; this.parent = parent; this.data = value; this._path = path13; this._key = key; } get path() { if (!this._cachedPath.length) { if (Array.isArray(this._key)) { this._cachedPath.push(...this._path, ...this._key); } else { this._cachedPath.push(...this._path, this._key); } } return this._cachedPath; } } var handleResult = (ctx, result) => { if (isValid(result)) { return { success: true, data: result.value }; } else { if (!ctx.common.issues.length) { throw new Error("Validation failed but no issues detected."); } return { success: false, get error() { if (this._error) return this._error; const error2 = new ZodError2(ctx.common.issues); this._error = error2; return this._error; } }; } }; function processCreateParams(params) { if (!params) return {}; const { errorMap: errorMap2, invalid_type_error, required_error, description } = params; if (errorMap2 && (invalid_type_error || required_error)) { throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`); } if (errorMap2) return { errorMap: errorMap2, description }; const customMap = (iss, ctx) => { const { message } = params; if (iss.code === "invalid_enum_value") { return { message: message ?? ctx.defaultError }; } if (typeof ctx.data === "undefined") { return { message: message ?? required_error ?? ctx.defaultError }; } if (iss.code !== "invalid_type") return { message: ctx.defaultError }; return { message: message ?? invalid_type_error ?? ctx.defaultError }; }; return { errorMap: customMap, description }; } class ZodType2 { get description() { return this._def.description; } _getType(input) { return getParsedType2(input.data); } _getOrReturnCtx(input, ctx) { return ctx || { common: input.parent.common, data: input.data, parsedType: getParsedType2(input.data), schemaErrorMap: this._def.errorMap, path: input.path, parent: input.parent }; } _processInputParams(input) { return { status: new ParseStatus, ctx: { common: input.parent.common, data: input.data, parsedType: getParsedType2(input.data), schemaErrorMap: this._def.errorMap, path: input.path, parent: input.parent } }; } _parseSync(input) { const result = this._parse(input); if (isAsync(result)) { throw new Error("Synchronous parse encountered promise."); } return result; } _parseAsync(input) { const result = this._parse(input); return Promise.resolve(result); } parse(data, params) { const result = this.safeParse(data, params); if (result.success) return result.data; throw result.error; } safeParse(data, params) { const ctx = { common: { issues: [], async: params?.async ?? false, contextualErrorMap: params?.errorMap }, path: params?.path || [], schemaErrorMap: this._def.errorMap, parent: null, data, parsedType: getParsedType2(data) }; const result = this._parseSync({ data, path: ctx.path, parent: ctx }); return handleResult(ctx, result); } "~validate"(data) { const ctx = { common: { issues: [], async: !!this["~standard"].async }, path: [], schemaErrorMap: this._def.errorMap, parent: null, data, parsedType: getParsedType2(data) }; if (!this["~standard"].async) { try { const result = this._parseSync({ data, path: [], parent: ctx }); return isValid(result) ? { value: result.value } : { issues: ctx.common.issues }; } catch (err) { if (err?.message?.toLowerCase()?.includes("encountered")) { this["~standard"].async = true; } ctx.common = { issues: [], async: true }; } } return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result) ? { value: result.value } : { issues: ctx.common.issues }); } async parseAsync(data, params) { const result = await this.safeParseAsync(data, params); if (result.success) return result.data; throw result.error; } async safeParseAsync(data, params) { const ctx = { common: { issues: [], contextualErrorMap: params?.errorMap, async: true }, path: params?.path || [], schemaErrorMap: this._def.errorMap, parent: null, data, parsedType: getParsedType2(data) }; const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx }); const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult)); return handleResult(ctx, result); } refine(check, message) { const getIssueProperties = (val) => { if (typeof message === "string" || typeof message === "undefined") { return { message }; } else if (typeof message === "function") { return message(val); } else { return message; } }; return this._refinement((val, ctx) => { const result = check(val); const setError = () => ctx.addIssue({ code: ZodIssueCode.custom, ...getIssueProperties(val) }); if (typeof Promise !== "undefined" && result instanceof Promise) { return result.then((data) => { if (!data) { setError(); return false; } else { return true; } }); } if (!result) { setError(); return false; } else { return true; } }); } refinement(check, refinementData) { return this._refinement((val, ctx) => { if (!check(val)) { ctx.addIssue(typeof refinementData === "function" ? refinementData(val, ctx) : refinementData); return false; } else { return true; } }); } _refinement(refinement) { return new ZodEffects({ schema: this, typeName: ZodFirstPartyTypeKind.ZodEffects, effect: { type: "refinement", refinement } }); } superRefine(refinement) { return this._refinement(refinement); } constructor(def) { this.spa = this.safeParseAsync; this._def = def; this.parse = this.parse.bind(this); this.safeParse = this.safeParse.bind(this); this.parseAsync = this.parseAsync.bind(this); this.safeParseAsync = this.safeParseAsync.bind(this); this.spa = this.spa.bind(this); this.refine = this.refine.bind(this); this.refinement = this.refinement.bind(this); this.superRefine = this.superRefine.bind(this); this.optional = this.optional.bind(this); this.nullable = this.nullable.bind(this); this.nullish = this.nullish.bind(this); this.array = this.array.bind(this); this.promise = this.promise.bind(this); this.or = this.or.bind(this); this.and = this.and.bind(this); this.transform = this.transform.bind(this); this.brand = this.brand.bind(this); this.default = this.default.bind(this); this.catch = this.catch.bind(this); this.describe = this.describe.bind(this); this.pipe = this.pipe.bind(this); this.readonly = this.readonly.bind(this); this.isNullable = this.isNullable.bind(this); this.isOptional = this.isOptional.bind(this); this["~standard"] = { version: 1, vendor: "zod", validate: (data) => this["~validate"](data) }; } optional() { return ZodOptional2.create(this, this._def); } nullable() { return ZodNullable2.create(this, this._def); } nullish() { return this.nullable().optional(); } array() { return ZodArray2.create(this); } promise() { return ZodPromise.create(this, this._def); } or(option) { return ZodUnion2.create([this, option], this._def); } and(incoming) { return ZodIntersection2.create(this, incoming, this._def); } transform(transform2) { return new ZodEffects({ ...processCreateParams(this._def), schema: this, typeName: ZodFirstPartyTypeKind.ZodEffects, effect: { type: "transform", transform: transform2 } }); } default(def) { const defaultValueFunc = typeof def === "function" ? def : () => def; return new ZodDefault2({ ...processCreateParams(this._def), innerType: this, defaultValue: defaultValueFunc, typeName: ZodFirstPartyTypeKind.ZodDefault }); } brand() { return new ZodBranded({ typeName: ZodFirstPartyTypeKind.ZodBranded, type: this, ...processCreateParams(this._def) }); } catch(def) { const catchValueFunc = typeof def === "function" ? def : () => def; return new ZodCatch2({ ...processCreateParams(this._def), innerType: this, catchValue: catchValueFunc, typeName: ZodFirstPartyTypeKind.ZodCatch }); } describe(description) { const This = this.constructor; return new This({ ...this._def, description }); } pipe(target) { return ZodPipeline.create(this, target); } readonly() { return ZodReadonly2.create(this); } isOptional() { return this.safeParse(undefined).success; } isNullable() { return this.safeParse(null).success; } } var cuidRegex = /^c[^\s-]{8,}$/i; var cuid2Regex = /^[0-9a-z]+$/; var ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i; var uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i; var nanoidRegex = /^[a-z0-9_-]{21}$/i; var jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/; var durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/; var emailRegex = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i; var _emojiRegex = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; var emojiRegex; var ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; var ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/; var ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/; var ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; var base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/; var base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/; var dateRegexSource = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`; var dateRegex = new RegExp(`^${dateRegexSource}$`); function timeRegexSource(args) { let secondsRegexSource = `[0-5]\\d`; if (args.precision) { secondsRegexSource = `${secondsRegexSource}\\.\\d{${args.precision}}`; } else if (args.precision == null) { secondsRegexSource = `${secondsRegexSource}(\\.\\d+)?`; } const secondsQuantifier = args.precision ? "+" : "?"; return `([01]\\d|2[0-3]):[0-5]\\d(:${secondsRegexSource})${secondsQuantifier}`; } function timeRegex(args) { return new RegExp(`^${timeRegexSource(args)}$`); } function datetimeRegex(args) { let regex = `${dateRegexSource}T${timeRegexSource(args)}`; const opts = []; opts.push(args.local ? `Z?` : `Z`); if (args.offset) opts.push(`([+-]\\d{2}:?\\d{2})`); regex = `${regex}(${opts.join("|")})`; return new RegExp(`^${regex}$`); } function isValidIP(ip, version2) { if ((version2 === "v4" || !version2) && ipv4Regex.test(ip)) { return true; } if ((version2 === "v6" || !version2) && ipv6Regex.test(ip)) { return true; } return false; } function isValidJWT2(jwt, alg) { if (!jwtRegex.test(jwt)) return false; try { const [header] = jwt.split("."); if (!header) return false; const base642 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "="); const decoded = JSON.parse(atob(base642)); if (typeof decoded !== "object" || decoded === null) return false; if ("typ" in decoded && decoded?.typ !== "JWT") return false; if (!decoded.alg) return false; if (alg && decoded.alg !== alg) return false; return true; } catch { return false; } } function isValidCidr(ip, version2) { if ((version2 === "v4" || !version2) && ipv4CidrRegex.test(ip)) { return true; } if ((version2 === "v6" || !version2) && ipv6CidrRegex.test(ip)) { return true; } return false; } class ZodString2 extends ZodType2 { _parse(input) { if (this._def.coerce) { input.data = String(input.data); } const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.string) { const ctx2 = this._getOrReturnCtx(input); addIssueToContext(ctx2, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.string, received: ctx2.parsedType }); return INVALID; } const status = new ParseStatus; let ctx = undefined; for (const check of this._def.checks) { if (check.kind === "min") { if (input.data.length < check.value) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: check.value, type: "string", inclusive: true, exact: false, message: check.message }); status.dirty(); } } else if (check.kind === "max") { if (input.data.length > check.value) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: check.value, type: "string", inclusive: true, exact: false, message: check.message }); status.dirty(); } } else if (check.kind === "length") { const tooBig = input.data.length > check.value; const tooSmall = input.data.length < check.value; if (tooBig || tooSmall) { ctx = this._getOrReturnCtx(input, ctx); if (tooBig) { addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: check.value, type: "string", inclusive: true, exact: true, message: check.message }); } else if (tooSmall) { addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: check.value, type: "string", inclusive: true, exact: true, message: check.message }); } status.dirty(); } } else if (check.kind === "email") { if (!emailRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "email", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "emoji") { if (!emojiRegex) { emojiRegex = new RegExp(_emojiRegex, "u"); } if (!emojiRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "emoji", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "uuid") { if (!uuidRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "uuid", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "nanoid") { if (!nanoidRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "nanoid", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "cuid") { if (!cuidRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "cuid", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "cuid2") { if (!cuid2Regex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "cuid2", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "ulid") { if (!ulidRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "ulid", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "url") { try { new URL(input.data); } catch { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "url", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "regex") { check.regex.lastIndex = 0; const testResult = check.regex.test(input.data); if (!testResult) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "regex", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "trim") { input.data = input.data.trim(); } else if (check.kind === "includes") { if (!input.data.includes(check.value, check.position)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: { includes: check.value, position: check.position }, message: check.message }); status.dirty(); } } else if (check.kind === "toLowerCase") { input.data = input.data.toLowerCase(); } else if (check.kind === "toUpperCase") { input.data = input.data.toUpperCase(); } else if (check.kind === "startsWith") { if (!input.data.startsWith(check.value)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: { startsWith: check.value }, message: check.message }); status.dirty(); } } else if (check.kind === "endsWith") { if (!input.data.endsWith(check.value)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: { endsWith: check.value }, message: check.message }); status.dirty(); } } else if (check.kind === "datetime") { const regex = datetimeRegex(check); if (!regex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: "datetime", message: check.message }); status.dirty(); } } else if (check.kind === "date") { const regex = dateRegex; if (!regex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: "date", message: check.message }); status.dirty(); } } else if (check.kind === "time") { const regex = timeRegex(check); if (!regex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_string, validation: "time", message: check.message }); status.dirty(); } } else if (check.kind === "duration") { if (!durationRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "duration", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "ip") { if (!isValidIP(input.data, check.version)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "ip", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "jwt") { if (!isValidJWT2(input.data, check.alg)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "jwt", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "cidr") { if (!isValidCidr(input.data, check.version)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "cidr", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "base64") { if (!base64Regex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "base64", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else if (check.kind === "base64url") { if (!base64urlRegex.test(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { validation: "base64url", code: ZodIssueCode.invalid_string, message: check.message }); status.dirty(); } } else { util.assertNever(check); } } return { status: status.value, value: input.data }; } _regex(regex, validation, message) { return this.refinement((data) => regex.test(data), { validation, code: ZodIssueCode.invalid_string, ...errorUtil.errToObj(message) }); } _addCheck(check) { return new ZodString2({ ...this._def, checks: [...this._def.checks, check] }); } email(message) { return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) }); } url(message) { return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) }); } emoji(message) { return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) }); } uuid(message) { return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) }); } nanoid(message) { return this._addCheck({ kind: "nanoid", ...errorUtil.errToObj(message) }); } cuid(message) { return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) }); } cuid2(message) { return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) }); } ulid(message) { return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) }); } base64(message) { return this._addCheck({ kind: "base64", ...errorUtil.errToObj(message) }); } base64url(message) { return this._addCheck({ kind: "base64url", ...errorUtil.errToObj(message) }); } jwt(options) { return this._addCheck({ kind: "jwt", ...errorUtil.errToObj(options) }); } ip(options) { return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) }); } cidr(options) { return this._addCheck({ kind: "cidr", ...errorUtil.errToObj(options) }); } datetime(options) { if (typeof options === "string") { return this._addCheck({ kind: "datetime", precision: null, offset: false, local: false, message: options }); } return this._addCheck({ kind: "datetime", precision: typeof options?.precision === "undefined" ? null : options?.precision, offset: options?.offset ?? false, local: options?.local ?? false, ...errorUtil.errToObj(options?.message) }); } date(message) { return this._addCheck({ kind: "date", message }); } time(options) { if (typeof options === "string") { return this._addCheck({ kind: "time", precision: null, message: options }); } return this._addCheck({ kind: "time", precision: typeof options?.precision === "undefined" ? null : options?.precision, ...errorUtil.errToObj(options?.message) }); } duration(message) { return this._addCheck({ kind: "duration", ...errorUtil.errToObj(message) }); } regex(regex, message) { return this._addCheck({ kind: "regex", regex, ...errorUtil.errToObj(message) }); } includes(value, options) { return this._addCheck({ kind: "includes", value, position: options?.position, ...errorUtil.errToObj(options?.message) }); } startsWith(value, message) { return this._addCheck({ kind: "startsWith", value, ...errorUtil.errToObj(message) }); } endsWith(value, message) { return this._addCheck({ kind: "endsWith", value, ...errorUtil.errToObj(message) }); } min(minLength, message) { return this._addCheck({ kind: "min", value: minLength, ...errorUtil.errToObj(message) }); } max(maxLength, message) { return this._addCheck({ kind: "max", value: maxLength, ...errorUtil.errToObj(message) }); } length(len, message) { return this._addCheck({ kind: "length", value: len, ...errorUtil.errToObj(message) }); } nonempty(message) { return this.min(1, errorUtil.errToObj(message)); } trim() { return new ZodString2({ ...this._def, checks: [...this._def.checks, { kind: "trim" }] }); } toLowerCase() { return new ZodString2({ ...this._def, checks: [...this._def.checks, { kind: "toLowerCase" }] }); } toUpperCase() { return new ZodString2({ ...this._def, checks: [...this._def.checks, { kind: "toUpperCase" }] }); } get isDatetime() { return !!this._def.checks.find((ch) => ch.kind === "datetime"); } get isDate() { return !!this._def.checks.find((ch) => ch.kind === "date"); } get isTime() { return !!this._def.checks.find((ch) => ch.kind === "time"); } get isDuration() { return !!this._def.checks.find((ch) => ch.kind === "duration"); } get isEmail() { return !!this._def.checks.find((ch) => ch.kind === "email"); } get isURL() { return !!this._def.checks.find((ch) => ch.kind === "url"); } get isEmoji() { return !!this._def.checks.find((ch) => ch.kind === "emoji"); } get isUUID() { return !!this._def.checks.find((ch) => ch.kind === "uuid"); } get isNANOID() { return !!this._def.checks.find((ch) => ch.kind === "nanoid"); } get isCUID() { return !!this._def.checks.find((ch) => ch.kind === "cuid"); } get isCUID2() { return !!this._def.checks.find((ch) => ch.kind === "cuid2"); } get isULID() { return !!this._def.checks.find((ch) => ch.kind === "ulid"); } get isIP() { return !!this._def.checks.find((ch) => ch.kind === "ip"); } get isCIDR() { return !!this._def.checks.find((ch) => ch.kind === "cidr"); } get isBase64() { return !!this._def.checks.find((ch) => ch.kind === "base64"); } get isBase64url() { return !!this._def.checks.find((ch) => ch.kind === "base64url"); } get minLength() { let min = null; for (const ch of this._def.checks) { if (ch.kind === "min") { if (min === null || ch.value > min) min = ch.value; } } return min; } get maxLength() { let max = null; for (const ch of this._def.checks) { if (ch.kind === "max") { if (max === null || ch.value < max) max = ch.value; } } return max; } } ZodString2.create = (params) => { return new ZodString2({ checks: [], typeName: ZodFirstPartyTypeKind.ZodString, coerce: params?.coerce ?? false, ...processCreateParams(params) }); }; function floatSafeRemainder2(val, step) { const valDecCount = (val.toString().split(".")[1] || "").length; const stepDecCount = (step.toString().split(".")[1] || "").length; const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); return valInt % stepInt / 10 ** decCount; } class ZodNumber2 extends ZodType2 { constructor() { super(...arguments); this.min = this.gte; this.max = this.lte; this.step = this.multipleOf; } _parse(input) { if (this._def.coerce) { input.data = Number(input.data); } const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.number) { const ctx2 = this._getOrReturnCtx(input); addIssueToContext(ctx2, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.number, received: ctx2.parsedType }); return INVALID; } let ctx = undefined; const status = new ParseStatus; for (const check of this._def.checks) { if (check.kind === "int") { if (!util.isInteger(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: "integer", received: "float", message: check.message }); status.dirty(); } } else if (check.kind === "min") { const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value; if (tooSmall) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: check.value, type: "number", inclusive: check.inclusive, exact: false, message: check.message }); status.dirty(); } } else if (check.kind === "max") { const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value; if (tooBig) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: check.value, type: "number", inclusive: check.inclusive, exact: false, message: check.message }); status.dirty(); } } else if (check.kind === "multipleOf") { if (floatSafeRemainder2(input.data, check.value) !== 0) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.not_multiple_of, multipleOf: check.value, message: check.message }); status.dirty(); } } else if (check.kind === "finite") { if (!Number.isFinite(input.data)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.not_finite, message: check.message }); status.dirty(); } } else { util.assertNever(check); } } return { status: status.value, value: input.data }; } gte(value, message) { return this.setLimit("min", value, true, errorUtil.toString(message)); } gt(value, message) { return this.setLimit("min", value, false, errorUtil.toString(message)); } lte(value, message) { return this.setLimit("max", value, true, errorUtil.toString(message)); } lt(value, message) { return this.setLimit("max", value, false, errorUtil.toString(message)); } setLimit(kind, value, inclusive, message) { return new ZodNumber2({ ...this._def, checks: [ ...this._def.checks, { kind, value, inclusive, message: errorUtil.toString(message) } ] }); } _addCheck(check) { return new ZodNumber2({ ...this._def, checks: [...this._def.checks, check] }); } int(message) { return this._addCheck({ kind: "int", message: errorUtil.toString(message) }); } positive(message) { return this._addCheck({ kind: "min", value: 0, inclusive: false, message: errorUtil.toString(message) }); } negative(message) { return this._addCheck({ kind: "max", value: 0, inclusive: false, message: errorUtil.toString(message) }); } nonpositive(message) { return this._addCheck({ kind: "max", value: 0, inclusive: true, message: errorUtil.toString(message) }); } nonnegative(message) { return this._addCheck({ kind: "min", value: 0, inclusive: true, message: errorUtil.toString(message) }); } multipleOf(value, message) { return this._addCheck({ kind: "multipleOf", value, message: errorUtil.toString(message) }); } finite(message) { return this._addCheck({ kind: "finite", message: errorUtil.toString(message) }); } safe(message) { return this._addCheck({ kind: "min", inclusive: true, value: Number.MIN_SAFE_INTEGER, message: errorUtil.toString(message) })._addCheck({ kind: "max", inclusive: true, value: Number.MAX_SAFE_INTEGER, message: errorUtil.toString(message) }); } get minValue() { let min = null; for (const ch of this._def.checks) { if (ch.kind === "min") { if (min === null || ch.value > min) min = ch.value; } } return min; } get maxValue() { let max = null; for (const ch of this._def.checks) { if (ch.kind === "max") { if (max === null || ch.value < max) max = ch.value; } } return max; } get isInt() { return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util.isInteger(ch.value)); } get isFinite() { let max = null; let min = null; for (const ch of this._def.checks) { if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") { return true; } else if (ch.kind === "min") { if (min === null || ch.value > min) min = ch.value; } else if (ch.kind === "max") { if (max === null || ch.value < max) max = ch.value; } } return Number.isFinite(min) && Number.isFinite(max); } } ZodNumber2.create = (params) => { return new ZodNumber2({ checks: [], typeName: ZodFirstPartyTypeKind.ZodNumber, coerce: params?.coerce || false, ...processCreateParams(params) }); }; class ZodBigInt extends ZodType2 { constructor() { super(...arguments); this.min = this.gte; this.max = this.lte; } _parse(input) { if (this._def.coerce) { try { input.data = BigInt(input.data); } catch { return this._getInvalidInput(input); } } const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.bigint) { return this._getInvalidInput(input); } let ctx = undefined; const status = new ParseStatus; for (const check of this._def.checks) { if (check.kind === "min") { const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value; if (tooSmall) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_small, type: "bigint", minimum: check.value, inclusive: check.inclusive, message: check.message }); status.dirty(); } } else if (check.kind === "max") { const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value; if (tooBig) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_big, type: "bigint", maximum: check.value, inclusive: check.inclusive, message: check.message }); status.dirty(); } } else if (check.kind === "multipleOf") { if (input.data % check.value !== BigInt(0)) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.not_multiple_of, multipleOf: check.value, message: check.message }); status.dirty(); } } else { util.assertNever(check); } } return { status: status.value, value: input.data }; } _getInvalidInput(input) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.bigint, received: ctx.parsedType }); return INVALID; } gte(value, message) { return this.setLimit("min", value, true, errorUtil.toString(message)); } gt(value, message) { return this.setLimit("min", value, false, errorUtil.toString(message)); } lte(value, message) { return this.setLimit("max", value, true, errorUtil.toString(message)); } lt(value, message) { return this.setLimit("max", value, false, errorUtil.toString(message)); } setLimit(kind, value, inclusive, message) { return new ZodBigInt({ ...this._def, checks: [ ...this._def.checks, { kind, value, inclusive, message: errorUtil.toString(message) } ] }); } _addCheck(check) { return new ZodBigInt({ ...this._def, checks: [...this._def.checks, check] }); } positive(message) { return this._addCheck({ kind: "min", value: BigInt(0), inclusive: false, message: errorUtil.toString(message) }); } negative(message) { return this._addCheck({ kind: "max", value: BigInt(0), inclusive: false, message: errorUtil.toString(message) }); } nonpositive(message) { return this._addCheck({ kind: "max", value: BigInt(0), inclusive: true, message: errorUtil.toString(message) }); } nonnegative(message) { return this._addCheck({ kind: "min", value: BigInt(0), inclusive: true, message: errorUtil.toString(message) }); } multipleOf(value, message) { return this._addCheck({ kind: "multipleOf", value, message: errorUtil.toString(message) }); } get minValue() { let min = null; for (const ch of this._def.checks) { if (ch.kind === "min") { if (min === null || ch.value > min) min = ch.value; } } return min; } get maxValue() { let max = null; for (const ch of this._def.checks) { if (ch.kind === "max") { if (max === null || ch.value < max) max = ch.value; } } return max; } } ZodBigInt.create = (params) => { return new ZodBigInt({ checks: [], typeName: ZodFirstPartyTypeKind.ZodBigInt, coerce: params?.coerce ?? false, ...processCreateParams(params) }); }; class ZodBoolean2 extends ZodType2 { _parse(input) { if (this._def.coerce) { input.data = Boolean(input.data); } const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.boolean) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.boolean, received: ctx.parsedType }); return INVALID; } return OK(input.data); } } ZodBoolean2.create = (params) => { return new ZodBoolean2({ typeName: ZodFirstPartyTypeKind.ZodBoolean, coerce: params?.coerce || false, ...processCreateParams(params) }); }; class ZodDate extends ZodType2 { _parse(input) { if (this._def.coerce) { input.data = new Date(input.data); } const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.date) { const ctx2 = this._getOrReturnCtx(input); addIssueToContext(ctx2, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.date, received: ctx2.parsedType }); return INVALID; } if (Number.isNaN(input.data.getTime())) { const ctx2 = this._getOrReturnCtx(input); addIssueToContext(ctx2, { code: ZodIssueCode.invalid_date }); return INVALID; } const status = new ParseStatus; let ctx = undefined; for (const check of this._def.checks) { if (check.kind === "min") { if (input.data.getTime() < check.value) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_small, message: check.message, inclusive: true, exact: false, minimum: check.value, type: "date" }); status.dirty(); } } else if (check.kind === "max") { if (input.data.getTime() > check.value) { ctx = this._getOrReturnCtx(input, ctx); addIssueToContext(ctx, { code: ZodIssueCode.too_big, message: check.message, inclusive: true, exact: false, maximum: check.value, type: "date" }); status.dirty(); } } else { util.assertNever(check); } } return { status: status.value, value: new Date(input.data.getTime()) }; } _addCheck(check) { return new ZodDate({ ...this._def, checks: [...this._def.checks, check] }); } min(minDate, message) { return this._addCheck({ kind: "min", value: minDate.getTime(), message: errorUtil.toString(message) }); } max(maxDate, message) { return this._addCheck({ kind: "max", value: maxDate.getTime(), message: errorUtil.toString(message) }); } get minDate() { let min = null; for (const ch of this._def.checks) { if (ch.kind === "min") { if (min === null || ch.value > min) min = ch.value; } } return min != null ? new Date(min) : null; } get maxDate() { let max = null; for (const ch of this._def.checks) { if (ch.kind === "max") { if (max === null || ch.value < max) max = ch.value; } } return max != null ? new Date(max) : null; } } ZodDate.create = (params) => { return new ZodDate({ checks: [], coerce: params?.coerce || false, typeName: ZodFirstPartyTypeKind.ZodDate, ...processCreateParams(params) }); }; class ZodSymbol extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.symbol) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.symbol, received: ctx.parsedType }); return INVALID; } return OK(input.data); } } ZodSymbol.create = (params) => { return new ZodSymbol({ typeName: ZodFirstPartyTypeKind.ZodSymbol, ...processCreateParams(params) }); }; class ZodUndefined extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.undefined) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.undefined, received: ctx.parsedType }); return INVALID; } return OK(input.data); } } ZodUndefined.create = (params) => { return new ZodUndefined({ typeName: ZodFirstPartyTypeKind.ZodUndefined, ...processCreateParams(params) }); }; class ZodNull2 extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.null) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.null, received: ctx.parsedType }); return INVALID; } return OK(input.data); } } ZodNull2.create = (params) => { return new ZodNull2({ typeName: ZodFirstPartyTypeKind.ZodNull, ...processCreateParams(params) }); }; class ZodAny extends ZodType2 { constructor() { super(...arguments); this._any = true; } _parse(input) { return OK(input.data); } } ZodAny.create = (params) => { return new ZodAny({ typeName: ZodFirstPartyTypeKind.ZodAny, ...processCreateParams(params) }); }; class ZodUnknown2 extends ZodType2 { constructor() { super(...arguments); this._unknown = true; } _parse(input) { return OK(input.data); } } ZodUnknown2.create = (params) => { return new ZodUnknown2({ typeName: ZodFirstPartyTypeKind.ZodUnknown, ...processCreateParams(params) }); }; class ZodNever2 extends ZodType2 { _parse(input) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.never, received: ctx.parsedType }); return INVALID; } } ZodNever2.create = (params) => { return new ZodNever2({ typeName: ZodFirstPartyTypeKind.ZodNever, ...processCreateParams(params) }); }; class ZodVoid extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.undefined) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.void, received: ctx.parsedType }); return INVALID; } return OK(input.data); } } ZodVoid.create = (params) => { return new ZodVoid({ typeName: ZodFirstPartyTypeKind.ZodVoid, ...processCreateParams(params) }); }; class ZodArray2 extends ZodType2 { _parse(input) { const { ctx, status } = this._processInputParams(input); const def = this._def; if (ctx.parsedType !== ZodParsedType.array) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.array, received: ctx.parsedType }); return INVALID; } if (def.exactLength !== null) { const tooBig = ctx.data.length > def.exactLength.value; const tooSmall = ctx.data.length < def.exactLength.value; if (tooBig || tooSmall) { addIssueToContext(ctx, { code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small, minimum: tooSmall ? def.exactLength.value : undefined, maximum: tooBig ? def.exactLength.value : undefined, type: "array", inclusive: true, exact: true, message: def.exactLength.message }); status.dirty(); } } if (def.minLength !== null) { if (ctx.data.length < def.minLength.value) { addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: def.minLength.value, type: "array", inclusive: true, exact: false, message: def.minLength.message }); status.dirty(); } } if (def.maxLength !== null) { if (ctx.data.length > def.maxLength.value) { addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: def.maxLength.value, type: "array", inclusive: true, exact: false, message: def.maxLength.message }); status.dirty(); } } if (ctx.common.async) { return Promise.all([...ctx.data].map((item, i) => { return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i)); })).then((result2) => { return ParseStatus.mergeArray(status, result2); }); } const result = [...ctx.data].map((item, i) => { return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i)); }); return ParseStatus.mergeArray(status, result); } get element() { return this._def.type; } min(minLength, message) { return new ZodArray2({ ...this._def, minLength: { value: minLength, message: errorUtil.toString(message) } }); } max(maxLength, message) { return new ZodArray2({ ...this._def, maxLength: { value: maxLength, message: errorUtil.toString(message) } }); } length(len, message) { return new ZodArray2({ ...this._def, exactLength: { value: len, message: errorUtil.toString(message) } }); } nonempty(message) { return this.min(1, message); } } ZodArray2.create = (schema, params) => { return new ZodArray2({ type: schema, minLength: null, maxLength: null, exactLength: null, typeName: ZodFirstPartyTypeKind.ZodArray, ...processCreateParams(params) }); }; function deepPartialify(schema) { if (schema instanceof ZodObject2) { const newShape = {}; for (const key in schema.shape) { const fieldSchema = schema.shape[key]; newShape[key] = ZodOptional2.create(deepPartialify(fieldSchema)); } return new ZodObject2({ ...schema._def, shape: () => newShape }); } else if (schema instanceof ZodArray2) { return new ZodArray2({ ...schema._def, type: deepPartialify(schema.element) }); } else if (schema instanceof ZodOptional2) { return ZodOptional2.create(deepPartialify(schema.unwrap())); } else if (schema instanceof ZodNullable2) { return ZodNullable2.create(deepPartialify(schema.unwrap())); } else if (schema instanceof ZodTuple) { return ZodTuple.create(schema.items.map((item) => deepPartialify(item))); } else { return schema; } } class ZodObject2 extends ZodType2 { constructor() { super(...arguments); this._cached = null; this.nonstrict = this.passthrough; this.augment = this.extend; } _getCached() { if (this._cached !== null) return this._cached; const shape = this._def.shape(); const keys = util.objectKeys(shape); this._cached = { shape, keys }; return this._cached; } _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.object) { const ctx2 = this._getOrReturnCtx(input); addIssueToContext(ctx2, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.object, received: ctx2.parsedType }); return INVALID; } const { status, ctx } = this._processInputParams(input); const { shape, keys: shapeKeys } = this._getCached(); const extraKeys = []; if (!(this._def.catchall instanceof ZodNever2 && this._def.unknownKeys === "strip")) { for (const key in ctx.data) { if (!shapeKeys.includes(key)) { extraKeys.push(key); } } } const pairs = []; for (const key of shapeKeys) { const keyValidator = shape[key]; const value = ctx.data[key]; pairs.push({ key: { status: "valid", value: key }, value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)), alwaysSet: key in ctx.data }); } if (this._def.catchall instanceof ZodNever2) { const unknownKeys = this._def.unknownKeys; if (unknownKeys === "passthrough") { for (const key of extraKeys) { pairs.push({ key: { status: "valid", value: key }, value: { status: "valid", value: ctx.data[key] } }); } } else if (unknownKeys === "strict") { if (extraKeys.length > 0) { addIssueToContext(ctx, { code: ZodIssueCode.unrecognized_keys, keys: extraKeys }); status.dirty(); } } else if (unknownKeys === "strip") {} else { throw new Error(`Internal ZodObject error: invalid unknownKeys value.`); } } else { const catchall = this._def.catchall; for (const key of extraKeys) { const value = ctx.data[key]; pairs.push({ key: { status: "valid", value: key }, value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)), alwaysSet: key in ctx.data }); } } if (ctx.common.async) { return Promise.resolve().then(async () => { const syncPairs = []; for (const pair of pairs) { const key = await pair.key; const value = await pair.value; syncPairs.push({ key, value, alwaysSet: pair.alwaysSet }); } return syncPairs; }).then((syncPairs) => { return ParseStatus.mergeObjectSync(status, syncPairs); }); } else { return ParseStatus.mergeObjectSync(status, pairs); } } get shape() { return this._def.shape(); } strict(message) { errorUtil.errToObj; return new ZodObject2({ ...this._def, unknownKeys: "strict", ...message !== undefined ? { errorMap: (issue2, ctx) => { const defaultError = this._def.errorMap?.(issue2, ctx).message ?? ctx.defaultError; if (issue2.code === "unrecognized_keys") return { message: errorUtil.errToObj(message).message ?? defaultError }; return { message: defaultError }; } } : {} }); } strip() { return new ZodObject2({ ...this._def, unknownKeys: "strip" }); } passthrough() { return new ZodObject2({ ...this._def, unknownKeys: "passthrough" }); } extend(augmentation) { return new ZodObject2({ ...this._def, shape: () => ({ ...this._def.shape(), ...augmentation }) }); } merge(merging) { const merged = new ZodObject2({ unknownKeys: merging._def.unknownKeys, catchall: merging._def.catchall, shape: () => ({ ...this._def.shape(), ...merging._def.shape() }), typeName: ZodFirstPartyTypeKind.ZodObject }); return merged; } setKey(key, schema) { return this.augment({ [key]: schema }); } catchall(index) { return new ZodObject2({ ...this._def, catchall: index }); } pick(mask) { const shape = {}; for (const key of util.objectKeys(mask)) { if (mask[key] && this.shape[key]) { shape[key] = this.shape[key]; } } return new ZodObject2({ ...this._def, shape: () => shape }); } omit(mask) { const shape = {}; for (const key of util.objectKeys(this.shape)) { if (!mask[key]) { shape[key] = this.shape[key]; } } return new ZodObject2({ ...this._def, shape: () => shape }); } deepPartial() { return deepPartialify(this); } partial(mask) { const newShape = {}; for (const key of util.objectKeys(this.shape)) { const fieldSchema = this.shape[key]; if (mask && !mask[key]) { newShape[key] = fieldSchema; } else { newShape[key] = fieldSchema.optional(); } } return new ZodObject2({ ...this._def, shape: () => newShape }); } required(mask) { const newShape = {}; for (const key of util.objectKeys(this.shape)) { if (mask && !mask[key]) { newShape[key] = this.shape[key]; } else { const fieldSchema = this.shape[key]; let newField = fieldSchema; while (newField instanceof ZodOptional2) { newField = newField._def.innerType; } newShape[key] = newField; } } return new ZodObject2({ ...this._def, shape: () => newShape }); } keyof() { return createZodEnum(util.objectKeys(this.shape)); } } ZodObject2.create = (shape, params) => { return new ZodObject2({ shape: () => shape, unknownKeys: "strip", catchall: ZodNever2.create(), typeName: ZodFirstPartyTypeKind.ZodObject, ...processCreateParams(params) }); }; ZodObject2.strictCreate = (shape, params) => { return new ZodObject2({ shape: () => shape, unknownKeys: "strict", catchall: ZodNever2.create(), typeName: ZodFirstPartyTypeKind.ZodObject, ...processCreateParams(params) }); }; ZodObject2.lazycreate = (shape, params) => { return new ZodObject2({ shape, unknownKeys: "strip", catchall: ZodNever2.create(), typeName: ZodFirstPartyTypeKind.ZodObject, ...processCreateParams(params) }); }; class ZodUnion2 extends ZodType2 { _parse(input) { const { ctx } = this._processInputParams(input); const options = this._def.options; function handleResults(results) { for (const result of results) { if (result.result.status === "valid") { return result.result; } } for (const result of results) { if (result.result.status === "dirty") { ctx.common.issues.push(...result.ctx.common.issues); return result.result; } } const unionErrors = results.map((result) => new ZodError2(result.ctx.common.issues)); addIssueToContext(ctx, { code: ZodIssueCode.invalid_union, unionErrors }); return INVALID; } if (ctx.common.async) { return Promise.all(options.map(async (option) => { const childCtx = { ...ctx, common: { ...ctx.common, issues: [] }, parent: null }; return { result: await option._parseAsync({ data: ctx.data, path: ctx.path, parent: childCtx }), ctx: childCtx }; })).then(handleResults); } else { let dirty = undefined; const issues = []; for (const option of options) { const childCtx = { ...ctx, common: { ...ctx.common, issues: [] }, parent: null }; const result = option._parseSync({ data: ctx.data, path: ctx.path, parent: childCtx }); if (result.status === "valid") { return result; } else if (result.status === "dirty" && !dirty) { dirty = { result, ctx: childCtx }; } if (childCtx.common.issues.length) { issues.push(childCtx.common.issues); } } if (dirty) { ctx.common.issues.push(...dirty.ctx.common.issues); return dirty.result; } const unionErrors = issues.map((issues2) => new ZodError2(issues2)); addIssueToContext(ctx, { code: ZodIssueCode.invalid_union, unionErrors }); return INVALID; } } get options() { return this._def.options; } } ZodUnion2.create = (types, params) => { return new ZodUnion2({ options: types, typeName: ZodFirstPartyTypeKind.ZodUnion, ...processCreateParams(params) }); }; var getDiscriminator = (type) => { if (type instanceof ZodLazy) { return getDiscriminator(type.schema); } else if (type instanceof ZodEffects) { return getDiscriminator(type.innerType()); } else if (type instanceof ZodLiteral2) { return [type.value]; } else if (type instanceof ZodEnum2) { return type.options; } else if (type instanceof ZodNativeEnum) { return util.objectValues(type.enum); } else if (type instanceof ZodDefault2) { return getDiscriminator(type._def.innerType); } else if (type instanceof ZodUndefined) { return [undefined]; } else if (type instanceof ZodNull2) { return [null]; } else if (type instanceof ZodOptional2) { return [undefined, ...getDiscriminator(type.unwrap())]; } else if (type instanceof ZodNullable2) { return [null, ...getDiscriminator(type.unwrap())]; } else if (type instanceof ZodBranded) { return getDiscriminator(type.unwrap()); } else if (type instanceof ZodReadonly2) { return getDiscriminator(type.unwrap()); } else if (type instanceof ZodCatch2) { return getDiscriminator(type._def.innerType); } else { return []; } }; class ZodDiscriminatedUnion2 extends ZodType2 { _parse(input) { const { ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.object) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.object, received: ctx.parsedType }); return INVALID; } const discriminator = this.discriminator; const discriminatorValue = ctx.data[discriminator]; const option = this.optionsMap.get(discriminatorValue); if (!option) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_union_discriminator, options: Array.from(this.optionsMap.keys()), path: [discriminator] }); return INVALID; } if (ctx.common.async) { return option._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }); } else { return option._parseSync({ data: ctx.data, path: ctx.path, parent: ctx }); } } get discriminator() { return this._def.discriminator; } get options() { return this._def.options; } get optionsMap() { return this._def.optionsMap; } static create(discriminator, options, params) { const optionsMap = new Map; for (const type of options) { const discriminatorValues = getDiscriminator(type.shape[discriminator]); if (!discriminatorValues.length) { throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`); } for (const value of discriminatorValues) { if (optionsMap.has(value)) { throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`); } optionsMap.set(value, type); } } return new ZodDiscriminatedUnion2({ typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion, discriminator, options, optionsMap, ...processCreateParams(params) }); } } function mergeValues2(a, b) { const aType = getParsedType2(a); const bType = getParsedType2(b); if (a === b) { return { valid: true, data: a }; } else if (aType === ZodParsedType.object && bType === ZodParsedType.object) { const bKeys = util.objectKeys(b); const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1); const newObj = { ...a, ...b }; for (const key of sharedKeys) { const sharedValue = mergeValues2(a[key], b[key]); if (!sharedValue.valid) { return { valid: false }; } newObj[key] = sharedValue.data; } return { valid: true, data: newObj }; } else if (aType === ZodParsedType.array && bType === ZodParsedType.array) { if (a.length !== b.length) { return { valid: false }; } const newArray = []; for (let index = 0;index < a.length; index++) { const itemA = a[index]; const itemB = b[index]; const sharedValue = mergeValues2(itemA, itemB); if (!sharedValue.valid) { return { valid: false }; } newArray.push(sharedValue.data); } return { valid: true, data: newArray }; } else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) { return { valid: true, data: a }; } else { return { valid: false }; } } class ZodIntersection2 extends ZodType2 { _parse(input) { const { status, ctx } = this._processInputParams(input); const handleParsed = (parsedLeft, parsedRight) => { if (isAborted(parsedLeft) || isAborted(parsedRight)) { return INVALID; } const merged = mergeValues2(parsedLeft.value, parsedRight.value); if (!merged.valid) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_intersection_types }); return INVALID; } if (isDirty(parsedLeft) || isDirty(parsedRight)) { status.dirty(); } return { status: status.value, value: merged.data }; }; if (ctx.common.async) { return Promise.all([ this._def.left._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }), this._def.right._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }) ]).then(([left, right]) => handleParsed(left, right)); } else { return handleParsed(this._def.left._parseSync({ data: ctx.data, path: ctx.path, parent: ctx }), this._def.right._parseSync({ data: ctx.data, path: ctx.path, parent: ctx })); } } } ZodIntersection2.create = (left, right, params) => { return new ZodIntersection2({ left, right, typeName: ZodFirstPartyTypeKind.ZodIntersection, ...processCreateParams(params) }); }; class ZodTuple extends ZodType2 { _parse(input) { const { status, ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.array) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.array, received: ctx.parsedType }); return INVALID; } if (ctx.data.length < this._def.items.length) { addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: this._def.items.length, inclusive: true, exact: false, type: "array" }); return INVALID; } const rest = this._def.rest; if (!rest && ctx.data.length > this._def.items.length) { addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: this._def.items.length, inclusive: true, exact: false, type: "array" }); status.dirty(); } const items = [...ctx.data].map((item, itemIndex) => { const schema = this._def.items[itemIndex] || this._def.rest; if (!schema) return null; return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex)); }).filter((x) => !!x); if (ctx.common.async) { return Promise.all(items).then((results) => { return ParseStatus.mergeArray(status, results); }); } else { return ParseStatus.mergeArray(status, items); } } get items() { return this._def.items; } rest(rest) { return new ZodTuple({ ...this._def, rest }); } } ZodTuple.create = (schemas3, params) => { if (!Array.isArray(schemas3)) { throw new Error("You must pass an array of schemas to z.tuple([ ... ])"); } return new ZodTuple({ items: schemas3, typeName: ZodFirstPartyTypeKind.ZodTuple, rest: null, ...processCreateParams(params) }); }; class ZodRecord2 extends ZodType2 { get keySchema() { return this._def.keyType; } get valueSchema() { return this._def.valueType; } _parse(input) { const { status, ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.object) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.object, received: ctx.parsedType }); return INVALID; } const pairs = []; const keyType = this._def.keyType; const valueType = this._def.valueType; for (const key in ctx.data) { pairs.push({ key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)), value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)), alwaysSet: key in ctx.data }); } if (ctx.common.async) { return ParseStatus.mergeObjectAsync(status, pairs); } else { return ParseStatus.mergeObjectSync(status, pairs); } } get element() { return this._def.valueType; } static create(first, second, third) { if (second instanceof ZodType2) { return new ZodRecord2({ keyType: first, valueType: second, typeName: ZodFirstPartyTypeKind.ZodRecord, ...processCreateParams(third) }); } return new ZodRecord2({ keyType: ZodString2.create(), valueType: first, typeName: ZodFirstPartyTypeKind.ZodRecord, ...processCreateParams(second) }); } } class ZodMap extends ZodType2 { get keySchema() { return this._def.keyType; } get valueSchema() { return this._def.valueType; } _parse(input) { const { status, ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.map) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.map, received: ctx.parsedType }); return INVALID; } const keyType = this._def.keyType; const valueType = this._def.valueType; const pairs = [...ctx.data.entries()].map(([key, value], index) => { return { key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, "key"])), value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, "value"])) }; }); if (ctx.common.async) { const finalMap = new Map; return Promise.resolve().then(async () => { for (const pair of pairs) { const key = await pair.key; const value = await pair.value; if (key.status === "aborted" || value.status === "aborted") { return INVALID; } if (key.status === "dirty" || value.status === "dirty") { status.dirty(); } finalMap.set(key.value, value.value); } return { status: status.value, value: finalMap }; }); } else { const finalMap = new Map; for (const pair of pairs) { const key = pair.key; const value = pair.value; if (key.status === "aborted" || value.status === "aborted") { return INVALID; } if (key.status === "dirty" || value.status === "dirty") { status.dirty(); } finalMap.set(key.value, value.value); } return { status: status.value, value: finalMap }; } } } ZodMap.create = (keyType, valueType, params) => { return new ZodMap({ valueType, keyType, typeName: ZodFirstPartyTypeKind.ZodMap, ...processCreateParams(params) }); }; class ZodSet extends ZodType2 { _parse(input) { const { status, ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.set) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.set, received: ctx.parsedType }); return INVALID; } const def = this._def; if (def.minSize !== null) { if (ctx.data.size < def.minSize.value) { addIssueToContext(ctx, { code: ZodIssueCode.too_small, minimum: def.minSize.value, type: "set", inclusive: true, exact: false, message: def.minSize.message }); status.dirty(); } } if (def.maxSize !== null) { if (ctx.data.size > def.maxSize.value) { addIssueToContext(ctx, { code: ZodIssueCode.too_big, maximum: def.maxSize.value, type: "set", inclusive: true, exact: false, message: def.maxSize.message }); status.dirty(); } } const valueType = this._def.valueType; function finalizeSet(elements2) { const parsedSet = new Set; for (const element of elements2) { if (element.status === "aborted") return INVALID; if (element.status === "dirty") status.dirty(); parsedSet.add(element.value); } return { status: status.value, value: parsedSet }; } const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i))); if (ctx.common.async) { return Promise.all(elements).then((elements2) => finalizeSet(elements2)); } else { return finalizeSet(elements); } } min(minSize, message) { return new ZodSet({ ...this._def, minSize: { value: minSize, message: errorUtil.toString(message) } }); } max(maxSize, message) { return new ZodSet({ ...this._def, maxSize: { value: maxSize, message: errorUtil.toString(message) } }); } size(size, message) { return this.min(size, message).max(size, message); } nonempty(message) { return this.min(1, message); } } ZodSet.create = (valueType, params) => { return new ZodSet({ valueType, minSize: null, maxSize: null, typeName: ZodFirstPartyTypeKind.ZodSet, ...processCreateParams(params) }); }; class ZodFunction extends ZodType2 { constructor() { super(...arguments); this.validate = this.implement; } _parse(input) { const { ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.function) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.function, received: ctx.parsedType }); return INVALID; } function makeArgsIssue(args, error2) { return makeIssue({ data: args, path: ctx.path, errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default2].filter((x) => !!x), issueData: { code: ZodIssueCode.invalid_arguments, argumentsError: error2 } }); } function makeReturnsIssue(returns, error2) { return makeIssue({ data: returns, path: ctx.path, errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), en_default2].filter((x) => !!x), issueData: { code: ZodIssueCode.invalid_return_type, returnTypeError: error2 } }); } const params = { errorMap: ctx.common.contextualErrorMap }; const fn = ctx.data; if (this._def.returns instanceof ZodPromise) { const me = this; return OK(async function(...args) { const error2 = new ZodError2([]); const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => { error2.addIssue(makeArgsIssue(args, e)); throw error2; }); const result = await Reflect.apply(fn, this, parsedArgs); const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e) => { error2.addIssue(makeReturnsIssue(result, e)); throw error2; }); return parsedReturns; }); } else { const me = this; return OK(function(...args) { const parsedArgs = me._def.args.safeParse(args, params); if (!parsedArgs.success) { throw new ZodError2([makeArgsIssue(args, parsedArgs.error)]); } const result = Reflect.apply(fn, this, parsedArgs.data); const parsedReturns = me._def.returns.safeParse(result, params); if (!parsedReturns.success) { throw new ZodError2([makeReturnsIssue(result, parsedReturns.error)]); } return parsedReturns.data; }); } } parameters() { return this._def.args; } returnType() { return this._def.returns; } args(...items) { return new ZodFunction({ ...this._def, args: ZodTuple.create(items).rest(ZodUnknown2.create()) }); } returns(returnType) { return new ZodFunction({ ...this._def, returns: returnType }); } implement(func) { const validatedFunc = this.parse(func); return validatedFunc; } strictImplement(func) { const validatedFunc = this.parse(func); return validatedFunc; } static create(args, returns, params) { return new ZodFunction({ args: args ? args : ZodTuple.create([]).rest(ZodUnknown2.create()), returns: returns || ZodUnknown2.create(), typeName: ZodFirstPartyTypeKind.ZodFunction, ...processCreateParams(params) }); } } class ZodLazy extends ZodType2 { get schema() { return this._def.getter(); } _parse(input) { const { ctx } = this._processInputParams(input); const lazySchema = this._def.getter(); return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx }); } } ZodLazy.create = (getter, params) => { return new ZodLazy({ getter, typeName: ZodFirstPartyTypeKind.ZodLazy, ...processCreateParams(params) }); }; class ZodLiteral2 extends ZodType2 { _parse(input) { if (input.data !== this._def.value) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { received: ctx.data, code: ZodIssueCode.invalid_literal, expected: this._def.value }); return INVALID; } return { status: "valid", value: input.data }; } get value() { return this._def.value; } } ZodLiteral2.create = (value, params) => { return new ZodLiteral2({ value, typeName: ZodFirstPartyTypeKind.ZodLiteral, ...processCreateParams(params) }); }; function createZodEnum(values, params) { return new ZodEnum2({ values, typeName: ZodFirstPartyTypeKind.ZodEnum, ...processCreateParams(params) }); } class ZodEnum2 extends ZodType2 { _parse(input) { if (typeof input.data !== "string") { const ctx = this._getOrReturnCtx(input); const expectedValues = this._def.values; addIssueToContext(ctx, { expected: util.joinValues(expectedValues), received: ctx.parsedType, code: ZodIssueCode.invalid_type }); return INVALID; } if (!this._cache) { this._cache = new Set(this._def.values); } if (!this._cache.has(input.data)) { const ctx = this._getOrReturnCtx(input); const expectedValues = this._def.values; addIssueToContext(ctx, { received: ctx.data, code: ZodIssueCode.invalid_enum_value, options: expectedValues }); return INVALID; } return OK(input.data); } get options() { return this._def.values; } get enum() { const enumValues = {}; for (const val of this._def.values) { enumValues[val] = val; } return enumValues; } get Values() { const enumValues = {}; for (const val of this._def.values) { enumValues[val] = val; } return enumValues; } get Enum() { const enumValues = {}; for (const val of this._def.values) { enumValues[val] = val; } return enumValues; } extract(values, newDef = this._def) { return ZodEnum2.create(values, { ...this._def, ...newDef }); } exclude(values, newDef = this._def) { return ZodEnum2.create(this.options.filter((opt) => !values.includes(opt)), { ...this._def, ...newDef }); } } ZodEnum2.create = createZodEnum; class ZodNativeEnum extends ZodType2 { _parse(input) { const nativeEnumValues = util.getValidEnumValues(this._def.values); const ctx = this._getOrReturnCtx(input); if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) { const expectedValues = util.objectValues(nativeEnumValues); addIssueToContext(ctx, { expected: util.joinValues(expectedValues), received: ctx.parsedType, code: ZodIssueCode.invalid_type }); return INVALID; } if (!this._cache) { this._cache = new Set(util.getValidEnumValues(this._def.values)); } if (!this._cache.has(input.data)) { const expectedValues = util.objectValues(nativeEnumValues); addIssueToContext(ctx, { received: ctx.data, code: ZodIssueCode.invalid_enum_value, options: expectedValues }); return INVALID; } return OK(input.data); } get enum() { return this._def.values; } } ZodNativeEnum.create = (values, params) => { return new ZodNativeEnum({ values, typeName: ZodFirstPartyTypeKind.ZodNativeEnum, ...processCreateParams(params) }); }; class ZodPromise extends ZodType2 { unwrap() { return this._def.type; } _parse(input) { const { ctx } = this._processInputParams(input); if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) { addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.promise, received: ctx.parsedType }); return INVALID; } const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data); return OK(promisified.then((data) => { return this._def.type.parseAsync(data, { path: ctx.path, errorMap: ctx.common.contextualErrorMap }); })); } } ZodPromise.create = (schema, params) => { return new ZodPromise({ type: schema, typeName: ZodFirstPartyTypeKind.ZodPromise, ...processCreateParams(params) }); }; class ZodEffects extends ZodType2 { innerType() { return this._def.schema; } sourceType() { return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema; } _parse(input) { const { status, ctx } = this._processInputParams(input); const effect = this._def.effect || null; const checkCtx = { addIssue: (arg) => { addIssueToContext(ctx, arg); if (arg.fatal) { status.abort(); } else { status.dirty(); } }, get path() { return ctx.path; } }; checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx); if (effect.type === "preprocess") { const processed = effect.transform(ctx.data, checkCtx); if (ctx.common.async) { return Promise.resolve(processed).then(async (processed2) => { if (status.value === "aborted") return INVALID; const result = await this._def.schema._parseAsync({ data: processed2, path: ctx.path, parent: ctx }); if (result.status === "aborted") return INVALID; if (result.status === "dirty") return DIRTY(result.value); if (status.value === "dirty") return DIRTY(result.value); return result; }); } else { if (status.value === "aborted") return INVALID; const result = this._def.schema._parseSync({ data: processed, path: ctx.path, parent: ctx }); if (result.status === "aborted") return INVALID; if (result.status === "dirty") return DIRTY(result.value); if (status.value === "dirty") return DIRTY(result.value); return result; } } if (effect.type === "refinement") { const executeRefinement = (acc) => { const result = effect.refinement(acc, checkCtx); if (ctx.common.async) { return Promise.resolve(result); } if (result instanceof Promise) { throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead."); } return acc; }; if (ctx.common.async === false) { const inner = this._def.schema._parseSync({ data: ctx.data, path: ctx.path, parent: ctx }); if (inner.status === "aborted") return INVALID; if (inner.status === "dirty") status.dirty(); executeRefinement(inner.value); return { status: status.value, value: inner.value }; } else { return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => { if (inner.status === "aborted") return INVALID; if (inner.status === "dirty") status.dirty(); return executeRefinement(inner.value).then(() => { return { status: status.value, value: inner.value }; }); }); } } if (effect.type === "transform") { if (ctx.common.async === false) { const base = this._def.schema._parseSync({ data: ctx.data, path: ctx.path, parent: ctx }); if (!isValid(base)) return INVALID; const result = effect.transform(base.value, checkCtx); if (result instanceof Promise) { throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`); } return { status: status.value, value: result }; } else { return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => { if (!isValid(base)) return INVALID; return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result })); }); } } util.assertNever(effect); } } ZodEffects.create = (schema, effect, params) => { return new ZodEffects({ schema, typeName: ZodFirstPartyTypeKind.ZodEffects, effect, ...processCreateParams(params) }); }; ZodEffects.createWithPreprocess = (preprocess2, schema, params) => { return new ZodEffects({ schema, effect: { type: "preprocess", transform: preprocess2 }, typeName: ZodFirstPartyTypeKind.ZodEffects, ...processCreateParams(params) }); }; class ZodOptional2 extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 === ZodParsedType.undefined) { return OK(undefined); } return this._def.innerType._parse(input); } unwrap() { return this._def.innerType; } } ZodOptional2.create = (type, params) => { return new ZodOptional2({ innerType: type, typeName: ZodFirstPartyTypeKind.ZodOptional, ...processCreateParams(params) }); }; class ZodNullable2 extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 === ZodParsedType.null) { return OK(null); } return this._def.innerType._parse(input); } unwrap() { return this._def.innerType; } } ZodNullable2.create = (type, params) => { return new ZodNullable2({ innerType: type, typeName: ZodFirstPartyTypeKind.ZodNullable, ...processCreateParams(params) }); }; class ZodDefault2 extends ZodType2 { _parse(input) { const { ctx } = this._processInputParams(input); let data = ctx.data; if (ctx.parsedType === ZodParsedType.undefined) { data = this._def.defaultValue(); } return this._def.innerType._parse({ data, path: ctx.path, parent: ctx }); } removeDefault() { return this._def.innerType; } } ZodDefault2.create = (type, params) => { return new ZodDefault2({ innerType: type, typeName: ZodFirstPartyTypeKind.ZodDefault, defaultValue: typeof params.default === "function" ? params.default : () => params.default, ...processCreateParams(params) }); }; class ZodCatch2 extends ZodType2 { _parse(input) { const { ctx } = this._processInputParams(input); const newCtx = { ...ctx, common: { ...ctx.common, issues: [] } }; const result = this._def.innerType._parse({ data: newCtx.data, path: newCtx.path, parent: { ...newCtx } }); if (isAsync(result)) { return result.then((result2) => { return { status: "valid", value: result2.status === "valid" ? result2.value : this._def.catchValue({ get error() { return new ZodError2(newCtx.common.issues); }, input: newCtx.data }) }; }); } else { return { status: "valid", value: result.status === "valid" ? result.value : this._def.catchValue({ get error() { return new ZodError2(newCtx.common.issues); }, input: newCtx.data }) }; } } removeCatch() { return this._def.innerType; } } ZodCatch2.create = (type, params) => { return new ZodCatch2({ innerType: type, typeName: ZodFirstPartyTypeKind.ZodCatch, catchValue: typeof params.catch === "function" ? params.catch : () => params.catch, ...processCreateParams(params) }); }; class ZodNaN extends ZodType2 { _parse(input) { const parsedType2 = this._getType(input); if (parsedType2 !== ZodParsedType.nan) { const ctx = this._getOrReturnCtx(input); addIssueToContext(ctx, { code: ZodIssueCode.invalid_type, expected: ZodParsedType.nan, received: ctx.parsedType }); return INVALID; } return { status: "valid", value: input.data }; } } ZodNaN.create = (params) => { return new ZodNaN({ typeName: ZodFirstPartyTypeKind.ZodNaN, ...processCreateParams(params) }); }; var BRAND = Symbol("zod_brand"); class ZodBranded extends ZodType2 { _parse(input) { const { ctx } = this._processInputParams(input); const data = ctx.data; return this._def.type._parse({ data, path: ctx.path, parent: ctx }); } unwrap() { return this._def.type; } } class ZodPipeline extends ZodType2 { _parse(input) { const { status, ctx } = this._processInputParams(input); if (ctx.common.async) { const handleAsync = async () => { const inResult = await this._def.in._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }); if (inResult.status === "aborted") return INVALID; if (inResult.status === "dirty") { status.dirty(); return DIRTY(inResult.value); } else { return this._def.out._parseAsync({ data: inResult.value, path: ctx.path, parent: ctx }); } }; return handleAsync(); } else { const inResult = this._def.in._parseSync({ data: ctx.data, path: ctx.path, parent: ctx }); if (inResult.status === "aborted") return INVALID; if (inResult.status === "dirty") { status.dirty(); return { status: "dirty", value: inResult.value }; } else { return this._def.out._parseSync({ data: inResult.value, path: ctx.path, parent: ctx }); } } } static create(a, b) { return new ZodPipeline({ in: a, out: b, typeName: ZodFirstPartyTypeKind.ZodPipeline }); } } class ZodReadonly2 extends ZodType2 { _parse(input) { const result = this._def.innerType._parse(input); const freeze = (data) => { if (isValid(data)) { data.value = Object.freeze(data.value); } return data; }; return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result); } unwrap() { return this._def.innerType; } } ZodReadonly2.create = (type, params) => { return new ZodReadonly2({ innerType: type, typeName: ZodFirstPartyTypeKind.ZodReadonly, ...processCreateParams(params) }); }; var late = { object: ZodObject2.lazycreate }; var ZodFirstPartyTypeKind; (function(ZodFirstPartyTypeKind2) { ZodFirstPartyTypeKind2["ZodString"] = "ZodString"; ZodFirstPartyTypeKind2["ZodNumber"] = "ZodNumber"; ZodFirstPartyTypeKind2["ZodNaN"] = "ZodNaN"; ZodFirstPartyTypeKind2["ZodBigInt"] = "ZodBigInt"; ZodFirstPartyTypeKind2["ZodBoolean"] = "ZodBoolean"; ZodFirstPartyTypeKind2["ZodDate"] = "ZodDate"; ZodFirstPartyTypeKind2["ZodSymbol"] = "ZodSymbol"; ZodFirstPartyTypeKind2["ZodUndefined"] = "ZodUndefined"; ZodFirstPartyTypeKind2["ZodNull"] = "ZodNull"; ZodFirstPartyTypeKind2["ZodAny"] = "ZodAny"; ZodFirstPartyTypeKind2["ZodUnknown"] = "ZodUnknown"; ZodFirstPartyTypeKind2["ZodNever"] = "ZodNever"; ZodFirstPartyTypeKind2["ZodVoid"] = "ZodVoid"; ZodFirstPartyTypeKind2["ZodArray"] = "ZodArray"; ZodFirstPartyTypeKind2["ZodObject"] = "ZodObject"; ZodFirstPartyTypeKind2["ZodUnion"] = "ZodUnion"; ZodFirstPartyTypeKind2["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion"; ZodFirstPartyTypeKind2["ZodIntersection"] = "ZodIntersection"; ZodFirstPartyTypeKind2["ZodTuple"] = "ZodTuple"; ZodFirstPartyTypeKind2["ZodRecord"] = "ZodRecord"; ZodFirstPartyTypeKind2["ZodMap"] = "ZodMap"; ZodFirstPartyTypeKind2["ZodSet"] = "ZodSet"; ZodFirstPartyTypeKind2["ZodFunction"] = "ZodFunction"; ZodFirstPartyTypeKind2["ZodLazy"] = "ZodLazy"; ZodFirstPartyTypeKind2["ZodLiteral"] = "ZodLiteral"; ZodFirstPartyTypeKind2["ZodEnum"] = "ZodEnum"; ZodFirstPartyTypeKind2["ZodEffects"] = "ZodEffects"; ZodFirstPartyTypeKind2["ZodNativeEnum"] = "ZodNativeEnum"; ZodFirstPartyTypeKind2["ZodOptional"] = "ZodOptional"; ZodFirstPartyTypeKind2["ZodNullable"] = "ZodNullable"; ZodFirstPartyTypeKind2["ZodDefault"] = "ZodDefault"; ZodFirstPartyTypeKind2["ZodCatch"] = "ZodCatch"; ZodFirstPartyTypeKind2["ZodPromise"] = "ZodPromise"; ZodFirstPartyTypeKind2["ZodBranded"] = "ZodBranded"; ZodFirstPartyTypeKind2["ZodPipeline"] = "ZodPipeline"; ZodFirstPartyTypeKind2["ZodReadonly"] = "ZodReadonly"; })(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {})); var stringType = ZodString2.create; var numberType = ZodNumber2.create; var nanType = ZodNaN.create; var bigIntType = ZodBigInt.create; var booleanType = ZodBoolean2.create; var dateType = ZodDate.create; var symbolType = ZodSymbol.create; var undefinedType = ZodUndefined.create; var nullType = ZodNull2.create; var anyType = ZodAny.create; var unknownType = ZodUnknown2.create; var neverType = ZodNever2.create; var voidType = ZodVoid.create; var arrayType = ZodArray2.create; var objectType = ZodObject2.create; var strictObjectType = ZodObject2.strictCreate; var unionType = ZodUnion2.create; var discriminatedUnionType = ZodDiscriminatedUnion2.create; var intersectionType = ZodIntersection2.create; var tupleType = ZodTuple.create; var recordType = ZodRecord2.create; var mapType = ZodMap.create; var setType = ZodSet.create; var functionType = ZodFunction.create; var lazyType = ZodLazy.create; var literalType = ZodLiteral2.create; var enumType = ZodEnum2.create; var nativeEnumType = ZodNativeEnum.create; var promiseType = ZodPromise.create; var effectsType = ZodEffects.create; var optionalType = ZodOptional2.create; var nullableType = ZodNullable2.create; var preprocessType = ZodEffects.createWithPreprocess; var pipelineType = ZodPipeline.create; var NEVER2 = Object.freeze({ status: "aborted" }); function $constructor2(name, initializer3, params) { function init(inst, def) { var _a2; Object.defineProperty(inst, "_zod", { value: inst._zod ?? {}, enumerable: false }); (_a2 = inst._zod).traits ?? (_a2.traits = new Set); inst._zod.traits.add(name); initializer3(inst, def); for (const k in _.prototype) { if (!(k in inst)) Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) }); } inst._zod.constr = _; inst._zod.def = def; } const Parent = params?.Parent ?? Object; class Definition extends Parent { } Object.defineProperty(Definition, "name", { value: name }); function _(def) { var _a2; const inst = params?.Parent ? new Definition : this; init(inst, def); (_a2 = inst._zod).deferred ?? (_a2.deferred = []); for (const fn of inst._zod.deferred) { fn(); } return inst; } Object.defineProperty(_, "init", { value: init }); Object.defineProperty(_, Symbol.hasInstance, { value: (inst) => { if (params?.Parent && inst instanceof params.Parent) return true; return inst?._zod?.traits?.has(name); } }); Object.defineProperty(_, "name", { value: name }); return _; } var $brand2 = Symbol("zod_brand"); class $ZodAsyncError2 extends Error { constructor() { super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`); } } var globalConfig2 = {}; function config2(newConfig) { if (newConfig) Object.assign(globalConfig2, newConfig); return globalConfig2; } var exports_util2 = {}; __export2(exports_util2, { unwrapMessage: () => unwrapMessage2, stringifyPrimitive: () => stringifyPrimitive2, required: () => required2, randomString: () => randomString2, propertyKeyTypes: () => propertyKeyTypes2, promiseAllObject: () => promiseAllObject2, primitiveTypes: () => primitiveTypes2, prefixIssues: () => prefixIssues2, pick: () => pick2, partial: () => partial2, optionalKeys: () => optionalKeys2, omit: () => omit2, numKeys: () => numKeys2, nullish: () => nullish2, normalizeParams: () => normalizeParams2, merge: () => merge2, jsonStringifyReplacer: () => jsonStringifyReplacer2, joinValues: () => joinValues2, issue: () => issue2, isPlainObject: () => isPlainObject3, isObject: () => isObject22, getSizableOrigin: () => getSizableOrigin2, getParsedType: () => getParsedType22, getLengthableOrigin: () => getLengthableOrigin2, getEnumValues: () => getEnumValues2, getElementAtPath: () => getElementAtPath2, floatSafeRemainder: () => floatSafeRemainder22, finalizeIssue: () => finalizeIssue2, extend: () => extend2, escapeRegex: () => escapeRegex2, esc: () => esc2, defineLazy: () => defineLazy2, createTransparentProxy: () => createTransparentProxy2, clone: () => clone2, cleanRegex: () => cleanRegex2, cleanEnum: () => cleanEnum2, captureStackTrace: () => captureStackTrace2, cached: () => cached2, assignProp: () => assignProp2, assertNotEqual: () => assertNotEqual2, assertNever: () => assertNever2, assertIs: () => assertIs2, assertEqual: () => assertEqual2, assert: () => assert2, allowsEval: () => allowsEval2, aborted: () => aborted2, NUMBER_FORMAT_RANGES: () => NUMBER_FORMAT_RANGES2, Class: () => Class2, BIGINT_FORMAT_RANGES: () => BIGINT_FORMAT_RANGES2 }); function assertEqual2(val) { return val; } function assertNotEqual2(val) { return val; } function assertIs2(_arg) {} function assertNever2(_x) { throw new Error; } function assert2(_) {} function getEnumValues2(entries) { const numericValues = Object.values(entries).filter((v) => typeof v === "number"); const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v); return values; } function joinValues2(array3, separator = "|") { return array3.map((val) => stringifyPrimitive2(val)).join(separator); } function jsonStringifyReplacer2(_, value) { if (typeof value === "bigint") return value.toString(); return value; } function cached2(getter) { const set2 = false; return { get value() { if (!set2) { const value = getter(); Object.defineProperty(this, "value", { value }); return value; } throw new Error("cached value already set"); } }; } function nullish2(input) { return input === null || input === undefined; } function cleanRegex2(source) { const start = source.startsWith("^") ? 1 : 0; const end = source.endsWith("$") ? source.length - 1 : source.length; return source.slice(start, end); } function floatSafeRemainder22(val, step) { const valDecCount = (val.toString().split(".")[1] || "").length; const stepDecCount = (step.toString().split(".")[1] || "").length; const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount; const valInt = Number.parseInt(val.toFixed(decCount).replace(".", "")); const stepInt = Number.parseInt(step.toFixed(decCount).replace(".", "")); return valInt % stepInt / 10 ** decCount; } function defineLazy2(object4, key, getter) { const set2 = false; Object.defineProperty(object4, key, { get() { if (!set2) { const value = getter(); object4[key] = value; return value; } throw new Error("cached value already set"); }, set(v) { Object.defineProperty(object4, key, { value: v }); }, configurable: true }); } function assignProp2(target, prop, value) { Object.defineProperty(target, prop, { value, writable: true, enumerable: true, configurable: true }); } function getElementAtPath2(obj, path13) { if (!path13) return obj; return path13.reduce((acc, key) => acc?.[key], obj); } function promiseAllObject2(promisesObj) { const keys = Object.keys(promisesObj); const promises2 = keys.map((key) => promisesObj[key]); return Promise.all(promises2).then((results) => { const resolvedObj = {}; for (let i = 0;i < keys.length; i++) { resolvedObj[keys[i]] = results[i]; } return resolvedObj; }); } function randomString2(length = 10) { const chars = "abcdefghijklmnopqrstuvwxyz"; let str = ""; for (let i = 0;i < length; i++) { str += chars[Math.floor(Math.random() * chars.length)]; } return str; } function esc2(str) { return JSON.stringify(str); } var captureStackTrace2 = Error.captureStackTrace ? Error.captureStackTrace : (..._args) => {}; function isObject22(data) { return typeof data === "object" && data !== null && !Array.isArray(data); } var allowsEval2 = cached2(() => { if (typeof navigator !== "undefined" && navigator?.userAgent?.includes("Cloudflare")) { return false; } try { const F = Function; new F(""); return true; } catch (_) { return false; } }); function isPlainObject3(o) { if (isObject22(o) === false) return false; const ctor = o.constructor; if (ctor === undefined) return true; const prot = ctor.prototype; if (isObject22(prot) === false) return false; if (Object.prototype.hasOwnProperty.call(prot, "isPrototypeOf") === false) { return false; } return true; } function numKeys2(data) { let keyCount = 0; for (const key in data) { if (Object.prototype.hasOwnProperty.call(data, key)) { keyCount++; } } return keyCount; } var getParsedType22 = (data) => { const t = typeof data; switch (t) { case "undefined": return "undefined"; case "string": return "string"; case "number": return Number.isNaN(data) ? "nan" : "number"; case "boolean": return "boolean"; case "function": return "function"; case "bigint": return "bigint"; case "symbol": return "symbol"; case "object": if (Array.isArray(data)) { return "array"; } if (data === null) { return "null"; } if (data.then && typeof data.then === "function" && data.catch && typeof data.catch === "function") { return "promise"; } if (typeof Map !== "undefined" && data instanceof Map) { return "map"; } if (typeof Set !== "undefined" && data instanceof Set) { return "set"; } if (typeof Date !== "undefined" && data instanceof Date) { return "date"; } if (typeof File !== "undefined" && data instanceof File) { return "file"; } return "object"; default: throw new Error(`Unknown data type: ${t}`); } }; var propertyKeyTypes2 = new Set(["string", "number", "symbol"]); var primitiveTypes2 = new Set(["string", "number", "bigint", "boolean", "symbol", "undefined"]); function escapeRegex2(str) { return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } function clone2(inst, def, params) { const cl = new inst._zod.constr(def ?? inst._zod.def); if (!def || params?.parent) cl._zod.parent = inst; return cl; } function normalizeParams2(_params) { const params = _params; if (!params) return {}; if (typeof params === "string") return { error: () => params }; if (params?.message !== undefined) { if (params?.error !== undefined) throw new Error("Cannot specify both `message` and `error` params"); params.error = params.message; } delete params.message; if (typeof params.error === "string") return { ...params, error: () => params.error }; return params; } function createTransparentProxy2(getter) { let target; return new Proxy({}, { get(_, prop, receiver) { target ?? (target = getter()); return Reflect.get(target, prop, receiver); }, set(_, prop, value, receiver) { target ?? (target = getter()); return Reflect.set(target, prop, value, receiver); }, has(_, prop) { target ?? (target = getter()); return Reflect.has(target, prop); }, deleteProperty(_, prop) { target ?? (target = getter()); return Reflect.deleteProperty(target, prop); }, ownKeys(_) { target ?? (target = getter()); return Reflect.ownKeys(target); }, getOwnPropertyDescriptor(_, prop) { target ?? (target = getter()); return Reflect.getOwnPropertyDescriptor(target, prop); }, defineProperty(_, prop, descriptor) { target ?? (target = getter()); return Reflect.defineProperty(target, prop, descriptor); } }); } function stringifyPrimitive2(value) { if (typeof value === "bigint") return value.toString() + "n"; if (typeof value === "string") return `"${value}"`; return `${value}`; } function optionalKeys2(shape) { return Object.keys(shape).filter((k) => { return shape[k]._zod.optin === "optional" && shape[k]._zod.optout === "optional"; }); } var NUMBER_FORMAT_RANGES2 = { safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER], int32: [-2147483648, 2147483647], uint32: [0, 4294967295], float32: [-340282346638528860000000000000000000000, 340282346638528860000000000000000000000], float64: [-Number.MAX_VALUE, Number.MAX_VALUE] }; var BIGINT_FORMAT_RANGES2 = { int64: [/* @__PURE__ */ BigInt("-9223372036854775808"), /* @__PURE__ */ BigInt("9223372036854775807")], uint64: [/* @__PURE__ */ BigInt(0), /* @__PURE__ */ BigInt("18446744073709551615")] }; function pick2(schema, mask) { const newShape = {}; const currDef = schema._zod.def; for (const key in mask) { if (!(key in currDef.shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; newShape[key] = currDef.shape[key]; } return clone2(schema, { ...schema._zod.def, shape: newShape, checks: [] }); } function omit2(schema, mask) { const newShape = { ...schema._zod.def.shape }; const currDef = schema._zod.def; for (const key in mask) { if (!(key in currDef.shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; delete newShape[key]; } return clone2(schema, { ...schema._zod.def, shape: newShape, checks: [] }); } function extend2(schema, shape) { if (!isPlainObject3(shape)) { throw new Error("Invalid input to extend: expected a plain object"); } const def = { ...schema._zod.def, get shape() { const _shape = { ...schema._zod.def.shape, ...shape }; assignProp2(this, "shape", _shape); return _shape; }, checks: [] }; return clone2(schema, def); } function merge2(a, b) { return clone2(a, { ...a._zod.def, get shape() { const _shape = { ...a._zod.def.shape, ...b._zod.def.shape }; assignProp2(this, "shape", _shape); return _shape; }, catchall: b._zod.def.catchall, checks: [] }); } function partial2(Class2, schema, mask) { const oldShape = schema._zod.def.shape; const shape = { ...oldShape }; if (mask) { for (const key in mask) { if (!(key in oldShape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; shape[key] = Class2 ? new Class2({ type: "optional", innerType: oldShape[key] }) : oldShape[key]; } } else { for (const key in oldShape) { shape[key] = Class2 ? new Class2({ type: "optional", innerType: oldShape[key] }) : oldShape[key]; } } return clone2(schema, { ...schema._zod.def, shape, checks: [] }); } function required2(Class2, schema, mask) { const oldShape = schema._zod.def.shape; const shape = { ...oldShape }; if (mask) { for (const key in mask) { if (!(key in shape)) { throw new Error(`Unrecognized key: "${key}"`); } if (!mask[key]) continue; shape[key] = new Class2({ type: "nonoptional", innerType: oldShape[key] }); } } else { for (const key in oldShape) { shape[key] = new Class2({ type: "nonoptional", innerType: oldShape[key] }); } } return clone2(schema, { ...schema._zod.def, shape, checks: [] }); } function aborted2(x, startIndex = 0) { for (let i = startIndex;i < x.issues.length; i++) { if (x.issues[i]?.continue !== true) return true; } return false; } function prefixIssues2(path13, issues) { return issues.map((iss) => { var _a2; (_a2 = iss).path ?? (_a2.path = []); iss.path.unshift(path13); return iss; }); } function unwrapMessage2(message) { return typeof message === "string" ? message : message?.message; } function finalizeIssue2(iss, ctx, config22) { const full = { ...iss, path: iss.path ?? [] }; if (!iss.message) { const message = unwrapMessage2(iss.inst?._zod.def?.error?.(iss)) ?? unwrapMessage2(ctx?.error?.(iss)) ?? unwrapMessage2(config22.customError?.(iss)) ?? unwrapMessage2(config22.localeError?.(iss)) ?? "Invalid input"; full.message = message; } delete full.inst; delete full.continue; if (!ctx?.reportInput) { delete full.input; } return full; } function getSizableOrigin2(input) { if (input instanceof Set) return "set"; if (input instanceof Map) return "map"; if (input instanceof File) return "file"; return "unknown"; } function getLengthableOrigin2(input) { if (Array.isArray(input)) return "array"; if (typeof input === "string") return "string"; return "unknown"; } function issue2(...args) { const [iss, input, inst] = args; if (typeof iss === "string") { return { message: iss, code: "custom", input, inst }; } return { ...iss }; } function cleanEnum2(obj) { return Object.entries(obj).filter(([k, _]) => { return Number.isNaN(Number.parseInt(k, 10)); }).map((el) => el[1]); } class Class2 { constructor(..._args) {} } var initializer3 = (inst, def) => { inst.name = "$ZodError"; Object.defineProperty(inst, "_zod", { value: inst._zod, enumerable: false }); Object.defineProperty(inst, "issues", { value: def, enumerable: false }); Object.defineProperty(inst, "message", { get() { return JSON.stringify(def, jsonStringifyReplacer2, 2); }, enumerable: true }); }; var $ZodError2 = $constructor2("$ZodError", initializer3); var $ZodRealError2 = $constructor2("$ZodError", initializer3, { Parent: Error }); function flattenError2(error2, mapper = (issue22) => issue22.message) { const fieldErrors = {}; const formErrors = []; for (const sub of error2.issues) { if (sub.path.length > 0) { fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || []; fieldErrors[sub.path[0]].push(mapper(sub)); } else { formErrors.push(mapper(sub)); } } return { formErrors, fieldErrors }; } function formatError2(error2, _mapper) { const mapper = _mapper || function(issue22) { return issue22.message; }; const fieldErrors = { _errors: [] }; const processError = (error22) => { for (const issue22 of error22.issues) { if (issue22.code === "invalid_union" && issue22.errors.length) { issue22.errors.map((issues) => processError({ issues })); } else if (issue22.code === "invalid_key") { processError({ issues: issue22.issues }); } else if (issue22.code === "invalid_element") { processError({ issues: issue22.issues }); } else if (issue22.path.length === 0) { fieldErrors._errors.push(mapper(issue22)); } else { let curr = fieldErrors; let i = 0; while (i < issue22.path.length) { const el = issue22.path[i]; const terminal = i === issue22.path.length - 1; if (!terminal) { curr[el] = curr[el] || { _errors: [] }; } else { curr[el] = curr[el] || { _errors: [] }; curr[el]._errors.push(mapper(issue22)); } curr = curr[el]; i++; } } } }; processError(error2); return fieldErrors; } var _parse2 = (_Err) => (schema, value, _ctx, _params) => { const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) { throw new $ZodAsyncError2; } if (result.issues.length) { const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue2(iss, ctx, config2()))); captureStackTrace2(e, _params?.callee); throw e; } return result.value; }; var _parseAsync2 = (_Err) => async (schema, value, _ctx, params) => { const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; let result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) result = await result; if (result.issues.length) { const e = new (params?.Err ?? _Err)(result.issues.map((iss) => finalizeIssue2(iss, ctx, config2()))); captureStackTrace2(e, params?.callee); throw e; } return result.value; }; var _safeParse2 = (_Err) => (schema, value, _ctx) => { const ctx = _ctx ? { ..._ctx, async: false } : { async: false }; const result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) { throw new $ZodAsyncError2; } return result.issues.length ? { success: false, error: new (_Err ?? $ZodError2)(result.issues.map((iss) => finalizeIssue2(iss, ctx, config2()))) } : { success: true, data: result.value }; }; var safeParse4 = /* @__PURE__ */ _safeParse2($ZodRealError2); var _safeParseAsync2 = (_Err) => async (schema, value, _ctx) => { const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true }; let result = schema._zod.run({ value, issues: [] }, ctx); if (result instanceof Promise) result = await result; return result.issues.length ? { success: false, error: new _Err(result.issues.map((iss) => finalizeIssue2(iss, ctx, config2()))) } : { success: true, data: result.value }; }; var safeParseAsync3 = /* @__PURE__ */ _safeParseAsync2($ZodRealError2); var cuid3 = /^[cC][^\s-]{8,}$/; var cuid22 = /^[0-9a-z]+$/; var ulid2 = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/; var xid2 = /^[0-9a-vA-V]{20}$/; var ksuid2 = /^[A-Za-z0-9]{27}$/; var nanoid2 = /^[a-zA-Z0-9_-]{21}$/; var duration3 = /^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/; var guid2 = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/; var uuid2 = (version2) => { if (!version2) return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/; return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version2}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`); }; var email2 = /^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/; var _emoji3 = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`; function emoji2() { return new RegExp(_emoji3, "u"); } var ipv42 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/; var ipv62 = /^(([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})$/; var cidrv42 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/; var cidrv62 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/; var base642 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/; var base64url2 = /^[A-Za-z0-9_-]*$/; var hostname = /^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/; var e1642 = /^\+(?:[0-9]){6,14}[0-9]$/; var dateSource2 = `(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`; var date4 = /* @__PURE__ */ new RegExp(`^${dateSource2}$`); function timeSource2(args) { const hhmm = `(?:[01]\\d|2[0-3]):[0-5]\\d`; const regex = typeof args.precision === "number" ? args.precision === -1 ? `${hhmm}` : args.precision === 0 ? `${hhmm}:[0-5]\\d` : `${hhmm}:[0-5]\\d\\.\\d{${args.precision}}` : `${hhmm}(?::[0-5]\\d(?:\\.\\d+)?)?`; return regex; } function time3(args) { return new RegExp(`^${timeSource2(args)}$`); } function datetime3(args) { const time22 = timeSource2({ precision: args.precision }); const opts = ["Z"]; if (args.local) opts.push(""); if (args.offset) opts.push(`([+-]\\d{2}:\\d{2})`); const timeRegex2 = `${time22}(?:${opts.join("|")})`; return new RegExp(`^${dateSource2}T(?:${timeRegex2})$`); } var string4 = (params) => { const regex = params ? `[\\s\\S]{${params?.minimum ?? 0},${params?.maximum ?? ""}}` : `[\\s\\S]*`; return new RegExp(`^${regex}$`); }; var integer2 = /^\d+$/; var number4 = /^-?\d+(?:\.\d+)?/i; var boolean4 = /true|false/i; var _null4 = /null/i; var lowercase2 = /^[^A-Z]*$/; var uppercase2 = /^[^a-z]*$/; var $ZodCheck2 = /* @__PURE__ */ $constructor2("$ZodCheck", (inst, def) => { var _a2; inst._zod ?? (inst._zod = {}); inst._zod.def = def; (_a2 = inst._zod).onattach ?? (_a2.onattach = []); }); var numericOriginMap2 = { number: "number", bigint: "bigint", object: "date" }; var $ZodCheckLessThan2 = /* @__PURE__ */ $constructor2("$ZodCheckLessThan", (inst, def) => { $ZodCheck2.init(inst, def); const origin = numericOriginMap2[typeof def.value]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY; if (def.value < curr) { if (def.inclusive) bag.maximum = def.value; else bag.exclusiveMaximum = def.value; } }); inst._zod.check = (payload) => { if (def.inclusive ? payload.value <= def.value : payload.value < def.value) { return; } payload.issues.push({ origin, code: "too_big", maximum: def.value, input: payload.value, inclusive: def.inclusive, inst, continue: !def.abort }); }; }); var $ZodCheckGreaterThan2 = /* @__PURE__ */ $constructor2("$ZodCheckGreaterThan", (inst, def) => { $ZodCheck2.init(inst, def); const origin = numericOriginMap2[typeof def.value]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY; if (def.value > curr) { if (def.inclusive) bag.minimum = def.value; else bag.exclusiveMinimum = def.value; } }); inst._zod.check = (payload) => { if (def.inclusive ? payload.value >= def.value : payload.value > def.value) { return; } payload.issues.push({ origin, code: "too_small", minimum: def.value, input: payload.value, inclusive: def.inclusive, inst, continue: !def.abort }); }; }); var $ZodCheckMultipleOf2 = /* @__PURE__ */ $constructor2("$ZodCheckMultipleOf", (inst, def) => { $ZodCheck2.init(inst, def); inst._zod.onattach.push((inst2) => { var _a2; (_a2 = inst2._zod.bag).multipleOf ?? (_a2.multipleOf = def.value); }); inst._zod.check = (payload) => { if (typeof payload.value !== typeof def.value) throw new Error("Cannot mix number and bigint in multiple_of check."); const isMultiple = typeof payload.value === "bigint" ? payload.value % def.value === BigInt(0) : floatSafeRemainder22(payload.value, def.value) === 0; if (isMultiple) return; payload.issues.push({ origin: typeof payload.value, code: "not_multiple_of", divisor: def.value, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckNumberFormat2 = /* @__PURE__ */ $constructor2("$ZodCheckNumberFormat", (inst, def) => { $ZodCheck2.init(inst, def); def.format = def.format || "float64"; const isInt = def.format?.includes("int"); const origin = isInt ? "int" : "number"; const [minimum, maximum] = NUMBER_FORMAT_RANGES2[def.format]; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = def.format; bag.minimum = minimum; bag.maximum = maximum; if (isInt) bag.pattern = integer2; }); inst._zod.check = (payload) => { const input = payload.value; if (isInt) { if (!Number.isInteger(input)) { payload.issues.push({ expected: origin, format: def.format, code: "invalid_type", input, inst }); return; } if (!Number.isSafeInteger(input)) { if (input > 0) { payload.issues.push({ input, code: "too_big", maximum: Number.MAX_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst, origin, continue: !def.abort }); } else { payload.issues.push({ input, code: "too_small", minimum: Number.MIN_SAFE_INTEGER, note: "Integers must be within the safe integer range.", inst, origin, continue: !def.abort }); } return; } } if (input < minimum) { payload.issues.push({ origin: "number", input, code: "too_small", minimum, inclusive: true, inst, continue: !def.abort }); } if (input > maximum) { payload.issues.push({ origin: "number", input, code: "too_big", maximum, inst }); } }; }); var $ZodCheckMaxLength2 = /* @__PURE__ */ $constructor2("$ZodCheckMaxLength", (inst, def) => { $ZodCheck2.init(inst, def); inst._zod.when = (payload) => { const val = payload.value; return !nullish2(val) && val.length !== undefined; }; inst._zod.onattach.push((inst2) => { const curr = inst2._zod.bag.maximum ?? Number.POSITIVE_INFINITY; if (def.maximum < curr) inst2._zod.bag.maximum = def.maximum; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length <= def.maximum) return; const origin = getLengthableOrigin2(input); payload.issues.push({ origin, code: "too_big", maximum: def.maximum, inclusive: true, input, inst, continue: !def.abort }); }; }); var $ZodCheckMinLength2 = /* @__PURE__ */ $constructor2("$ZodCheckMinLength", (inst, def) => { $ZodCheck2.init(inst, def); inst._zod.when = (payload) => { const val = payload.value; return !nullish2(val) && val.length !== undefined; }; inst._zod.onattach.push((inst2) => { const curr = inst2._zod.bag.minimum ?? Number.NEGATIVE_INFINITY; if (def.minimum > curr) inst2._zod.bag.minimum = def.minimum; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length >= def.minimum) return; const origin = getLengthableOrigin2(input); payload.issues.push({ origin, code: "too_small", minimum: def.minimum, inclusive: true, input, inst, continue: !def.abort }); }; }); var $ZodCheckLengthEquals2 = /* @__PURE__ */ $constructor2("$ZodCheckLengthEquals", (inst, def) => { $ZodCheck2.init(inst, def); inst._zod.when = (payload) => { const val = payload.value; return !nullish2(val) && val.length !== undefined; }; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.minimum = def.length; bag.maximum = def.length; bag.length = def.length; }); inst._zod.check = (payload) => { const input = payload.value; const length = input.length; if (length === def.length) return; const origin = getLengthableOrigin2(input); const tooBig = length > def.length; payload.issues.push({ origin, ...tooBig ? { code: "too_big", maximum: def.length } : { code: "too_small", minimum: def.length }, inclusive: true, exact: true, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckStringFormat2 = /* @__PURE__ */ $constructor2("$ZodCheckStringFormat", (inst, def) => { var _a2, _b; $ZodCheck2.init(inst, def); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = def.format; if (def.pattern) { bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(def.pattern); } }); if (def.pattern) (_a2 = inst._zod).check ?? (_a2.check = (payload) => { def.pattern.lastIndex = 0; if (def.pattern.test(payload.value)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: def.format, input: payload.value, ...def.pattern ? { pattern: def.pattern.toString() } : {}, inst, continue: !def.abort }); }); else (_b = inst._zod).check ?? (_b.check = () => {}); }); var $ZodCheckRegex2 = /* @__PURE__ */ $constructor2("$ZodCheckRegex", (inst, def) => { $ZodCheckStringFormat2.init(inst, def); inst._zod.check = (payload) => { def.pattern.lastIndex = 0; if (def.pattern.test(payload.value)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "regex", input: payload.value, pattern: def.pattern.toString(), inst, continue: !def.abort }); }; }); var $ZodCheckLowerCase2 = /* @__PURE__ */ $constructor2("$ZodCheckLowerCase", (inst, def) => { def.pattern ?? (def.pattern = lowercase2); $ZodCheckStringFormat2.init(inst, def); }); var $ZodCheckUpperCase2 = /* @__PURE__ */ $constructor2("$ZodCheckUpperCase", (inst, def) => { def.pattern ?? (def.pattern = uppercase2); $ZodCheckStringFormat2.init(inst, def); }); var $ZodCheckIncludes2 = /* @__PURE__ */ $constructor2("$ZodCheckIncludes", (inst, def) => { $ZodCheck2.init(inst, def); const escapedRegex = escapeRegex2(def.includes); const pattern = new RegExp(typeof def.position === "number" ? `^.{${def.position}}${escapedRegex}` : escapedRegex); def.pattern = pattern; inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.includes(def.includes, def.position)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "includes", includes: def.includes, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckStartsWith2 = /* @__PURE__ */ $constructor2("$ZodCheckStartsWith", (inst, def) => { $ZodCheck2.init(inst, def); const pattern = new RegExp(`^${escapeRegex2(def.prefix)}.*`); def.pattern ?? (def.pattern = pattern); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.startsWith(def.prefix)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "starts_with", prefix: def.prefix, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckEndsWith2 = /* @__PURE__ */ $constructor2("$ZodCheckEndsWith", (inst, def) => { $ZodCheck2.init(inst, def); const pattern = new RegExp(`.*${escapeRegex2(def.suffix)}$`); def.pattern ?? (def.pattern = pattern); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.patterns ?? (bag.patterns = new Set); bag.patterns.add(pattern); }); inst._zod.check = (payload) => { if (payload.value.endsWith(def.suffix)) return; payload.issues.push({ origin: "string", code: "invalid_format", format: "ends_with", suffix: def.suffix, input: payload.value, inst, continue: !def.abort }); }; }); var $ZodCheckOverwrite2 = /* @__PURE__ */ $constructor2("$ZodCheckOverwrite", (inst, def) => { $ZodCheck2.init(inst, def); inst._zod.check = (payload) => { payload.value = def.tx(payload.value); }; }); class Doc2 { constructor(args = []) { this.content = []; this.indent = 0; if (this) this.args = args; } indented(fn) { this.indent += 1; fn(this); this.indent -= 1; } write(arg) { if (typeof arg === "function") { arg(this, { execution: "sync" }); arg(this, { execution: "async" }); return; } const content = arg; const lines = content.split(` `).filter((x) => x); const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length)); const dedented = lines.map((x) => x.slice(minIndent)).map((x) => " ".repeat(this.indent * 2) + x); for (const line of dedented) { this.content.push(line); } } compile() { const F = Function; const args = this?.args; const content = this?.content ?? [``]; const lines = [...content.map((x) => ` ${x}`)]; return new F(...args, lines.join(` `)); } } var version2 = { major: 4, minor: 0, patch: 0 }; var $ZodType2 = /* @__PURE__ */ $constructor2("$ZodType", (inst, def) => { var _a2; inst ?? (inst = {}); inst._zod.def = def; inst._zod.bag = inst._zod.bag || {}; inst._zod.version = version2; const checks3 = [...inst._zod.def.checks ?? []]; if (inst._zod.traits.has("$ZodCheck")) { checks3.unshift(inst); } for (const ch of checks3) { for (const fn of ch._zod.onattach) { fn(inst); } } if (checks3.length === 0) { (_a2 = inst._zod).deferred ?? (_a2.deferred = []); inst._zod.deferred?.push(() => { inst._zod.run = inst._zod.parse; }); } else { const runChecks = (payload, checks22, ctx) => { let isAborted2 = aborted2(payload); let asyncResult; for (const ch of checks22) { if (ch._zod.when) { const shouldRun = ch._zod.when(payload); if (!shouldRun) continue; } else if (isAborted2) { continue; } const currLen = payload.issues.length; const _ = ch._zod.check(payload); if (_ instanceof Promise && ctx?.async === false) { throw new $ZodAsyncError2; } if (asyncResult || _ instanceof Promise) { asyncResult = (asyncResult ?? Promise.resolve()).then(async () => { await _; const nextLen = payload.issues.length; if (nextLen === currLen) return; if (!isAborted2) isAborted2 = aborted2(payload, currLen); }); } else { const nextLen = payload.issues.length; if (nextLen === currLen) continue; if (!isAborted2) isAborted2 = aborted2(payload, currLen); } } if (asyncResult) { return asyncResult.then(() => { return payload; }); } return payload; }; inst._zod.run = (payload, ctx) => { const result = inst._zod.parse(payload, ctx); if (result instanceof Promise) { if (ctx.async === false) throw new $ZodAsyncError2; return result.then((result2) => runChecks(result2, checks3, ctx)); } return runChecks(result, checks3, ctx); }; } inst["~standard"] = { validate: (value) => { try { const r = safeParse4(inst, value); return r.success ? { value: r.data } : { issues: r.error?.issues }; } catch (_) { return safeParseAsync3(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues }); } }, vendor: "zod", version: 1 }; }); var $ZodString2 = /* @__PURE__ */ $constructor2("$ZodString", (inst, def) => { $ZodType2.init(inst, def); inst._zod.pattern = [...inst?._zod.bag?.patterns ?? []].pop() ?? string4(inst._zod.bag); inst._zod.parse = (payload, _) => { if (def.coerce) try { payload.value = String(payload.value); } catch (_2) {} if (typeof payload.value === "string") return payload; payload.issues.push({ expected: "string", code: "invalid_type", input: payload.value, inst }); return payload; }; }); var $ZodStringFormat2 = /* @__PURE__ */ $constructor2("$ZodStringFormat", (inst, def) => { $ZodCheckStringFormat2.init(inst, def); $ZodString2.init(inst, def); }); var $ZodGUID2 = /* @__PURE__ */ $constructor2("$ZodGUID", (inst, def) => { def.pattern ?? (def.pattern = guid2); $ZodStringFormat2.init(inst, def); }); var $ZodUUID2 = /* @__PURE__ */ $constructor2("$ZodUUID", (inst, def) => { if (def.version) { const versionMap = { v1: 1, v2: 2, v3: 3, v4: 4, v5: 5, v6: 6, v7: 7, v8: 8 }; const v = versionMap[def.version]; if (v === undefined) throw new Error(`Invalid UUID version: "${def.version}"`); def.pattern ?? (def.pattern = uuid2(v)); } else def.pattern ?? (def.pattern = uuid2()); $ZodStringFormat2.init(inst, def); }); var $ZodEmail2 = /* @__PURE__ */ $constructor2("$ZodEmail", (inst, def) => { def.pattern ?? (def.pattern = email2); $ZodStringFormat2.init(inst, def); }); var $ZodURL2 = /* @__PURE__ */ $constructor2("$ZodURL", (inst, def) => { $ZodStringFormat2.init(inst, def); inst._zod.check = (payload) => { try { const orig = payload.value; const url = new URL(orig); const href = url.href; if (def.hostname) { def.hostname.lastIndex = 0; if (!def.hostname.test(url.hostname)) { payload.issues.push({ code: "invalid_format", format: "url", note: "Invalid hostname", pattern: hostname.source, input: payload.value, inst, continue: !def.abort }); } } if (def.protocol) { def.protocol.lastIndex = 0; if (!def.protocol.test(url.protocol.endsWith(":") ? url.protocol.slice(0, -1) : url.protocol)) { payload.issues.push({ code: "invalid_format", format: "url", note: "Invalid protocol", pattern: def.protocol.source, input: payload.value, inst, continue: !def.abort }); } } if (!orig.endsWith("/") && href.endsWith("/")) { payload.value = href.slice(0, -1); } else { payload.value = href; } return; } catch (_) { payload.issues.push({ code: "invalid_format", format: "url", input: payload.value, inst, continue: !def.abort }); } }; }); var $ZodEmoji2 = /* @__PURE__ */ $constructor2("$ZodEmoji", (inst, def) => { def.pattern ?? (def.pattern = emoji2()); $ZodStringFormat2.init(inst, def); }); var $ZodNanoID2 = /* @__PURE__ */ $constructor2("$ZodNanoID", (inst, def) => { def.pattern ?? (def.pattern = nanoid2); $ZodStringFormat2.init(inst, def); }); var $ZodCUID3 = /* @__PURE__ */ $constructor2("$ZodCUID", (inst, def) => { def.pattern ?? (def.pattern = cuid3); $ZodStringFormat2.init(inst, def); }); var $ZodCUID22 = /* @__PURE__ */ $constructor2("$ZodCUID2", (inst, def) => { def.pattern ?? (def.pattern = cuid22); $ZodStringFormat2.init(inst, def); }); var $ZodULID2 = /* @__PURE__ */ $constructor2("$ZodULID", (inst, def) => { def.pattern ?? (def.pattern = ulid2); $ZodStringFormat2.init(inst, def); }); var $ZodXID2 = /* @__PURE__ */ $constructor2("$ZodXID", (inst, def) => { def.pattern ?? (def.pattern = xid2); $ZodStringFormat2.init(inst, def); }); var $ZodKSUID2 = /* @__PURE__ */ $constructor2("$ZodKSUID", (inst, def) => { def.pattern ?? (def.pattern = ksuid2); $ZodStringFormat2.init(inst, def); }); var $ZodISODateTime2 = /* @__PURE__ */ $constructor2("$ZodISODateTime", (inst, def) => { def.pattern ?? (def.pattern = datetime3(def)); $ZodStringFormat2.init(inst, def); }); var $ZodISODate2 = /* @__PURE__ */ $constructor2("$ZodISODate", (inst, def) => { def.pattern ?? (def.pattern = date4); $ZodStringFormat2.init(inst, def); }); var $ZodISOTime2 = /* @__PURE__ */ $constructor2("$ZodISOTime", (inst, def) => { def.pattern ?? (def.pattern = time3(def)); $ZodStringFormat2.init(inst, def); }); var $ZodISODuration2 = /* @__PURE__ */ $constructor2("$ZodISODuration", (inst, def) => { def.pattern ?? (def.pattern = duration3); $ZodStringFormat2.init(inst, def); }); var $ZodIPv42 = /* @__PURE__ */ $constructor2("$ZodIPv4", (inst, def) => { def.pattern ?? (def.pattern = ipv42); $ZodStringFormat2.init(inst, def); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = `ipv4`; }); }); var $ZodIPv62 = /* @__PURE__ */ $constructor2("$ZodIPv6", (inst, def) => { def.pattern ?? (def.pattern = ipv62); $ZodStringFormat2.init(inst, def); inst._zod.onattach.push((inst2) => { const bag = inst2._zod.bag; bag.format = `ipv6`; }); inst._zod.check = (payload) => { try { new URL(`http://[${payload.value}]`); } catch { payload.issues.push({ code: "invalid_format", format: "ipv6", input: payload.value, inst, continue: !def.abort }); } }; }); var $ZodCIDRv42 = /* @__PURE__ */ $constructor2("$ZodCIDRv4", (inst, def) => { def.pattern ?? (def.pattern = cidrv42); $ZodStringFormat2.init(inst, def); }); var $ZodCIDRv62 = /* @__PURE__ */ $constructor2("$ZodCIDRv6", (inst, def) => { def.pattern ?? (def.pattern = cidrv62); $ZodStringFormat2.init(inst, def); inst._zod.check = (payload) => { const [address, prefix] = payload.value.split("/"); try { if (!prefix) throw new Error; const prefixNum = Number(prefix); if (`${prefixNum}` !== prefix) throw new Error; if (prefixNum < 0 || prefixNum > 128) throw new Error; new URL(`http://[${address}]`); } catch { payload.issues.push({ code: "invalid_format", format: "cidrv6", input: payload.value, inst, continue: !def.abort }); } }; }); function isValidBase642(data) { if (data === "") return true; if (data.length % 4 !== 0) return false; try { atob(data); return true; } catch { return false; } } var $ZodBase642 = /* @__PURE__ */ $constructor2("$ZodBase64", (inst, def) => { def.pattern ?? (def.pattern = base642); $ZodStringFormat2.init(inst, def); inst._zod.onattach.push((inst2) => { inst2._zod.bag.contentEncoding = "base64"; }); inst._zod.check = (payload) => { if (isValidBase642(payload.value)) return; payload.issues.push({ code: "invalid_format", format: "base64", input: payload.value, inst, continue: !def.abort }); }; }); function isValidBase64URL2(data) { if (!base64url2.test(data)) return false; const base6422 = data.replace(/[-_]/g, (c) => c === "-" ? "+" : "/"); const padded = base6422.padEnd(Math.ceil(base6422.length / 4) * 4, "="); return isValidBase642(padded); } var $ZodBase64URL2 = /* @__PURE__ */ $constructor2("$ZodBase64URL", (inst, def) => { def.pattern ?? (def.pattern = base64url2); $ZodStringFormat2.init(inst, def); inst._zod.onattach.push((inst2) => { inst2._zod.bag.contentEncoding = "base64url"; }); inst._zod.check = (payload) => { if (isValidBase64URL2(payload.value)) return; payload.issues.push({ code: "invalid_format", format: "base64url", input: payload.value, inst, continue: !def.abort }); }; }); var $ZodE1642 = /* @__PURE__ */ $constructor2("$ZodE164", (inst, def) => { def.pattern ?? (def.pattern = e1642); $ZodStringFormat2.init(inst, def); }); function isValidJWT22(token, algorithm = null) { try { const tokensParts = token.split("."); if (tokensParts.length !== 3) return false; const [header] = tokensParts; if (!header) return false; const parsedHeader = JSON.parse(atob(header)); if ("typ" in parsedHeader && parsedHeader?.typ !== "JWT") return false; if (!parsedHeader.alg) return false; if (algorithm && (!("alg" in parsedHeader) || parsedHeader.alg !== algorithm)) return false; return true; } catch { return false; } } var $ZodJWT2 = /* @__PURE__ */ $constructor2("$ZodJWT", (inst, def) => { $ZodStringFormat2.init(inst, def); inst._zod.check = (payload) => { if (isValidJWT22(payload.value, def.alg)) return; payload.issues.push({ code: "invalid_format", format: "jwt", input: payload.value, inst, continue: !def.abort }); }; }); var $ZodNumber2 = /* @__PURE__ */ $constructor2("$ZodNumber", (inst, def) => { $ZodType2.init(inst, def); inst._zod.pattern = inst._zod.bag.pattern ?? number4; inst._zod.parse = (payload, _ctx) => { if (def.coerce) try { payload.value = Number(payload.value); } catch (_) {} const input = payload.value; if (typeof input === "number" && !Number.isNaN(input) && Number.isFinite(input)) { return payload; } const received = typeof input === "number" ? Number.isNaN(input) ? "NaN" : !Number.isFinite(input) ? "Infinity" : undefined : undefined; payload.issues.push({ expected: "number", code: "invalid_type", input, inst, ...received ? { received } : {} }); return payload; }; }); var $ZodNumberFormat2 = /* @__PURE__ */ $constructor2("$ZodNumber", (inst, def) => { $ZodCheckNumberFormat2.init(inst, def); $ZodNumber2.init(inst, def); }); var $ZodBoolean2 = /* @__PURE__ */ $constructor2("$ZodBoolean", (inst, def) => { $ZodType2.init(inst, def); inst._zod.pattern = boolean4; inst._zod.parse = (payload, _ctx) => { if (def.coerce) try { payload.value = Boolean(payload.value); } catch (_) {} const input = payload.value; if (typeof input === "boolean") return payload; payload.issues.push({ expected: "boolean", code: "invalid_type", input, inst }); return payload; }; }); var $ZodNull2 = /* @__PURE__ */ $constructor2("$ZodNull", (inst, def) => { $ZodType2.init(inst, def); inst._zod.pattern = _null4; inst._zod.values = new Set([null]); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (input === null) return payload; payload.issues.push({ expected: "null", code: "invalid_type", input, inst }); return payload; }; }); var $ZodUnknown2 = /* @__PURE__ */ $constructor2("$ZodUnknown", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload) => payload; }); var $ZodNever2 = /* @__PURE__ */ $constructor2("$ZodNever", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload, _ctx) => { payload.issues.push({ expected: "never", code: "invalid_type", input: payload.value, inst }); return payload; }; }); function handleArrayResult2(result, final, index) { if (result.issues.length) { final.issues.push(...prefixIssues2(index, result.issues)); } final.value[index] = result.value; } var $ZodArray2 = /* @__PURE__ */ $constructor2("$ZodArray", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!Array.isArray(input)) { payload.issues.push({ expected: "array", code: "invalid_type", input, inst }); return payload; } payload.value = Array(input.length); const proms = []; for (let i = 0;i < input.length; i++) { const item = input[i]; const result = def.element._zod.run({ value: item, issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => handleArrayResult2(result2, payload, i))); } else { handleArrayResult2(result, payload, i); } } if (proms.length) { return Promise.all(proms).then(() => payload); } return payload; }; }); function handleObjectResult(result, final, key) { if (result.issues.length) { final.issues.push(...prefixIssues2(key, result.issues)); } final.value[key] = result.value; } function handleOptionalObjectResult(result, final, key, input) { if (result.issues.length) { if (input[key] === undefined) { if (key in input) { final.value[key] = undefined; } else { final.value[key] = result.value; } } else { final.issues.push(...prefixIssues2(key, result.issues)); } } else if (result.value === undefined) { if (key in input) final.value[key] = undefined; } else { final.value[key] = result.value; } } var $ZodObject2 = /* @__PURE__ */ $constructor2("$ZodObject", (inst, def) => { $ZodType2.init(inst, def); const _normalized = cached2(() => { const keys = Object.keys(def.shape); for (const k of keys) { if (!(def.shape[k] instanceof $ZodType2)) { throw new Error(`Invalid element at key "${k}": expected a Zod schema`); } } const okeys = optionalKeys2(def.shape); return { shape: def.shape, keys, keySet: new Set(keys), numKeys: keys.length, optionalKeys: new Set(okeys) }; }); defineLazy2(inst._zod, "propValues", () => { const shape = def.shape; const propValues = {}; for (const key in shape) { const field = shape[key]._zod; if (field.values) { propValues[key] ?? (propValues[key] = new Set); for (const v of field.values) propValues[key].add(v); } } return propValues; }); const generateFastpass = (shape) => { const doc2 = new Doc2(["shape", "payload", "ctx"]); const normalized = _normalized.value; const parseStr = (key) => { const k = esc2(key); return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`; }; doc2.write(`const input = payload.value;`); const ids = Object.create(null); let counter = 0; for (const key of normalized.keys) { ids[key] = `key_${counter++}`; } doc2.write(`const newResult = {}`); for (const key of normalized.keys) { if (normalized.optionalKeys.has(key)) { const id = ids[key]; doc2.write(`const ${id} = ${parseStr(key)};`); const k = esc2(key); doc2.write(` if (${id}.issues.length) { if (input[${k}] === undefined) { if (${k} in input) { newResult[${k}] = undefined; } } else { payload.issues = payload.issues.concat( ${id}.issues.map((iss) => ({ ...iss, path: iss.path ? [${k}, ...iss.path] : [${k}], })) ); } } else if (${id}.value === undefined) { if (${k} in input) newResult[${k}] = undefined; } else { newResult[${k}] = ${id}.value; } `); } else { const id = ids[key]; doc2.write(`const ${id} = ${parseStr(key)};`); doc2.write(` if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({ ...iss, path: iss.path ? [${esc2(key)}, ...iss.path] : [${esc2(key)}] })));`); doc2.write(`newResult[${esc2(key)}] = ${id}.value`); } } doc2.write(`payload.value = newResult;`); doc2.write(`return payload;`); const fn = doc2.compile(); return (payload, ctx) => fn(shape, payload, ctx); }; let fastpass; const isObject3 = isObject22; const jit = !globalConfig2.jitless; const allowsEval22 = allowsEval2; const fastEnabled = jit && allowsEval22.value; const catchall = def.catchall; let value; inst._zod.parse = (payload, ctx) => { value ?? (value = _normalized.value); const input = payload.value; if (!isObject3(input)) { payload.issues.push({ expected: "object", code: "invalid_type", input, inst }); return payload; } const proms = []; if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) { if (!fastpass) fastpass = generateFastpass(def.shape); payload = fastpass(payload, ctx); } else { payload.value = {}; const shape = value.shape; for (const key of value.keys) { const el = shape[key]; const r = el._zod.run({ value: input[key], issues: [] }, ctx); const isOptional = el._zod.optin === "optional" && el._zod.optout === "optional"; if (r instanceof Promise) { proms.push(r.then((r2) => isOptional ? handleOptionalObjectResult(r2, payload, key, input) : handleObjectResult(r2, payload, key))); } else if (isOptional) { handleOptionalObjectResult(r, payload, key, input); } else { handleObjectResult(r, payload, key); } } } if (!catchall) { return proms.length ? Promise.all(proms).then(() => payload) : payload; } const unrecognized = []; const keySet = value.keySet; const _catchall = catchall._zod; const t = _catchall.def.type; for (const key of Object.keys(input)) { if (keySet.has(key)) continue; if (t === "never") { unrecognized.push(key); continue; } const r = _catchall.run({ value: input[key], issues: [] }, ctx); if (r instanceof Promise) { proms.push(r.then((r2) => handleObjectResult(r2, payload, key))); } else { handleObjectResult(r, payload, key); } } if (unrecognized.length) { payload.issues.push({ code: "unrecognized_keys", keys: unrecognized, input, inst }); } if (!proms.length) return payload; return Promise.all(proms).then(() => { return payload; }); }; }); function handleUnionResults2(results, final, inst, ctx) { for (const result of results) { if (result.issues.length === 0) { final.value = result.value; return final; } } final.issues.push({ code: "invalid_union", input: final.value, inst, errors: results.map((result) => result.issues.map((iss) => finalizeIssue2(iss, ctx, config2()))) }); return final; } var $ZodUnion2 = /* @__PURE__ */ $constructor2("$ZodUnion", (inst, def) => { $ZodType2.init(inst, def); defineLazy2(inst._zod, "optin", () => def.options.some((o) => o._zod.optin === "optional") ? "optional" : undefined); defineLazy2(inst._zod, "optout", () => def.options.some((o) => o._zod.optout === "optional") ? "optional" : undefined); defineLazy2(inst._zod, "values", () => { if (def.options.every((o) => o._zod.values)) { return new Set(def.options.flatMap((option) => Array.from(option._zod.values))); } return; }); defineLazy2(inst._zod, "pattern", () => { if (def.options.every((o) => o._zod.pattern)) { const patterns = def.options.map((o) => o._zod.pattern); return new RegExp(`^(${patterns.map((p) => cleanRegex2(p.source)).join("|")})$`); } return; }); inst._zod.parse = (payload, ctx) => { let async = false; const results = []; for (const option of def.options) { const result = option._zod.run({ value: payload.value, issues: [] }, ctx); if (result instanceof Promise) { results.push(result); async = true; } else { if (result.issues.length === 0) return result; results.push(result); } } if (!async) return handleUnionResults2(results, payload, inst, ctx); return Promise.all(results).then((results2) => { return handleUnionResults2(results2, payload, inst, ctx); }); }; }); var $ZodDiscriminatedUnion2 = /* @__PURE__ */ $constructor2("$ZodDiscriminatedUnion", (inst, def) => { $ZodUnion2.init(inst, def); const _super = inst._zod.parse; defineLazy2(inst._zod, "propValues", () => { const propValues = {}; for (const option of def.options) { const pv = option._zod.propValues; if (!pv || Object.keys(pv).length === 0) throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(option)}"`); for (const [k, v] of Object.entries(pv)) { if (!propValues[k]) propValues[k] = new Set; for (const val of v) { propValues[k].add(val); } } } return propValues; }); const disc = cached2(() => { const opts = def.options; const map2 = new Map; for (const o of opts) { const values = o._zod.propValues[def.discriminator]; if (!values || values.size === 0) throw new Error(`Invalid discriminated union option at index "${def.options.indexOf(o)}"`); for (const v of values) { if (map2.has(v)) { throw new Error(`Duplicate discriminator value "${String(v)}"`); } map2.set(v, o); } } return map2; }); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!isObject22(input)) { payload.issues.push({ code: "invalid_type", expected: "object", input, inst }); return payload; } const opt = disc.value.get(input?.[def.discriminator]); if (opt) { return opt._zod.run(payload, ctx); } if (def.unionFallback) { return _super(payload, ctx); } payload.issues.push({ code: "invalid_union", errors: [], note: "No matching discriminator", input, path: [def.discriminator], inst }); return payload; }; }); var $ZodIntersection2 = /* @__PURE__ */ $constructor2("$ZodIntersection", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; const left = def.left._zod.run({ value: input, issues: [] }, ctx); const right = def.right._zod.run({ value: input, issues: [] }, ctx); const async = left instanceof Promise || right instanceof Promise; if (async) { return Promise.all([left, right]).then(([left2, right2]) => { return handleIntersectionResults2(payload, left2, right2); }); } return handleIntersectionResults2(payload, left, right); }; }); function mergeValues22(a, b) { if (a === b) { return { valid: true, data: a }; } if (a instanceof Date && b instanceof Date && +a === +b) { return { valid: true, data: a }; } if (isPlainObject3(a) && isPlainObject3(b)) { const bKeys = Object.keys(b); const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1); const newObj = { ...a, ...b }; for (const key of sharedKeys) { const sharedValue = mergeValues22(a[key], b[key]); if (!sharedValue.valid) { return { valid: false, mergeErrorPath: [key, ...sharedValue.mergeErrorPath] }; } newObj[key] = sharedValue.data; } return { valid: true, data: newObj }; } if (Array.isArray(a) && Array.isArray(b)) { if (a.length !== b.length) { return { valid: false, mergeErrorPath: [] }; } const newArray = []; for (let index = 0;index < a.length; index++) { const itemA = a[index]; const itemB = b[index]; const sharedValue = mergeValues22(itemA, itemB); if (!sharedValue.valid) { return { valid: false, mergeErrorPath: [index, ...sharedValue.mergeErrorPath] }; } newArray.push(sharedValue.data); } return { valid: true, data: newArray }; } return { valid: false, mergeErrorPath: [] }; } function handleIntersectionResults2(result, left, right) { if (left.issues.length) { result.issues.push(...left.issues); } if (right.issues.length) { result.issues.push(...right.issues); } if (aborted2(result)) return result; const merged = mergeValues22(left.value, right.value); if (!merged.valid) { throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`); } result.value = merged.data; return result; } var $ZodRecord2 = /* @__PURE__ */ $constructor2("$ZodRecord", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload, ctx) => { const input = payload.value; if (!isPlainObject3(input)) { payload.issues.push({ expected: "record", code: "invalid_type", input, inst }); return payload; } const proms = []; if (def.keyType._zod.values) { const values = def.keyType._zod.values; payload.value = {}; for (const key of values) { if (typeof key === "string" || typeof key === "number" || typeof key === "symbol") { const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => { if (result2.issues.length) { payload.issues.push(...prefixIssues2(key, result2.issues)); } payload.value[key] = result2.value; })); } else { if (result.issues.length) { payload.issues.push(...prefixIssues2(key, result.issues)); } payload.value[key] = result.value; } } } let unrecognized; for (const key in input) { if (!values.has(key)) { unrecognized = unrecognized ?? []; unrecognized.push(key); } } if (unrecognized && unrecognized.length > 0) { payload.issues.push({ code: "unrecognized_keys", input, inst, keys: unrecognized }); } } else { payload.value = {}; for (const key of Reflect.ownKeys(input)) { if (key === "__proto__") continue; const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx); if (keyResult instanceof Promise) { throw new Error("Async schemas not supported in object keys currently"); } if (keyResult.issues.length) { payload.issues.push({ origin: "record", code: "invalid_key", issues: keyResult.issues.map((iss) => finalizeIssue2(iss, ctx, config2())), input: key, path: [key], inst }); payload.value[keyResult.value] = keyResult.value; continue; } const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx); if (result instanceof Promise) { proms.push(result.then((result2) => { if (result2.issues.length) { payload.issues.push(...prefixIssues2(key, result2.issues)); } payload.value[keyResult.value] = result2.value; })); } else { if (result.issues.length) { payload.issues.push(...prefixIssues2(key, result.issues)); } payload.value[keyResult.value] = result.value; } } } if (proms.length) { return Promise.all(proms).then(() => payload); } return payload; }; }); var $ZodEnum2 = /* @__PURE__ */ $constructor2("$ZodEnum", (inst, def) => { $ZodType2.init(inst, def); const values = getEnumValues2(def.entries); inst._zod.values = new Set(values); inst._zod.pattern = new RegExp(`^(${values.filter((k) => propertyKeyTypes2.has(typeof k)).map((o) => typeof o === "string" ? escapeRegex2(o) : o.toString()).join("|")})$`); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (inst._zod.values.has(input)) { return payload; } payload.issues.push({ code: "invalid_value", values, input, inst }); return payload; }; }); var $ZodLiteral2 = /* @__PURE__ */ $constructor2("$ZodLiteral", (inst, def) => { $ZodType2.init(inst, def); inst._zod.values = new Set(def.values); inst._zod.pattern = new RegExp(`^(${def.values.map((o) => typeof o === "string" ? escapeRegex2(o) : o ? o.toString() : String(o)).join("|")})$`); inst._zod.parse = (payload, _ctx) => { const input = payload.value; if (inst._zod.values.has(input)) { return payload; } payload.issues.push({ code: "invalid_value", values: def.values, input, inst }); return payload; }; }); var $ZodTransform2 = /* @__PURE__ */ $constructor2("$ZodTransform", (inst, def) => { $ZodType2.init(inst, def); inst._zod.parse = (payload, _ctx) => { const _out = def.transform(payload.value, payload); if (_ctx.async) { const output = _out instanceof Promise ? _out : Promise.resolve(_out); return output.then((output2) => { payload.value = output2; return payload; }); } if (_out instanceof Promise) { throw new $ZodAsyncError2; } payload.value = _out; return payload; }; }); var $ZodOptional2 = /* @__PURE__ */ $constructor2("$ZodOptional", (inst, def) => { $ZodType2.init(inst, def); inst._zod.optin = "optional"; inst._zod.optout = "optional"; defineLazy2(inst._zod, "values", () => { return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined; }); defineLazy2(inst._zod, "pattern", () => { const pattern = def.innerType._zod.pattern; return pattern ? new RegExp(`^(${cleanRegex2(pattern.source)})?$`) : undefined; }); inst._zod.parse = (payload, ctx) => { if (def.innerType._zod.optin === "optional") { return def.innerType._zod.run(payload, ctx); } if (payload.value === undefined) { return payload; } return def.innerType._zod.run(payload, ctx); }; }); var $ZodNullable2 = /* @__PURE__ */ $constructor2("$ZodNullable", (inst, def) => { $ZodType2.init(inst, def); defineLazy2(inst._zod, "optin", () => def.innerType._zod.optin); defineLazy2(inst._zod, "optout", () => def.innerType._zod.optout); defineLazy2(inst._zod, "pattern", () => { const pattern = def.innerType._zod.pattern; return pattern ? new RegExp(`^(${cleanRegex2(pattern.source)}|null)$`) : undefined; }); defineLazy2(inst._zod, "values", () => { return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined; }); inst._zod.parse = (payload, ctx) => { if (payload.value === null) return payload; return def.innerType._zod.run(payload, ctx); }; }); var $ZodDefault2 = /* @__PURE__ */ $constructor2("$ZodDefault", (inst, def) => { $ZodType2.init(inst, def); inst._zod.optin = "optional"; defineLazy2(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { if (payload.value === undefined) { payload.value = def.defaultValue; return payload; } const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => handleDefaultResult2(result2, def)); } return handleDefaultResult2(result, def); }; }); function handleDefaultResult2(payload, def) { if (payload.value === undefined) { payload.value = def.defaultValue; } return payload; } var $ZodPrefault2 = /* @__PURE__ */ $constructor2("$ZodPrefault", (inst, def) => { $ZodType2.init(inst, def); inst._zod.optin = "optional"; defineLazy2(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { if (payload.value === undefined) { payload.value = def.defaultValue; } return def.innerType._zod.run(payload, ctx); }; }); var $ZodNonOptional2 = /* @__PURE__ */ $constructor2("$ZodNonOptional", (inst, def) => { $ZodType2.init(inst, def); defineLazy2(inst._zod, "values", () => { const v = def.innerType._zod.values; return v ? new Set([...v].filter((x) => x !== undefined)) : undefined; }); inst._zod.parse = (payload, ctx) => { const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => handleNonOptionalResult2(result2, inst)); } return handleNonOptionalResult2(result, inst); }; }); function handleNonOptionalResult2(payload, inst) { if (!payload.issues.length && payload.value === undefined) { payload.issues.push({ code: "invalid_type", expected: "nonoptional", input: payload.value, inst }); } return payload; } var $ZodCatch2 = /* @__PURE__ */ $constructor2("$ZodCatch", (inst, def) => { $ZodType2.init(inst, def); inst._zod.optin = "optional"; defineLazy2(inst._zod, "optout", () => def.innerType._zod.optout); defineLazy2(inst._zod, "values", () => def.innerType._zod.values); inst._zod.parse = (payload, ctx) => { const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then((result2) => { payload.value = result2.value; if (result2.issues.length) { payload.value = def.catchValue({ ...payload, error: { issues: result2.issues.map((iss) => finalizeIssue2(iss, ctx, config2())) }, input: payload.value }); payload.issues = []; } return payload; }); } payload.value = result.value; if (result.issues.length) { payload.value = def.catchValue({ ...payload, error: { issues: result.issues.map((iss) => finalizeIssue2(iss, ctx, config2())) }, input: payload.value }); payload.issues = []; } return payload; }; }); var $ZodPipe2 = /* @__PURE__ */ $constructor2("$ZodPipe", (inst, def) => { $ZodType2.init(inst, def); defineLazy2(inst._zod, "values", () => def.in._zod.values); defineLazy2(inst._zod, "optin", () => def.in._zod.optin); defineLazy2(inst._zod, "optout", () => def.out._zod.optout); inst._zod.parse = (payload, ctx) => { const left = def.in._zod.run(payload, ctx); if (left instanceof Promise) { return left.then((left2) => handlePipeResult2(left2, def, ctx)); } return handlePipeResult2(left, def, ctx); }; }); function handlePipeResult2(left, def, ctx) { if (aborted2(left)) { return left; } return def.out._zod.run({ value: left.value, issues: left.issues }, ctx); } var $ZodReadonly2 = /* @__PURE__ */ $constructor2("$ZodReadonly", (inst, def) => { $ZodType2.init(inst, def); defineLazy2(inst._zod, "propValues", () => def.innerType._zod.propValues); defineLazy2(inst._zod, "values", () => def.innerType._zod.values); defineLazy2(inst._zod, "optin", () => def.innerType._zod.optin); defineLazy2(inst._zod, "optout", () => def.innerType._zod.optout); inst._zod.parse = (payload, ctx) => { const result = def.innerType._zod.run(payload, ctx); if (result instanceof Promise) { return result.then(handleReadonlyResult2); } return handleReadonlyResult2(result); }; }); function handleReadonlyResult2(payload) { payload.value = Object.freeze(payload.value); return payload; } var $ZodCustom2 = /* @__PURE__ */ $constructor2("$ZodCustom", (inst, def) => { $ZodCheck2.init(inst, def); $ZodType2.init(inst, def); inst._zod.parse = (payload, _) => { return payload; }; inst._zod.check = (payload) => { const input = payload.value; const r = def.fn(input); if (r instanceof Promise) { return r.then((r2) => handleRefineResult2(r2, payload, input, inst)); } handleRefineResult2(r, payload, input, inst); return; }; }); function handleRefineResult2(result, payload, input, inst) { if (!result) { const _iss = { code: "custom", input, inst, path: [...inst._zod.def.path ?? []], continue: !inst._zod.def.abort }; if (inst._zod.def.params) _iss.params = inst._zod.def.params; payload.issues.push(issue2(_iss)); } } var parsedType2 = (data) => { const t = typeof data; switch (t) { case "number": { return Number.isNaN(data) ? "NaN" : "number"; } case "object": { if (Array.isArray(data)) { return "array"; } if (data === null) { return "null"; } if (Object.getPrototypeOf(data) !== Object.prototype && data.constructor) { return data.constructor.name; } } } return t; }; var error2 = () => { const Sizable = { string: { unit: "characters", verb: "to have" }, file: { unit: "bytes", verb: "to have" }, array: { unit: "items", verb: "to have" }, set: { unit: "items", verb: "to have" } }; function getSizing(origin) { return Sizable[origin] ?? null; } const Nouns = { regex: "input", email: "email address", url: "URL", emoji: "emoji", uuid: "UUID", uuidv4: "UUIDv4", uuidv6: "UUIDv6", nanoid: "nanoid", guid: "GUID", cuid: "cuid", cuid2: "cuid2", ulid: "ULID", xid: "XID", ksuid: "KSUID", datetime: "ISO datetime", date: "ISO date", time: "ISO time", duration: "ISO duration", ipv4: "IPv4 address", ipv6: "IPv6 address", cidrv4: "IPv4 range", cidrv6: "IPv6 range", base64: "base64-encoded string", base64url: "base64url-encoded string", json_string: "JSON string", e164: "E.164 number", jwt: "JWT", template_literal: "input" }; return (issue22) => { switch (issue22.code) { case "invalid_type": return `Invalid input: expected ${issue22.expected}, received ${parsedType2(issue22.input)}`; case "invalid_value": if (issue22.values.length === 1) return `Invalid input: expected ${stringifyPrimitive2(issue22.values[0])}`; return `Invalid option: expected one of ${joinValues2(issue22.values, "|")}`; case "too_big": { const adj = issue22.inclusive ? "<=" : "<"; const sizing = getSizing(issue22.origin); if (sizing) return `Too big: expected ${issue22.origin ?? "value"} to have ${adj}${issue22.maximum.toString()} ${sizing.unit ?? "elements"}`; return `Too big: expected ${issue22.origin ?? "value"} to be ${adj}${issue22.maximum.toString()}`; } case "too_small": { const adj = issue22.inclusive ? ">=" : ">"; const sizing = getSizing(issue22.origin); if (sizing) { return `Too small: expected ${issue22.origin} to have ${adj}${issue22.minimum.toString()} ${sizing.unit}`; } return `Too small: expected ${issue22.origin} to be ${adj}${issue22.minimum.toString()}`; } case "invalid_format": { const _issue = issue22; if (_issue.format === "starts_with") { return `Invalid string: must start with "${_issue.prefix}"`; } if (_issue.format === "ends_with") return `Invalid string: must end with "${_issue.suffix}"`; if (_issue.format === "includes") return `Invalid string: must include "${_issue.includes}"`; if (_issue.format === "regex") return `Invalid string: must match pattern ${_issue.pattern}`; return `Invalid ${Nouns[_issue.format] ?? issue22.format}`; } case "not_multiple_of": return `Invalid number: must be a multiple of ${issue22.divisor}`; case "unrecognized_keys": return `Unrecognized key${issue22.keys.length > 1 ? "s" : ""}: ${joinValues2(issue22.keys, ", ")}`; case "invalid_key": return `Invalid key in ${issue22.origin}`; case "invalid_union": return "Invalid input"; case "invalid_element": return `Invalid value in ${issue22.origin}`; default: return `Invalid input`; } }; }; function en_default22() { return { localeError: error2() }; } var $output2 = Symbol("ZodOutput"); var $input2 = Symbol("ZodInput"); class $ZodRegistry2 { constructor() { this._map = new WeakMap; this._idmap = new Map; } add(schema, ..._meta) { const meta2 = _meta[0]; this._map.set(schema, meta2); if (meta2 && typeof meta2 === "object" && "id" in meta2) { if (this._idmap.has(meta2.id)) { throw new Error(`ID ${meta2.id} already exists in the registry`); } this._idmap.set(meta2.id, schema); } return this; } remove(schema) { this._map.delete(schema); return this; } get(schema) { const p = schema._zod.parent; if (p) { const pm = { ...this.get(p) ?? {} }; delete pm.id; return { ...pm, ...this._map.get(schema) }; } return this._map.get(schema); } has(schema) { return this._map.has(schema); } } function registry2() { return new $ZodRegistry2; } var globalRegistry2 = /* @__PURE__ */ registry2(); function _string2(Class22, params) { return new Class22({ type: "string", ...normalizeParams2(params) }); } function _email2(Class22, params) { return new Class22({ type: "string", format: "email", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _guid2(Class22, params) { return new Class22({ type: "string", format: "guid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _uuid2(Class22, params) { return new Class22({ type: "string", format: "uuid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _uuidv42(Class22, params) { return new Class22({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v4", ...normalizeParams2(params) }); } function _uuidv62(Class22, params) { return new Class22({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v6", ...normalizeParams2(params) }); } function _uuidv72(Class22, params) { return new Class22({ type: "string", format: "uuid", check: "string_format", abort: false, version: "v7", ...normalizeParams2(params) }); } function _url2(Class22, params) { return new Class22({ type: "string", format: "url", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _emoji22(Class22, params) { return new Class22({ type: "string", format: "emoji", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _nanoid2(Class22, params) { return new Class22({ type: "string", format: "nanoid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _cuid3(Class22, params) { return new Class22({ type: "string", format: "cuid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _cuid22(Class22, params) { return new Class22({ type: "string", format: "cuid2", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _ulid2(Class22, params) { return new Class22({ type: "string", format: "ulid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _xid2(Class22, params) { return new Class22({ type: "string", format: "xid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _ksuid2(Class22, params) { return new Class22({ type: "string", format: "ksuid", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _ipv42(Class22, params) { return new Class22({ type: "string", format: "ipv4", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _ipv62(Class22, params) { return new Class22({ type: "string", format: "ipv6", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _cidrv42(Class22, params) { return new Class22({ type: "string", format: "cidrv4", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _cidrv62(Class22, params) { return new Class22({ type: "string", format: "cidrv6", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _base642(Class22, params) { return new Class22({ type: "string", format: "base64", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _base64url2(Class22, params) { return new Class22({ type: "string", format: "base64url", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _e1642(Class22, params) { return new Class22({ type: "string", format: "e164", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _jwt2(Class22, params) { return new Class22({ type: "string", format: "jwt", check: "string_format", abort: false, ...normalizeParams2(params) }); } function _isoDateTime2(Class22, params) { return new Class22({ type: "string", format: "datetime", check: "string_format", offset: false, local: false, precision: null, ...normalizeParams2(params) }); } function _isoDate2(Class22, params) { return new Class22({ type: "string", format: "date", check: "string_format", ...normalizeParams2(params) }); } function _isoTime2(Class22, params) { return new Class22({ type: "string", format: "time", check: "string_format", precision: null, ...normalizeParams2(params) }); } function _isoDuration2(Class22, params) { return new Class22({ type: "string", format: "duration", check: "string_format", ...normalizeParams2(params) }); } function _number2(Class22, params) { return new Class22({ type: "number", checks: [], ...normalizeParams2(params) }); } function _int2(Class22, params) { return new Class22({ type: "number", check: "number_format", abort: false, format: "safeint", ...normalizeParams2(params) }); } function _boolean2(Class22, params) { return new Class22({ type: "boolean", ...normalizeParams2(params) }); } function _null22(Class22, params) { return new Class22({ type: "null", ...normalizeParams2(params) }); } function _unknown2(Class22) { return new Class22({ type: "unknown" }); } function _never2(Class22, params) { return new Class22({ type: "never", ...normalizeParams2(params) }); } function _lt2(value, params) { return new $ZodCheckLessThan2({ check: "less_than", ...normalizeParams2(params), value, inclusive: false }); } function _lte2(value, params) { return new $ZodCheckLessThan2({ check: "less_than", ...normalizeParams2(params), value, inclusive: true }); } function _gt2(value, params) { return new $ZodCheckGreaterThan2({ check: "greater_than", ...normalizeParams2(params), value, inclusive: false }); } function _gte2(value, params) { return new $ZodCheckGreaterThan2({ check: "greater_than", ...normalizeParams2(params), value, inclusive: true }); } function _multipleOf2(value, params) { return new $ZodCheckMultipleOf2({ check: "multiple_of", ...normalizeParams2(params), value }); } function _maxLength2(maximum, params) { const ch = new $ZodCheckMaxLength2({ check: "max_length", ...normalizeParams2(params), maximum }); return ch; } function _minLength2(minimum, params) { return new $ZodCheckMinLength2({ check: "min_length", ...normalizeParams2(params), minimum }); } function _length2(length, params) { return new $ZodCheckLengthEquals2({ check: "length_equals", ...normalizeParams2(params), length }); } function _regex2(pattern, params) { return new $ZodCheckRegex2({ check: "string_format", format: "regex", ...normalizeParams2(params), pattern }); } function _lowercase2(params) { return new $ZodCheckLowerCase2({ check: "string_format", format: "lowercase", ...normalizeParams2(params) }); } function _uppercase2(params) { return new $ZodCheckUpperCase2({ check: "string_format", format: "uppercase", ...normalizeParams2(params) }); } function _includes2(includes, params) { return new $ZodCheckIncludes2({ check: "string_format", format: "includes", ...normalizeParams2(params), includes }); } function _startsWith2(prefix, params) { return new $ZodCheckStartsWith2({ check: "string_format", format: "starts_with", ...normalizeParams2(params), prefix }); } function _endsWith2(suffix, params) { return new $ZodCheckEndsWith2({ check: "string_format", format: "ends_with", ...normalizeParams2(params), suffix }); } function _overwrite2(tx) { return new $ZodCheckOverwrite2({ check: "overwrite", tx }); } function _normalize2(form) { return _overwrite2((input) => input.normalize(form)); } function _trim2() { return _overwrite2((input) => input.trim()); } function _toLowerCase2() { return _overwrite2((input) => input.toLowerCase()); } function _toUpperCase2() { return _overwrite2((input) => input.toUpperCase()); } function _array2(Class22, element, params) { return new Class22({ type: "array", element, ...normalizeParams2(params) }); } function _custom2(Class22, fn, _params) { const norm = normalizeParams2(_params); norm.abort ?? (norm.abort = true); const schema = new Class22({ type: "custom", check: "custom", fn, ...norm }); return schema; } function _refine2(Class22, fn, _params) { const schema = new Class22({ type: "custom", check: "custom", fn, ...normalizeParams2(_params) }); return schema; } var exports_iso2 = {}; __export2(exports_iso2, { time: () => time22, duration: () => duration22, datetime: () => datetime22, date: () => date22, ZodISOTime: () => ZodISOTime2, ZodISODuration: () => ZodISODuration2, ZodISODateTime: () => ZodISODateTime2, ZodISODate: () => ZodISODate2 }); var ZodISODateTime2 = /* @__PURE__ */ $constructor2("ZodISODateTime", (inst, def) => { $ZodISODateTime2.init(inst, def); ZodStringFormat2.init(inst, def); }); function datetime22(params) { return _isoDateTime2(ZodISODateTime2, params); } var ZodISODate2 = /* @__PURE__ */ $constructor2("ZodISODate", (inst, def) => { $ZodISODate2.init(inst, def); ZodStringFormat2.init(inst, def); }); function date22(params) { return _isoDate2(ZodISODate2, params); } var ZodISOTime2 = /* @__PURE__ */ $constructor2("ZodISOTime", (inst, def) => { $ZodISOTime2.init(inst, def); ZodStringFormat2.init(inst, def); }); function time22(params) { return _isoTime2(ZodISOTime2, params); } var ZodISODuration2 = /* @__PURE__ */ $constructor2("ZodISODuration", (inst, def) => { $ZodISODuration2.init(inst, def); ZodStringFormat2.init(inst, def); }); function duration22(params) { return _isoDuration2(ZodISODuration2, params); } var initializer22 = (inst, issues) => { $ZodError2.init(inst, issues); inst.name = "ZodError"; Object.defineProperties(inst, { format: { value: (mapper) => formatError2(inst, mapper) }, flatten: { value: (mapper) => flattenError2(inst, mapper) }, addIssue: { value: (issue22) => inst.issues.push(issue22) }, addIssues: { value: (issues2) => inst.issues.push(...issues2) }, isEmpty: { get() { return inst.issues.length === 0; } } }); }; var ZodError22 = $constructor2("ZodError", initializer22); var ZodRealError2 = $constructor2("ZodError", initializer22, { Parent: Error }); var parse42 = /* @__PURE__ */ _parse2(ZodRealError2); var parseAsync22 = /* @__PURE__ */ _parseAsync2(ZodRealError2); var safeParse32 = /* @__PURE__ */ _safeParse2(ZodRealError2); var safeParseAsync32 = /* @__PURE__ */ _safeParseAsync2(ZodRealError2); var ZodType22 = /* @__PURE__ */ $constructor2("ZodType", (inst, def) => { $ZodType2.init(inst, def); inst.def = def; Object.defineProperty(inst, "_def", { value: def }); inst.check = (...checks3) => { return inst.clone({ ...def, checks: [ ...def.checks ?? [], ...checks3.map((ch) => typeof ch === "function" ? { _zod: { check: ch, def: { check: "custom" }, onattach: [] } } : ch) ] }); }; inst.clone = (def2, params) => clone2(inst, def2, params); inst.brand = () => inst; inst.register = (reg, meta2) => { reg.add(inst, meta2); return inst; }; inst.parse = (data, params) => parse42(inst, data, params, { callee: inst.parse }); inst.safeParse = (data, params) => safeParse32(inst, data, params); inst.parseAsync = async (data, params) => parseAsync22(inst, data, params, { callee: inst.parseAsync }); inst.safeParseAsync = async (data, params) => safeParseAsync32(inst, data, params); inst.spa = inst.safeParseAsync; inst.refine = (check, params) => inst.check(refine2(check, params)); inst.superRefine = (refinement) => inst.check(superRefine2(refinement)); inst.overwrite = (fn) => inst.check(_overwrite2(fn)); inst.optional = () => optional3(inst); inst.nullable = () => nullable3(inst); inst.nullish = () => optional3(nullable3(inst)); inst.nonoptional = (params) => nonoptional2(inst, params); inst.array = () => array3(inst); inst.or = (arg) => union3([inst, arg]); inst.and = (arg) => intersection3(inst, arg); inst.transform = (tx) => pipe2(inst, transform2(tx)); inst.default = (def2) => _default2(inst, def2); inst.prefault = (def2) => prefault2(inst, def2); inst.catch = (params) => _catch2(inst, params); inst.pipe = (target) => pipe2(inst, target); inst.readonly = () => readonly3(inst); inst.describe = (description) => { const cl = inst.clone(); globalRegistry2.add(cl, { description }); return cl; }; Object.defineProperty(inst, "description", { get() { return globalRegistry2.get(inst)?.description; }, configurable: true }); inst.meta = (...args) => { if (args.length === 0) { return globalRegistry2.get(inst); } const cl = inst.clone(); globalRegistry2.add(cl, args[0]); return cl; }; inst.isOptional = () => inst.safeParse(undefined).success; inst.isNullable = () => inst.safeParse(null).success; return inst; }); var _ZodString2 = /* @__PURE__ */ $constructor2("_ZodString", (inst, def) => { $ZodString2.init(inst, def); ZodType22.init(inst, def); const bag = inst._zod.bag; inst.format = bag.format ?? null; inst.minLength = bag.minimum ?? null; inst.maxLength = bag.maximum ?? null; inst.regex = (...args) => inst.check(_regex2(...args)); inst.includes = (...args) => inst.check(_includes2(...args)); inst.startsWith = (...args) => inst.check(_startsWith2(...args)); inst.endsWith = (...args) => inst.check(_endsWith2(...args)); inst.min = (...args) => inst.check(_minLength2(...args)); inst.max = (...args) => inst.check(_maxLength2(...args)); inst.length = (...args) => inst.check(_length2(...args)); inst.nonempty = (...args) => inst.check(_minLength2(1, ...args)); inst.lowercase = (params) => inst.check(_lowercase2(params)); inst.uppercase = (params) => inst.check(_uppercase2(params)); inst.trim = () => inst.check(_trim2()); inst.normalize = (...args) => inst.check(_normalize2(...args)); inst.toLowerCase = () => inst.check(_toLowerCase2()); inst.toUpperCase = () => inst.check(_toUpperCase2()); }); var ZodString22 = /* @__PURE__ */ $constructor2("ZodString", (inst, def) => { $ZodString2.init(inst, def); _ZodString2.init(inst, def); inst.email = (params) => inst.check(_email2(ZodEmail2, params)); inst.url = (params) => inst.check(_url2(ZodURL2, params)); inst.jwt = (params) => inst.check(_jwt2(ZodJWT2, params)); inst.emoji = (params) => inst.check(_emoji22(ZodEmoji2, params)); inst.guid = (params) => inst.check(_guid2(ZodGUID2, params)); inst.uuid = (params) => inst.check(_uuid2(ZodUUID2, params)); inst.uuidv4 = (params) => inst.check(_uuidv42(ZodUUID2, params)); inst.uuidv6 = (params) => inst.check(_uuidv62(ZodUUID2, params)); inst.uuidv7 = (params) => inst.check(_uuidv72(ZodUUID2, params)); inst.nanoid = (params) => inst.check(_nanoid2(ZodNanoID2, params)); inst.guid = (params) => inst.check(_guid2(ZodGUID2, params)); inst.cuid = (params) => inst.check(_cuid3(ZodCUID3, params)); inst.cuid2 = (params) => inst.check(_cuid22(ZodCUID22, params)); inst.ulid = (params) => inst.check(_ulid2(ZodULID2, params)); inst.base64 = (params) => inst.check(_base642(ZodBase642, params)); inst.base64url = (params) => inst.check(_base64url2(ZodBase64URL2, params)); inst.xid = (params) => inst.check(_xid2(ZodXID2, params)); inst.ksuid = (params) => inst.check(_ksuid2(ZodKSUID2, params)); inst.ipv4 = (params) => inst.check(_ipv42(ZodIPv42, params)); inst.ipv6 = (params) => inst.check(_ipv62(ZodIPv62, params)); inst.cidrv4 = (params) => inst.check(_cidrv42(ZodCIDRv42, params)); inst.cidrv6 = (params) => inst.check(_cidrv62(ZodCIDRv62, params)); inst.e164 = (params) => inst.check(_e1642(ZodE1642, params)); inst.datetime = (params) => inst.check(datetime22(params)); inst.date = (params) => inst.check(date22(params)); inst.time = (params) => inst.check(time22(params)); inst.duration = (params) => inst.check(duration22(params)); }); function string22(params) { return _string2(ZodString22, params); } var ZodStringFormat2 = /* @__PURE__ */ $constructor2("ZodStringFormat", (inst, def) => { $ZodStringFormat2.init(inst, def); _ZodString2.init(inst, def); }); var ZodEmail2 = /* @__PURE__ */ $constructor2("ZodEmail", (inst, def) => { $ZodEmail2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodGUID2 = /* @__PURE__ */ $constructor2("ZodGUID", (inst, def) => { $ZodGUID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodUUID2 = /* @__PURE__ */ $constructor2("ZodUUID", (inst, def) => { $ZodUUID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodURL2 = /* @__PURE__ */ $constructor2("ZodURL", (inst, def) => { $ZodURL2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodEmoji2 = /* @__PURE__ */ $constructor2("ZodEmoji", (inst, def) => { $ZodEmoji2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodNanoID2 = /* @__PURE__ */ $constructor2("ZodNanoID", (inst, def) => { $ZodNanoID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodCUID3 = /* @__PURE__ */ $constructor2("ZodCUID", (inst, def) => { $ZodCUID3.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodCUID22 = /* @__PURE__ */ $constructor2("ZodCUID2", (inst, def) => { $ZodCUID22.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodULID2 = /* @__PURE__ */ $constructor2("ZodULID", (inst, def) => { $ZodULID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodXID2 = /* @__PURE__ */ $constructor2("ZodXID", (inst, def) => { $ZodXID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodKSUID2 = /* @__PURE__ */ $constructor2("ZodKSUID", (inst, def) => { $ZodKSUID2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodIPv42 = /* @__PURE__ */ $constructor2("ZodIPv4", (inst, def) => { $ZodIPv42.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodIPv62 = /* @__PURE__ */ $constructor2("ZodIPv6", (inst, def) => { $ZodIPv62.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodCIDRv42 = /* @__PURE__ */ $constructor2("ZodCIDRv4", (inst, def) => { $ZodCIDRv42.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodCIDRv62 = /* @__PURE__ */ $constructor2("ZodCIDRv6", (inst, def) => { $ZodCIDRv62.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodBase642 = /* @__PURE__ */ $constructor2("ZodBase64", (inst, def) => { $ZodBase642.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodBase64URL2 = /* @__PURE__ */ $constructor2("ZodBase64URL", (inst, def) => { $ZodBase64URL2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodE1642 = /* @__PURE__ */ $constructor2("ZodE164", (inst, def) => { $ZodE1642.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodJWT2 = /* @__PURE__ */ $constructor2("ZodJWT", (inst, def) => { $ZodJWT2.init(inst, def); ZodStringFormat2.init(inst, def); }); var ZodNumber22 = /* @__PURE__ */ $constructor2("ZodNumber", (inst, def) => { $ZodNumber2.init(inst, def); ZodType22.init(inst, def); inst.gt = (value, params) => inst.check(_gt2(value, params)); inst.gte = (value, params) => inst.check(_gte2(value, params)); inst.min = (value, params) => inst.check(_gte2(value, params)); inst.lt = (value, params) => inst.check(_lt2(value, params)); inst.lte = (value, params) => inst.check(_lte2(value, params)); inst.max = (value, params) => inst.check(_lte2(value, params)); inst.int = (params) => inst.check(int2(params)); inst.safe = (params) => inst.check(int2(params)); inst.positive = (params) => inst.check(_gt2(0, params)); inst.nonnegative = (params) => inst.check(_gte2(0, params)); inst.negative = (params) => inst.check(_lt2(0, params)); inst.nonpositive = (params) => inst.check(_lte2(0, params)); inst.multipleOf = (value, params) => inst.check(_multipleOf2(value, params)); inst.step = (value, params) => inst.check(_multipleOf2(value, params)); inst.finite = () => inst; const bag = inst._zod.bag; inst.minValue = Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null; inst.maxValue = Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null; inst.isInt = (bag.format ?? "").includes("int") || Number.isSafeInteger(bag.multipleOf ?? 0.5); inst.isFinite = true; inst.format = bag.format ?? null; }); function number22(params) { return _number2(ZodNumber22, params); } var ZodNumberFormat2 = /* @__PURE__ */ $constructor2("ZodNumberFormat", (inst, def) => { $ZodNumberFormat2.init(inst, def); ZodNumber22.init(inst, def); }); function int2(params) { return _int2(ZodNumberFormat2, params); } var ZodBoolean22 = /* @__PURE__ */ $constructor2("ZodBoolean", (inst, def) => { $ZodBoolean2.init(inst, def); ZodType22.init(inst, def); }); function boolean22(params) { return _boolean2(ZodBoolean22, params); } var ZodNull22 = /* @__PURE__ */ $constructor2("ZodNull", (inst, def) => { $ZodNull2.init(inst, def); ZodType22.init(inst, def); }); function _null32(params) { return _null22(ZodNull22, params); } var ZodUnknown22 = /* @__PURE__ */ $constructor2("ZodUnknown", (inst, def) => { $ZodUnknown2.init(inst, def); ZodType22.init(inst, def); }); function unknown3() { return _unknown2(ZodUnknown22); } var ZodNever22 = /* @__PURE__ */ $constructor2("ZodNever", (inst, def) => { $ZodNever2.init(inst, def); ZodType22.init(inst, def); }); function never3(params) { return _never2(ZodNever22, params); } var ZodArray22 = /* @__PURE__ */ $constructor2("ZodArray", (inst, def) => { $ZodArray2.init(inst, def); ZodType22.init(inst, def); inst.element = def.element; inst.min = (minLength, params) => inst.check(_minLength2(minLength, params)); inst.nonempty = (params) => inst.check(_minLength2(1, params)); inst.max = (maxLength, params) => inst.check(_maxLength2(maxLength, params)); inst.length = (len, params) => inst.check(_length2(len, params)); inst.unwrap = () => inst.element; }); function array3(element, params) { return _array2(ZodArray22, element, params); } var ZodObject22 = /* @__PURE__ */ $constructor2("ZodObject", (inst, def) => { $ZodObject2.init(inst, def); ZodType22.init(inst, def); exports_util2.defineLazy(inst, "shape", () => def.shape); inst.keyof = () => _enum2(Object.keys(inst._zod.def.shape)); inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall }); inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown3() }); inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown3() }); inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never3() }); inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined }); inst.extend = (incoming) => { return exports_util2.extend(inst, incoming); }; inst.merge = (other) => exports_util2.merge(inst, other); inst.pick = (mask) => exports_util2.pick(inst, mask); inst.omit = (mask) => exports_util2.omit(inst, mask); inst.partial = (...args) => exports_util2.partial(ZodOptional22, inst, args[0]); inst.required = (...args) => exports_util2.required(ZodNonOptional2, inst, args[0]); }); function object22(shape, params) { const def = { type: "object", get shape() { exports_util2.assignProp(this, "shape", { ...shape }); return this.shape; }, ...exports_util2.normalizeParams(params) }; return new ZodObject22(def); } function looseObject2(shape, params) { return new ZodObject22({ type: "object", get shape() { exports_util2.assignProp(this, "shape", { ...shape }); return this.shape; }, catchall: unknown3(), ...exports_util2.normalizeParams(params) }); } var ZodUnion22 = /* @__PURE__ */ $constructor2("ZodUnion", (inst, def) => { $ZodUnion2.init(inst, def); ZodType22.init(inst, def); inst.options = def.options; }); function union3(options, params) { return new ZodUnion22({ type: "union", options, ...exports_util2.normalizeParams(params) }); } var ZodDiscriminatedUnion22 = /* @__PURE__ */ $constructor2("ZodDiscriminatedUnion", (inst, def) => { ZodUnion22.init(inst, def); $ZodDiscriminatedUnion2.init(inst, def); }); function discriminatedUnion2(discriminator, options, params) { return new ZodDiscriminatedUnion22({ type: "union", options, discriminator, ...exports_util2.normalizeParams(params) }); } var ZodIntersection22 = /* @__PURE__ */ $constructor2("ZodIntersection", (inst, def) => { $ZodIntersection2.init(inst, def); ZodType22.init(inst, def); }); function intersection3(left, right) { return new ZodIntersection22({ type: "intersection", left, right }); } var ZodRecord22 = /* @__PURE__ */ $constructor2("ZodRecord", (inst, def) => { $ZodRecord2.init(inst, def); ZodType22.init(inst, def); inst.keyType = def.keyType; inst.valueType = def.valueType; }); function record3(keyType, valueType, params) { return new ZodRecord22({ type: "record", keyType, valueType, ...exports_util2.normalizeParams(params) }); } var ZodEnum22 = /* @__PURE__ */ $constructor2("ZodEnum", (inst, def) => { $ZodEnum2.init(inst, def); ZodType22.init(inst, def); inst.enum = def.entries; inst.options = Object.values(def.entries); const keys = new Set(Object.keys(def.entries)); inst.extract = (values, params) => { const newEntries = {}; for (const value of values) { if (keys.has(value)) { newEntries[value] = def.entries[value]; } else throw new Error(`Key ${value} not found in enum`); } return new ZodEnum22({ ...def, checks: [], ...exports_util2.normalizeParams(params), entries: newEntries }); }; inst.exclude = (values, params) => { const newEntries = { ...def.entries }; for (const value of values) { if (keys.has(value)) { delete newEntries[value]; } else throw new Error(`Key ${value} not found in enum`); } return new ZodEnum22({ ...def, checks: [], ...exports_util2.normalizeParams(params), entries: newEntries }); }; }); function _enum2(values, params) { const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values; return new ZodEnum22({ type: "enum", entries, ...exports_util2.normalizeParams(params) }); } var ZodLiteral22 = /* @__PURE__ */ $constructor2("ZodLiteral", (inst, def) => { $ZodLiteral2.init(inst, def); ZodType22.init(inst, def); inst.values = new Set(def.values); Object.defineProperty(inst, "value", { get() { if (def.values.length > 1) { throw new Error("This schema contains multiple valid literal values. Use `.values` instead."); } return def.values[0]; } }); }); function literal3(value, params) { return new ZodLiteral22({ type: "literal", values: Array.isArray(value) ? value : [value], ...exports_util2.normalizeParams(params) }); } var ZodTransform2 = /* @__PURE__ */ $constructor2("ZodTransform", (inst, def) => { $ZodTransform2.init(inst, def); ZodType22.init(inst, def); inst._zod.parse = (payload, _ctx) => { payload.addIssue = (issue22) => { if (typeof issue22 === "string") { payload.issues.push(exports_util2.issue(issue22, payload.value, def)); } else { const _issue = issue22; if (_issue.fatal) _issue.continue = false; _issue.code ?? (_issue.code = "custom"); _issue.input ?? (_issue.input = payload.value); _issue.inst ?? (_issue.inst = inst); _issue.continue ?? (_issue.continue = true); payload.issues.push(exports_util2.issue(_issue)); } }; const output = def.transform(payload.value, payload); if (output instanceof Promise) { return output.then((output2) => { payload.value = output2; return payload; }); } payload.value = output; return payload; }; }); function transform2(fn) { return new ZodTransform2({ type: "transform", transform: fn }); } var ZodOptional22 = /* @__PURE__ */ $constructor2("ZodOptional", (inst, def) => { $ZodOptional2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; }); function optional3(innerType) { return new ZodOptional22({ type: "optional", innerType }); } var ZodNullable22 = /* @__PURE__ */ $constructor2("ZodNullable", (inst, def) => { $ZodNullable2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; }); function nullable3(innerType) { return new ZodNullable22({ type: "nullable", innerType }); } var ZodDefault22 = /* @__PURE__ */ $constructor2("ZodDefault", (inst, def) => { $ZodDefault2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; inst.removeDefault = inst.unwrap; }); function _default2(innerType, defaultValue) { return new ZodDefault22({ type: "default", innerType, get defaultValue() { return typeof defaultValue === "function" ? defaultValue() : defaultValue; } }); } var ZodPrefault2 = /* @__PURE__ */ $constructor2("ZodPrefault", (inst, def) => { $ZodPrefault2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; }); function prefault2(innerType, defaultValue) { return new ZodPrefault2({ type: "prefault", innerType, get defaultValue() { return typeof defaultValue === "function" ? defaultValue() : defaultValue; } }); } var ZodNonOptional2 = /* @__PURE__ */ $constructor2("ZodNonOptional", (inst, def) => { $ZodNonOptional2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; }); function nonoptional2(innerType, params) { return new ZodNonOptional2({ type: "nonoptional", innerType, ...exports_util2.normalizeParams(params) }); } var ZodCatch22 = /* @__PURE__ */ $constructor2("ZodCatch", (inst, def) => { $ZodCatch2.init(inst, def); ZodType22.init(inst, def); inst.unwrap = () => inst._zod.def.innerType; inst.removeCatch = inst.unwrap; }); function _catch2(innerType, catchValue) { return new ZodCatch22({ type: "catch", innerType, catchValue: typeof catchValue === "function" ? catchValue : () => catchValue }); } var ZodPipe2 = /* @__PURE__ */ $constructor2("ZodPipe", (inst, def) => { $ZodPipe2.init(inst, def); ZodType22.init(inst, def); inst.in = def.in; inst.out = def.out; }); function pipe2(in_, out) { return new ZodPipe2({ type: "pipe", in: in_, out }); } var ZodReadonly22 = /* @__PURE__ */ $constructor2("ZodReadonly", (inst, def) => { $ZodReadonly2.init(inst, def); ZodType22.init(inst, def); }); function readonly3(innerType) { return new ZodReadonly22({ type: "readonly", innerType }); } var ZodCustom2 = /* @__PURE__ */ $constructor2("ZodCustom", (inst, def) => { $ZodCustom2.init(inst, def); ZodType22.init(inst, def); }); function check(fn, params) { const ch = new $ZodCheck2({ check: "custom", ...exports_util2.normalizeParams(params) }); ch._zod.check = fn; return ch; } function custom2(fn, _params) { return _custom2(ZodCustom2, fn ?? (() => true), _params); } function refine2(fn, _params = {}) { return _refine2(ZodCustom2, fn, _params); } function superRefine2(fn, params) { const ch = check((payload) => { payload.addIssue = (issue22) => { if (typeof issue22 === "string") { payload.issues.push(exports_util2.issue(issue22, payload.value, ch._zod.def)); } else { const _issue = issue22; if (_issue.fatal) _issue.continue = false; _issue.code ?? (_issue.code = "custom"); _issue.input ?? (_issue.input = payload.value); _issue.inst ?? (_issue.inst = ch); _issue.continue ?? (_issue.continue = !ch._zod.def.abort); payload.issues.push(exports_util2.issue(_issue)); } }; return fn(payload.value, payload); }, params); return ch; } function preprocess2(fn, schema) { return pipe2(transform2(fn), schema); } config2(en_default22()); var RELATED_TASK_META_KEY2 = "io.modelcontextprotocol/related-task"; var JSONRPC_VERSION2 = "2.0"; var AssertObjectSchema2 = custom2((v) => v !== null && (typeof v === "object" || typeof v === "function")); var ProgressTokenSchema2 = union3([string22(), number22().int()]); var CursorSchema2 = string22(); var TaskCreationParamsSchema2 = looseObject2({ ttl: union3([number22(), _null32()]).optional(), pollInterval: number22().optional() }); var RelatedTaskMetadataSchema2 = looseObject2({ taskId: string22() }); var RequestMetaSchema2 = looseObject2({ progressToken: ProgressTokenSchema2.optional(), [RELATED_TASK_META_KEY2]: RelatedTaskMetadataSchema2.optional() }); var BaseRequestParamsSchema2 = looseObject2({ task: TaskCreationParamsSchema2.optional(), _meta: RequestMetaSchema2.optional() }); var RequestSchema2 = object22({ method: string22(), params: BaseRequestParamsSchema2.optional() }); var NotificationsParamsSchema2 = looseObject2({ _meta: object22({ [RELATED_TASK_META_KEY2]: optional3(RelatedTaskMetadataSchema2) }).passthrough().optional() }); var NotificationSchema2 = object22({ method: string22(), params: NotificationsParamsSchema2.optional() }); var ResultSchema2 = looseObject2({ _meta: looseObject2({ [RELATED_TASK_META_KEY2]: RelatedTaskMetadataSchema2.optional() }).optional() }); var RequestIdSchema2 = union3([string22(), number22().int()]); var JSONRPCRequestSchema2 = object22({ jsonrpc: literal3(JSONRPC_VERSION2), id: RequestIdSchema2, ...RequestSchema2.shape }).strict(); var JSONRPCNotificationSchema2 = object22({ jsonrpc: literal3(JSONRPC_VERSION2), ...NotificationSchema2.shape }).strict(); var JSONRPCResponseSchema2 = object22({ jsonrpc: literal3(JSONRPC_VERSION2), id: RequestIdSchema2, result: ResultSchema2 }).strict(); var ErrorCode2; (function(ErrorCode22) { ErrorCode22[ErrorCode22["ConnectionClosed"] = -32000] = "ConnectionClosed"; ErrorCode22[ErrorCode22["RequestTimeout"] = -32001] = "RequestTimeout"; ErrorCode22[ErrorCode22["ParseError"] = -32700] = "ParseError"; ErrorCode22[ErrorCode22["InvalidRequest"] = -32600] = "InvalidRequest"; ErrorCode22[ErrorCode22["MethodNotFound"] = -32601] = "MethodNotFound"; ErrorCode22[ErrorCode22["InvalidParams"] = -32602] = "InvalidParams"; ErrorCode22[ErrorCode22["InternalError"] = -32603] = "InternalError"; ErrorCode22[ErrorCode22["UrlElicitationRequired"] = -32042] = "UrlElicitationRequired"; })(ErrorCode2 || (ErrorCode2 = {})); var JSONRPCErrorSchema = object22({ jsonrpc: literal3(JSONRPC_VERSION2), id: RequestIdSchema2, error: object22({ code: number22().int(), message: string22(), data: optional3(unknown3()) }) }).strict(); var JSONRPCMessageSchema2 = union3([JSONRPCRequestSchema2, JSONRPCNotificationSchema2, JSONRPCResponseSchema2, JSONRPCErrorSchema]); var EmptyResultSchema2 = ResultSchema2.strict(); var CancelledNotificationParamsSchema2 = NotificationsParamsSchema2.extend({ requestId: RequestIdSchema2, reason: string22().optional() }); var CancelledNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/cancelled"), params: CancelledNotificationParamsSchema2 }); var IconSchema2 = object22({ src: string22(), mimeType: string22().optional(), sizes: array3(string22()).optional() }); var IconsSchema2 = object22({ icons: array3(IconSchema2).optional() }); var BaseMetadataSchema2 = object22({ name: string22(), title: string22().optional() }); var ImplementationSchema2 = BaseMetadataSchema2.extend({ ...BaseMetadataSchema2.shape, ...IconsSchema2.shape, version: string22(), websiteUrl: string22().optional() }); var FormElicitationCapabilitySchema2 = intersection3(object22({ applyDefaults: boolean22().optional() }), record3(string22(), unknown3())); var ElicitationCapabilitySchema2 = preprocess2((value) => { if (value && typeof value === "object" && !Array.isArray(value)) { if (Object.keys(value).length === 0) { return { form: {} }; } } return value; }, intersection3(object22({ form: FormElicitationCapabilitySchema2.optional(), url: AssertObjectSchema2.optional() }), record3(string22(), unknown3()).optional())); var ClientTasksCapabilitySchema2 = object22({ list: optional3(object22({}).passthrough()), cancel: optional3(object22({}).passthrough()), requests: optional3(object22({ sampling: optional3(object22({ createMessage: optional3(object22({}).passthrough()) }).passthrough()), elicitation: optional3(object22({ create: optional3(object22({}).passthrough()) }).passthrough()) }).passthrough()) }).passthrough(); var ServerTasksCapabilitySchema2 = object22({ list: optional3(object22({}).passthrough()), cancel: optional3(object22({}).passthrough()), requests: optional3(object22({ tools: optional3(object22({ call: optional3(object22({}).passthrough()) }).passthrough()) }).passthrough()) }).passthrough(); var ClientCapabilitiesSchema2 = object22({ experimental: record3(string22(), AssertObjectSchema2).optional(), sampling: object22({ context: AssertObjectSchema2.optional(), tools: AssertObjectSchema2.optional() }).optional(), elicitation: ElicitationCapabilitySchema2.optional(), roots: object22({ listChanged: boolean22().optional() }).optional(), tasks: optional3(ClientTasksCapabilitySchema2) }); var InitializeRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ protocolVersion: string22(), capabilities: ClientCapabilitiesSchema2, clientInfo: ImplementationSchema2 }); var InitializeRequestSchema2 = RequestSchema2.extend({ method: literal3("initialize"), params: InitializeRequestParamsSchema2 }); var ServerCapabilitiesSchema2 = object22({ experimental: record3(string22(), AssertObjectSchema2).optional(), logging: AssertObjectSchema2.optional(), completions: AssertObjectSchema2.optional(), prompts: optional3(object22({ listChanged: optional3(boolean22()) })), resources: object22({ subscribe: boolean22().optional(), listChanged: boolean22().optional() }).optional(), tools: object22({ listChanged: boolean22().optional() }).optional(), tasks: optional3(ServerTasksCapabilitySchema2) }).passthrough(); var InitializeResultSchema2 = ResultSchema2.extend({ protocolVersion: string22(), capabilities: ServerCapabilitiesSchema2, serverInfo: ImplementationSchema2, instructions: string22().optional() }); var InitializedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/initialized") }); var PingRequestSchema2 = RequestSchema2.extend({ method: literal3("ping") }); var ProgressSchema2 = object22({ progress: number22(), total: optional3(number22()), message: optional3(string22()) }); var ProgressNotificationParamsSchema2 = object22({ ...NotificationsParamsSchema2.shape, ...ProgressSchema2.shape, progressToken: ProgressTokenSchema2 }); var ProgressNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/progress"), params: ProgressNotificationParamsSchema2 }); var PaginatedRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ cursor: CursorSchema2.optional() }); var PaginatedRequestSchema2 = RequestSchema2.extend({ params: PaginatedRequestParamsSchema2.optional() }); var PaginatedResultSchema2 = ResultSchema2.extend({ nextCursor: optional3(CursorSchema2) }); var TaskSchema2 = object22({ taskId: string22(), status: _enum2(["working", "input_required", "completed", "failed", "cancelled"]), ttl: union3([number22(), _null32()]), createdAt: string22(), lastUpdatedAt: string22(), pollInterval: optional3(number22()), statusMessage: optional3(string22()) }); var CreateTaskResultSchema2 = ResultSchema2.extend({ task: TaskSchema2 }); var TaskStatusNotificationParamsSchema2 = NotificationsParamsSchema2.merge(TaskSchema2); var TaskStatusNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/tasks/status"), params: TaskStatusNotificationParamsSchema2 }); var GetTaskRequestSchema2 = RequestSchema2.extend({ method: literal3("tasks/get"), params: BaseRequestParamsSchema2.extend({ taskId: string22() }) }); var GetTaskResultSchema2 = ResultSchema2.merge(TaskSchema2); var GetTaskPayloadRequestSchema2 = RequestSchema2.extend({ method: literal3("tasks/result"), params: BaseRequestParamsSchema2.extend({ taskId: string22() }) }); var ListTasksRequestSchema2 = PaginatedRequestSchema2.extend({ method: literal3("tasks/list") }); var ListTasksResultSchema2 = PaginatedResultSchema2.extend({ tasks: array3(TaskSchema2) }); var CancelTaskRequestSchema2 = RequestSchema2.extend({ method: literal3("tasks/cancel"), params: BaseRequestParamsSchema2.extend({ taskId: string22() }) }); var CancelTaskResultSchema2 = ResultSchema2.merge(TaskSchema2); var ResourceContentsSchema2 = object22({ uri: string22(), mimeType: optional3(string22()), _meta: record3(string22(), unknown3()).optional() }); var TextResourceContentsSchema2 = ResourceContentsSchema2.extend({ text: string22() }); var Base64Schema2 = string22().refine((val) => { try { atob(val); return true; } catch (_a2) { return false; } }, { message: "Invalid Base64 string" }); var BlobResourceContentsSchema2 = ResourceContentsSchema2.extend({ blob: Base64Schema2 }); var AnnotationsSchema2 = object22({ audience: array3(_enum2(["user", "assistant"])).optional(), priority: number22().min(0).max(1).optional(), lastModified: exports_iso2.datetime({ offset: true }).optional() }); var ResourceSchema2 = object22({ ...BaseMetadataSchema2.shape, ...IconsSchema2.shape, uri: string22(), description: optional3(string22()), mimeType: optional3(string22()), annotations: AnnotationsSchema2.optional(), _meta: optional3(looseObject2({})) }); var ResourceTemplateSchema2 = object22({ ...BaseMetadataSchema2.shape, ...IconsSchema2.shape, uriTemplate: string22(), description: optional3(string22()), mimeType: optional3(string22()), annotations: AnnotationsSchema2.optional(), _meta: optional3(looseObject2({})) }); var ListResourcesRequestSchema2 = PaginatedRequestSchema2.extend({ method: literal3("resources/list") }); var ListResourcesResultSchema2 = PaginatedResultSchema2.extend({ resources: array3(ResourceSchema2) }); var ListResourceTemplatesRequestSchema2 = PaginatedRequestSchema2.extend({ method: literal3("resources/templates/list") }); var ListResourceTemplatesResultSchema2 = PaginatedResultSchema2.extend({ resourceTemplates: array3(ResourceTemplateSchema2) }); var ResourceRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ uri: string22() }); var ReadResourceRequestParamsSchema2 = ResourceRequestParamsSchema2; var ReadResourceRequestSchema2 = RequestSchema2.extend({ method: literal3("resources/read"), params: ReadResourceRequestParamsSchema2 }); var ReadResourceResultSchema2 = ResultSchema2.extend({ contents: array3(union3([TextResourceContentsSchema2, BlobResourceContentsSchema2])) }); var ResourceListChangedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/resources/list_changed") }); var SubscribeRequestParamsSchema2 = ResourceRequestParamsSchema2; var SubscribeRequestSchema2 = RequestSchema2.extend({ method: literal3("resources/subscribe"), params: SubscribeRequestParamsSchema2 }); var UnsubscribeRequestParamsSchema2 = ResourceRequestParamsSchema2; var UnsubscribeRequestSchema2 = RequestSchema2.extend({ method: literal3("resources/unsubscribe"), params: UnsubscribeRequestParamsSchema2 }); var ResourceUpdatedNotificationParamsSchema2 = NotificationsParamsSchema2.extend({ uri: string22() }); var ResourceUpdatedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/resources/updated"), params: ResourceUpdatedNotificationParamsSchema2 }); var PromptArgumentSchema2 = object22({ name: string22(), description: optional3(string22()), required: optional3(boolean22()) }); var PromptSchema2 = object22({ ...BaseMetadataSchema2.shape, ...IconsSchema2.shape, description: optional3(string22()), arguments: optional3(array3(PromptArgumentSchema2)), _meta: optional3(looseObject2({})) }); var ListPromptsRequestSchema2 = PaginatedRequestSchema2.extend({ method: literal3("prompts/list") }); var ListPromptsResultSchema2 = PaginatedResultSchema2.extend({ prompts: array3(PromptSchema2) }); var GetPromptRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ name: string22(), arguments: record3(string22(), string22()).optional() }); var GetPromptRequestSchema2 = RequestSchema2.extend({ method: literal3("prompts/get"), params: GetPromptRequestParamsSchema2 }); var TextContentSchema2 = object22({ type: literal3("text"), text: string22(), annotations: AnnotationsSchema2.optional(), _meta: record3(string22(), unknown3()).optional() }); var ImageContentSchema2 = object22({ type: literal3("image"), data: Base64Schema2, mimeType: string22(), annotations: AnnotationsSchema2.optional(), _meta: record3(string22(), unknown3()).optional() }); var AudioContentSchema2 = object22({ type: literal3("audio"), data: Base64Schema2, mimeType: string22(), annotations: AnnotationsSchema2.optional(), _meta: record3(string22(), unknown3()).optional() }); var ToolUseContentSchema2 = object22({ type: literal3("tool_use"), name: string22(), id: string22(), input: object22({}).passthrough(), _meta: optional3(object22({}).passthrough()) }).passthrough(); var EmbeddedResourceSchema2 = object22({ type: literal3("resource"), resource: union3([TextResourceContentsSchema2, BlobResourceContentsSchema2]), annotations: AnnotationsSchema2.optional(), _meta: record3(string22(), unknown3()).optional() }); var ResourceLinkSchema2 = ResourceSchema2.extend({ type: literal3("resource_link") }); var ContentBlockSchema2 = union3([ TextContentSchema2, ImageContentSchema2, AudioContentSchema2, ResourceLinkSchema2, EmbeddedResourceSchema2 ]); var PromptMessageSchema2 = object22({ role: _enum2(["user", "assistant"]), content: ContentBlockSchema2 }); var GetPromptResultSchema2 = ResultSchema2.extend({ description: optional3(string22()), messages: array3(PromptMessageSchema2) }); var PromptListChangedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/prompts/list_changed") }); var ToolAnnotationsSchema2 = object22({ title: string22().optional(), readOnlyHint: boolean22().optional(), destructiveHint: boolean22().optional(), idempotentHint: boolean22().optional(), openWorldHint: boolean22().optional() }); var ToolExecutionSchema2 = object22({ taskSupport: _enum2(["required", "optional", "forbidden"]).optional() }); var ToolSchema2 = object22({ ...BaseMetadataSchema2.shape, ...IconsSchema2.shape, description: string22().optional(), inputSchema: object22({ type: literal3("object"), properties: record3(string22(), AssertObjectSchema2).optional(), required: array3(string22()).optional() }).catchall(unknown3()), outputSchema: object22({ type: literal3("object"), properties: record3(string22(), AssertObjectSchema2).optional(), required: array3(string22()).optional() }).catchall(unknown3()).optional(), annotations: optional3(ToolAnnotationsSchema2), execution: optional3(ToolExecutionSchema2), _meta: record3(string22(), unknown3()).optional() }); var ListToolsRequestSchema2 = PaginatedRequestSchema2.extend({ method: literal3("tools/list") }); var ListToolsResultSchema2 = PaginatedResultSchema2.extend({ tools: array3(ToolSchema2) }); var CallToolResultSchema2 = ResultSchema2.extend({ content: array3(ContentBlockSchema2).default([]), structuredContent: record3(string22(), unknown3()).optional(), isError: optional3(boolean22()) }); var CompatibilityCallToolResultSchema2 = CallToolResultSchema2.or(ResultSchema2.extend({ toolResult: unknown3() })); var CallToolRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ name: string22(), arguments: optional3(record3(string22(), unknown3())) }); var CallToolRequestSchema2 = RequestSchema2.extend({ method: literal3("tools/call"), params: CallToolRequestParamsSchema2 }); var ToolListChangedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/tools/list_changed") }); var LoggingLevelSchema2 = _enum2(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]); var SetLevelRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ level: LoggingLevelSchema2 }); var SetLevelRequestSchema2 = RequestSchema2.extend({ method: literal3("logging/setLevel"), params: SetLevelRequestParamsSchema2 }); var LoggingMessageNotificationParamsSchema2 = NotificationsParamsSchema2.extend({ level: LoggingLevelSchema2, logger: string22().optional(), data: unknown3() }); var LoggingMessageNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/message"), params: LoggingMessageNotificationParamsSchema2 }); var ModelHintSchema2 = object22({ name: string22().optional() }); var ModelPreferencesSchema2 = object22({ hints: optional3(array3(ModelHintSchema2)), costPriority: optional3(number22().min(0).max(1)), speedPriority: optional3(number22().min(0).max(1)), intelligencePriority: optional3(number22().min(0).max(1)) }); var ToolChoiceSchema2 = object22({ mode: optional3(_enum2(["auto", "required", "none"])) }); var ToolResultContentSchema2 = object22({ type: literal3("tool_result"), toolUseId: string22().describe("The unique identifier for the corresponding tool call."), content: array3(ContentBlockSchema2).default([]), structuredContent: object22({}).passthrough().optional(), isError: optional3(boolean22()), _meta: optional3(object22({}).passthrough()) }).passthrough(); var SamplingContentSchema2 = discriminatedUnion2("type", [TextContentSchema2, ImageContentSchema2, AudioContentSchema2]); var SamplingMessageContentBlockSchema2 = discriminatedUnion2("type", [ TextContentSchema2, ImageContentSchema2, AudioContentSchema2, ToolUseContentSchema2, ToolResultContentSchema2 ]); var SamplingMessageSchema2 = object22({ role: _enum2(["user", "assistant"]), content: union3([SamplingMessageContentBlockSchema2, array3(SamplingMessageContentBlockSchema2)]), _meta: optional3(object22({}).passthrough()) }).passthrough(); var CreateMessageRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ messages: array3(SamplingMessageSchema2), modelPreferences: ModelPreferencesSchema2.optional(), systemPrompt: string22().optional(), includeContext: _enum2(["none", "thisServer", "allServers"]).optional(), temperature: number22().optional(), maxTokens: number22().int(), stopSequences: array3(string22()).optional(), metadata: AssertObjectSchema2.optional(), tools: optional3(array3(ToolSchema2)), toolChoice: optional3(ToolChoiceSchema2) }); var CreateMessageRequestSchema2 = RequestSchema2.extend({ method: literal3("sampling/createMessage"), params: CreateMessageRequestParamsSchema2 }); var CreateMessageResultSchema2 = ResultSchema2.extend({ model: string22(), stopReason: optional3(_enum2(["endTurn", "stopSequence", "maxTokens"]).or(string22())), role: _enum2(["user", "assistant"]), content: SamplingContentSchema2 }); var CreateMessageResultWithToolsSchema2 = ResultSchema2.extend({ model: string22(), stopReason: optional3(_enum2(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(string22())), role: _enum2(["user", "assistant"]), content: union3([SamplingMessageContentBlockSchema2, array3(SamplingMessageContentBlockSchema2)]) }); var BooleanSchemaSchema2 = object22({ type: literal3("boolean"), title: string22().optional(), description: string22().optional(), default: boolean22().optional() }); var StringSchemaSchema2 = object22({ type: literal3("string"), title: string22().optional(), description: string22().optional(), minLength: number22().optional(), maxLength: number22().optional(), format: _enum2(["email", "uri", "date", "date-time"]).optional(), default: string22().optional() }); var NumberSchemaSchema2 = object22({ type: _enum2(["number", "integer"]), title: string22().optional(), description: string22().optional(), minimum: number22().optional(), maximum: number22().optional(), default: number22().optional() }); var UntitledSingleSelectEnumSchemaSchema2 = object22({ type: literal3("string"), title: string22().optional(), description: string22().optional(), enum: array3(string22()), default: string22().optional() }); var TitledSingleSelectEnumSchemaSchema2 = object22({ type: literal3("string"), title: string22().optional(), description: string22().optional(), oneOf: array3(object22({ const: string22(), title: string22() })), default: string22().optional() }); var LegacyTitledEnumSchemaSchema2 = object22({ type: literal3("string"), title: string22().optional(), description: string22().optional(), enum: array3(string22()), enumNames: array3(string22()).optional(), default: string22().optional() }); var SingleSelectEnumSchemaSchema2 = union3([UntitledSingleSelectEnumSchemaSchema2, TitledSingleSelectEnumSchemaSchema2]); var UntitledMultiSelectEnumSchemaSchema2 = object22({ type: literal3("array"), title: string22().optional(), description: string22().optional(), minItems: number22().optional(), maxItems: number22().optional(), items: object22({ type: literal3("string"), enum: array3(string22()) }), default: array3(string22()).optional() }); var TitledMultiSelectEnumSchemaSchema2 = object22({ type: literal3("array"), title: string22().optional(), description: string22().optional(), minItems: number22().optional(), maxItems: number22().optional(), items: object22({ anyOf: array3(object22({ const: string22(), title: string22() })) }), default: array3(string22()).optional() }); var MultiSelectEnumSchemaSchema2 = union3([UntitledMultiSelectEnumSchemaSchema2, TitledMultiSelectEnumSchemaSchema2]); var EnumSchemaSchema2 = union3([LegacyTitledEnumSchemaSchema2, SingleSelectEnumSchemaSchema2, MultiSelectEnumSchemaSchema2]); var PrimitiveSchemaDefinitionSchema2 = union3([EnumSchemaSchema2, BooleanSchemaSchema2, StringSchemaSchema2, NumberSchemaSchema2]); var ElicitRequestFormParamsSchema2 = BaseRequestParamsSchema2.extend({ mode: literal3("form").optional(), message: string22(), requestedSchema: object22({ type: literal3("object"), properties: record3(string22(), PrimitiveSchemaDefinitionSchema2), required: array3(string22()).optional() }) }); var ElicitRequestURLParamsSchema2 = BaseRequestParamsSchema2.extend({ mode: literal3("url"), message: string22(), elicitationId: string22(), url: string22().url() }); var ElicitRequestParamsSchema2 = union3([ElicitRequestFormParamsSchema2, ElicitRequestURLParamsSchema2]); var ElicitRequestSchema2 = RequestSchema2.extend({ method: literal3("elicitation/create"), params: ElicitRequestParamsSchema2 }); var ElicitationCompleteNotificationParamsSchema2 = NotificationsParamsSchema2.extend({ elicitationId: string22() }); var ElicitationCompleteNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/elicitation/complete"), params: ElicitationCompleteNotificationParamsSchema2 }); var ElicitResultSchema2 = ResultSchema2.extend({ action: _enum2(["accept", "decline", "cancel"]), content: preprocess2((val) => val === null ? undefined : val, record3(string22(), union3([string22(), number22(), boolean22(), array3(string22())])).optional()) }); var ResourceTemplateReferenceSchema2 = object22({ type: literal3("ref/resource"), uri: string22() }); var PromptReferenceSchema2 = object22({ type: literal3("ref/prompt"), name: string22() }); var CompleteRequestParamsSchema2 = BaseRequestParamsSchema2.extend({ ref: union3([PromptReferenceSchema2, ResourceTemplateReferenceSchema2]), argument: object22({ name: string22(), value: string22() }), context: object22({ arguments: record3(string22(), string22()).optional() }).optional() }); var CompleteRequestSchema2 = RequestSchema2.extend({ method: literal3("completion/complete"), params: CompleteRequestParamsSchema2 }); var CompleteResultSchema2 = ResultSchema2.extend({ completion: looseObject2({ values: array3(string22()).max(100), total: optional3(number22().int()), hasMore: optional3(boolean22()) }) }); var RootSchema2 = object22({ uri: string22().startsWith("file://"), name: string22().optional(), _meta: record3(string22(), unknown3()).optional() }); var ListRootsRequestSchema2 = RequestSchema2.extend({ method: literal3("roots/list") }); var ListRootsResultSchema2 = ResultSchema2.extend({ roots: array3(RootSchema2) }); var RootsListChangedNotificationSchema2 = NotificationSchema2.extend({ method: literal3("notifications/roots/list_changed") }); var ClientRequestSchema2 = union3([ PingRequestSchema2, InitializeRequestSchema2, CompleteRequestSchema2, SetLevelRequestSchema2, GetPromptRequestSchema2, ListPromptsRequestSchema2, ListResourcesRequestSchema2, ListResourceTemplatesRequestSchema2, ReadResourceRequestSchema2, SubscribeRequestSchema2, UnsubscribeRequestSchema2, CallToolRequestSchema2, ListToolsRequestSchema2, GetTaskRequestSchema2, GetTaskPayloadRequestSchema2, ListTasksRequestSchema2 ]); var ClientNotificationSchema2 = union3([ CancelledNotificationSchema2, ProgressNotificationSchema2, InitializedNotificationSchema2, RootsListChangedNotificationSchema2, TaskStatusNotificationSchema2 ]); var ClientResultSchema2 = union3([ EmptyResultSchema2, CreateMessageResultSchema2, CreateMessageResultWithToolsSchema2, ElicitResultSchema2, ListRootsResultSchema2, GetTaskResultSchema2, ListTasksResultSchema2, CreateTaskResultSchema2 ]); var ServerRequestSchema2 = union3([ PingRequestSchema2, CreateMessageRequestSchema2, ElicitRequestSchema2, ListRootsRequestSchema2, GetTaskRequestSchema2, GetTaskPayloadRequestSchema2, ListTasksRequestSchema2 ]); var ServerNotificationSchema2 = union3([ CancelledNotificationSchema2, ProgressNotificationSchema2, LoggingMessageNotificationSchema2, ResourceUpdatedNotificationSchema2, ResourceListChangedNotificationSchema2, ToolListChangedNotificationSchema2, PromptListChangedNotificationSchema2, TaskStatusNotificationSchema2, ElicitationCompleteNotificationSchema2 ]); var ServerResultSchema2 = union3([ EmptyResultSchema2, InitializeResultSchema2, CompleteResultSchema2, GetPromptResultSchema2, ListPromptsResultSchema2, ListResourcesResultSchema2, ListResourceTemplatesResultSchema2, ReadResourceResultSchema2, CallToolResultSchema2, ListToolsResultSchema2, GetTaskResultSchema2, ListTasksResultSchema2, CreateTaskResultSchema2 ]); var ignoreOverride2 = Symbol("Let zodToJsonSchema decide on which parser to use"); var ALPHA_NUMERIC2 = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789"); var import_ajv2 = __toESM2(require_ajv2(), 1); var import_ajv_formats2 = __toESM2(require_dist2(), 1); var COMPLETABLE_SYMBOL = Symbol.for("mcp.completable"); var McpZodTypeKind; (function(McpZodTypeKind2) { McpZodTypeKind2["Completable"] = "McpCompletable"; })(McpZodTypeKind || (McpZodTypeKind = {})); function query({ prompt, options }) { const { systemPrompt, settingSources, sandbox, ...rest } = options ?? {}; let customSystemPrompt; let appendSystemPrompt; if (systemPrompt === undefined) { customSystemPrompt = ""; } else if (typeof systemPrompt === "string") { customSystemPrompt = systemPrompt; } else if (systemPrompt.type === "preset") { appendSystemPrompt = systemPrompt.append; } let pathToClaudeCodeExecutable = rest.pathToClaudeCodeExecutable; if (!pathToClaudeCodeExecutable) { const filename = fileURLToPath2(import.meta.url); const dirname22 = join52(filename, ".."); pathToClaudeCodeExecutable = join52(dirname22, "cli.js"); } process.env.CLAUDE_AGENT_SDK_VERSION = "0.1.77"; const { abortController = createAbortController(), additionalDirectories = [], agents, allowedTools = [], betas, canUseTool, continue: continueConversation, cwd: cwd2, disallowedTools = [], tools, env, executable = isRunningWithBun() ? "bun" : "node", executableArgs = [], extraArgs = {}, fallbackModel, enableFileCheckpointing, forkSession, hooks, includePartialMessages, persistSession, maxThinkingTokens, maxTurns, maxBudgetUsd, mcpServers, model, outputFormat, permissionMode = "default", allowDangerouslySkipPermissions = false, permissionPromptToolName, plugins, resume, resumeSessionAt, stderr, strictMcpConfig } = rest; const jsonSchema = outputFormat?.type === "json_schema" ? outputFormat.schema : undefined; let processEnv = env; if (!processEnv) { processEnv = { ...process.env }; } if (!processEnv.CLAUDE_CODE_ENTRYPOINT) { processEnv.CLAUDE_CODE_ENTRYPOINT = "sdk-ts"; } if (enableFileCheckpointing) { processEnv.CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING = "true"; } if (!pathToClaudeCodeExecutable) { throw new Error("pathToClaudeCodeExecutable is required"); } const allMcpServers = {}; const sdkMcpServers = new Map; if (mcpServers) { for (const [name, config22] of Object.entries(mcpServers)) { if (config22.type === "sdk" && "instance" in config22) { sdkMcpServers.set(name, config22.instance); allMcpServers[name] = { type: "sdk", name }; } else { allMcpServers[name] = config22; } } } const isSingleUserTurn = typeof prompt === "string"; const transport = new ProcessTransport({ abortController, additionalDirectories, betas, cwd: cwd2, executable, executableArgs, extraArgs, pathToClaudeCodeExecutable, env: processEnv, forkSession, stderr, maxThinkingTokens, maxTurns, maxBudgetUsd, model, fallbackModel, jsonSchema, permissionMode, allowDangerouslySkipPermissions, permissionPromptToolName, continueConversation, resume, resumeSessionAt, settingSources: settingSources ?? [], allowedTools, disallowedTools, tools, mcpServers: allMcpServers, strictMcpConfig, canUseTool: !!canUseTool, hooks: !!hooks, includePartialMessages, persistSession, plugins, sandbox, spawnClaudeCodeProcess: rest.spawnClaudeCodeProcess }); const initConfig = { systemPrompt: customSystemPrompt, appendSystemPrompt, agents }; const queryInstance = new Query(transport, isSingleUserTurn, canUseTool, hooks, abortController, sdkMcpServers, jsonSchema, initConfig); if (typeof prompt === "string") { transport.write(jsonStringify({ type: "user", session_id: "", message: { role: "user", content: [{ type: "text", text: prompt }] }, parent_tool_use_id: null }) + ` `); } else { queryInstance.streamInput(prompt); } return queryInstance; } // src/services/worker/SDKAgent.ts class SDKAgent { dbManager; sessionManager; constructor(dbManager, sessionManager) { this.dbManager = dbManager; this.sessionManager = sessionManager; } async startSession(session, worker) { const cwdTracker = { lastCwd: undefined }; const claudePath = this.findClaudeExecutable(); const modelId = this.getModelId(); const disallowedTools = [ "Bash", "Read", "Write", "Edit", "Grep", "Glob", "WebFetch", "WebSearch", "Task", "NotebookEdit", "AskUserQuestion", "TodoWrite" ]; const messageGenerator = this.createMessageGenerator(session, cwdTracker); const hasRealMemorySessionId = !!session.memorySessionId; const shouldResume = hasRealMemorySessionId && session.lastPromptNumber > 1 && !session.forceInit; if (session.forceInit) { logger.info("SDK", "forceInit flag set, starting fresh SDK session", { sessionDbId: session.sessionDbId, previousMemorySessionId: session.memorySessionId }); session.forceInit = false; } const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const maxConcurrent = parseInt(settings.CLAUDE_MEM_MAX_CONCURRENT_AGENTS, 10) || 2; await waitForSlot(maxConcurrent); const isolatedEnv = sanitizeEnv(buildIsolatedEnv()); const authMethod = getAuthMethodDescription(); logger.info("SDK", "Starting SDK query", { sessionDbId: session.sessionDbId, contentSessionId: session.contentSessionId, memorySessionId: session.memorySessionId, hasRealMemorySessionId, shouldResume, resume_parameter: shouldResume ? session.memorySessionId : "(none - fresh start)", lastPromptNumber: session.lastPromptNumber, authMethod }); if (session.lastPromptNumber > 1) { logger.debug("SDK", `[ALIGNMENT] Resume Decision | contentSessionId=${session.contentSessionId} | memorySessionId=${session.memorySessionId} | prompt#=${session.lastPromptNumber} | hasRealMemorySessionId=${hasRealMemorySessionId} | shouldResume=${shouldResume} | resumeWith=${shouldResume ? session.memorySessionId : "NONE"}`); } else { const hasStaleMemoryId = hasRealMemorySessionId; logger.debug("SDK", `[ALIGNMENT] First Prompt (INIT) | contentSessionId=${session.contentSessionId} | prompt#=${session.lastPromptNumber} | hasStaleMemoryId=${hasStaleMemoryId} | action=START_FRESH | Will capture new memorySessionId from SDK response`); if (hasStaleMemoryId) { logger.warn("SDK", `Skipping resume for INIT prompt despite existing memorySessionId=${session.memorySessionId} - SDK context was lost (worker restart or crash recovery)`); } } ensureDir(OBSERVER_SESSIONS_DIR); const queryResult = query({ prompt: messageGenerator, options: { model: modelId, cwd: OBSERVER_SESSIONS_DIR, ...shouldResume && { resume: session.memorySessionId }, disallowedTools, abortController: session.abortController, pathToClaudeCodeExecutable: claudePath, spawnClaudeCodeProcess: createPidCapturingSpawn(session.sessionDbId), env: isolatedEnv } }); try { for await (const message of queryResult) { if (message.session_id && message.session_id !== session.memorySessionId) { const previousId = session.memorySessionId; session.memorySessionId = message.session_id; this.dbManager.getSessionStore().ensureMemorySessionIdRegistered(session.sessionDbId, message.session_id); const verification = this.dbManager.getSessionStore().getSessionById(session.sessionDbId); const dbVerified = verification?.memory_session_id === message.session_id; const logMessage = previousId ? `MEMORY_ID_CHANGED | sessionDbId=${session.sessionDbId} | from=${previousId} | to=${message.session_id} | dbVerified=${dbVerified}` : `MEMORY_ID_CAPTURED | sessionDbId=${session.sessionDbId} | memorySessionId=${message.session_id} | dbVerified=${dbVerified}`; logger.info("SESSION", logMessage, { sessionId: session.sessionDbId, memorySessionId: message.session_id, previousId }); if (!dbVerified) { logger.error("SESSION", `MEMORY_ID_MISMATCH | sessionDbId=${session.sessionDbId} | expected=${message.session_id} | got=${verification?.memory_session_id}`, { sessionId: session.sessionDbId }); } logger.debug("SDK", `[ALIGNMENT] ${previousId ? "Updated" : "Captured"} | contentSessionId=${session.contentSessionId} → memorySessionId=${message.session_id} | Future prompts will resume with this ID`); } if (message.type === "assistant") { const content = message.message.content; const textContent = Array.isArray(content) ? content.filter((c) => c.type === "text").map((c) => c.text).join(` `) : typeof content === "string" ? content : ""; if (textContent.includes("prompt is too long") || textContent.includes("context window")) { logger.error("SDK", "Context overflow detected - terminating session"); session.abortController.abort(); return; } const responseSize = textContent.length; const tokensBeforeResponse = session.cumulativeInputTokens + session.cumulativeOutputTokens; const usage = message.message.usage; if (usage) { session.cumulativeInputTokens += usage.input_tokens || 0; session.cumulativeOutputTokens += usage.output_tokens || 0; if (usage.cache_creation_input_tokens) { session.cumulativeInputTokens += usage.cache_creation_input_tokens; } logger.debug("SDK", "Token usage captured", { sessionId: session.sessionDbId, inputTokens: usage.input_tokens, outputTokens: usage.output_tokens, cacheCreation: usage.cache_creation_input_tokens || 0, cacheRead: usage.cache_read_input_tokens || 0, cumulativeInput: session.cumulativeInputTokens, cumulativeOutput: session.cumulativeOutputTokens }); } const discoveryTokens = session.cumulativeInputTokens + session.cumulativeOutputTokens - tokensBeforeResponse; const originalTimestamp = session.earliestPendingTimestamp; if (responseSize > 0) { const truncatedResponse = responseSize > 100 ? textContent.substring(0, 100) + "..." : textContent; logger.dataOut("SDK", `Response received (${responseSize} chars)`, { sessionId: session.sessionDbId, promptNumber: session.lastPromptNumber }, truncatedResponse); } if (typeof textContent === "string" && textContent.includes("Prompt is too long")) { throw new Error("Claude session context overflow: prompt is too long"); } if (typeof textContent === "string" && textContent.includes("Invalid API key")) { throw new Error("Invalid API key: check your API key configuration in ~/.claude-mem/settings.json or ~/.claude-mem/.env"); } await processAgentResponse(textContent, session, this.dbManager, this.sessionManager, worker, discoveryTokens, originalTimestamp, "SDK", cwdTracker.lastCwd); } if (message.type === "result" && message.subtype === "success") {} } } finally { const tracked = getProcessBySession(session.sessionDbId); if (tracked && tracked.process.exitCode === null) { await ensureProcessExit(tracked, 5000); } } const sessionDuration = Date.now() - session.startTime; logger.success("SDK", "Agent completed", { sessionId: session.sessionDbId, duration: `${(sessionDuration / 1000).toFixed(1)}s` }); } async* createMessageGenerator(session, cwdTracker) { const mode = ModeManager.getInstance().getActiveMode(); const isInitPrompt = session.lastPromptNumber === 1; logger.info("SDK", "Creating message generator", { sessionDbId: session.sessionDbId, contentSessionId: session.contentSessionId, lastPromptNumber: session.lastPromptNumber, isInitPrompt, promptType: isInitPrompt ? "INIT" : "CONTINUATION" }); const initPrompt = isInitPrompt ? buildInitPrompt(session.project, session.contentSessionId, session.userPrompt, mode) : buildContinuationPrompt(session.userPrompt, session.lastPromptNumber, session.contentSessionId, mode); session.conversationHistory.push({ role: "user", content: initPrompt }); yield { type: "user", message: { role: "user", content: initPrompt }, session_id: session.contentSessionId, parent_tool_use_id: null, isSynthetic: true }; for await (const message of this.sessionManager.getMessageIterator(session.sessionDbId)) { session.processingMessageIds.push(message._persistentId); if (message.cwd) { cwdTracker.lastCwd = message.cwd; } if (message.type === "observation") { if (message.prompt_number !== undefined) { session.lastPromptNumber = message.prompt_number; } const obsPrompt = buildObservationPrompt({ id: 0, tool_name: message.tool_name, tool_input: JSON.stringify(message.tool_input), tool_output: JSON.stringify(message.tool_response), created_at_epoch: Date.now(), cwd: message.cwd }); session.conversationHistory.push({ role: "user", content: obsPrompt }); yield { type: "user", message: { role: "user", content: obsPrompt }, session_id: session.contentSessionId, parent_tool_use_id: null, isSynthetic: true }; } else if (message.type === "summarize") { const summaryPrompt = buildSummaryPrompt({ id: session.sessionDbId, memory_session_id: session.memorySessionId, project: session.project, user_prompt: session.userPrompt, last_assistant_message: message.last_assistant_message || "" }, mode); session.conversationHistory.push({ role: "user", content: summaryPrompt }); yield { type: "user", message: { role: "user", content: summaryPrompt }, session_id: session.contentSessionId, parent_tool_use_id: null, isSynthetic: true }; } } } findClaudeExecutable() { const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); if (settings.CLAUDE_CODE_PATH) { const { existsSync: existsSync14 } = __require("fs"); if (!existsSync14(settings.CLAUDE_CODE_PATH)) { throw new Error(`CLAUDE_CODE_PATH is set to "${settings.CLAUDE_CODE_PATH}" but the file does not exist.`); } return settings.CLAUDE_CODE_PATH; } if (process.platform === "win32") { try { execSync4("where claude.cmd", { encoding: "utf8", windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }); return "claude.cmd"; } catch {} } try { const claudePath = execSync4(process.platform === "win32" ? "where claude" : "which claude", { encoding: "utf8", windowsHide: true, stdio: ["ignore", "pipe", "ignore"] }).trim().split(` `)[0].trim(); if (claudePath) return claudePath; } catch (error3) { logger.debug("SDK", "Claude executable auto-detection failed", {}, error3); } throw new Error(`Claude executable not found. Please either: 1. Add "claude" to your system PATH, or 2. Set CLAUDE_CODE_PATH in ~/.claude-mem/settings.json`); } getModelId() { const settingsPath = path13.join(homedir12(), ".claude-mem", "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); return settings.CLAUDE_MEM_MODEL; } } // src/services/worker/GeminiAgent.ts init_logger(); import path14 from "path"; import { homedir as homedir13 } from "os"; init_SettingsDefaultsManager(); init_ModeManager(); var GEMINI_API_URL = "https://generativelanguage.googleapis.com/v1/models"; var GEMINI_RPM_LIMITS = { "gemini-2.5-flash-lite": 10, "gemini-2.5-flash": 10, "gemini-2.5-pro": 5, "gemini-2.0-flash": 15, "gemini-2.0-flash-lite": 30, "gemini-3-flash": 10, "gemini-3-flash-preview": 5 }; var lastRequestTime = 0; async function enforceRateLimitForModel(model, rateLimitingEnabled) { if (!rateLimitingEnabled) { return; } const rpm = GEMINI_RPM_LIMITS[model] || 5; const minimumDelayMs = Math.ceil(60000 / rpm) + 100; const now = Date.now(); const timeSinceLastRequest = now - lastRequestTime; if (timeSinceLastRequest < minimumDelayMs) { const waitTime = minimumDelayMs - timeSinceLastRequest; logger.debug("SDK", `Rate limiting: waiting ${waitTime}ms before Gemini request`, { model, rpm }); await new Promise((resolve) => setTimeout(resolve, waitTime)); } lastRequestTime = Date.now(); } class GeminiAgent { dbManager; sessionManager; fallbackAgent = null; constructor(dbManager, sessionManager) { this.dbManager = dbManager; this.sessionManager = sessionManager; } setFallbackAgent(agent) { this.fallbackAgent = agent; } async startSession(session, worker) { try { const { apiKey, model, rateLimitingEnabled } = this.getGeminiConfig(); if (!apiKey) { throw new Error("Gemini API key not configured. Set CLAUDE_MEM_GEMINI_API_KEY in settings or GEMINI_API_KEY environment variable."); } if (!session.memorySessionId) { const syntheticMemorySessionId = `gemini-${session.contentSessionId}-${Date.now()}`; session.memorySessionId = syntheticMemorySessionId; this.dbManager.getSessionStore().updateMemorySessionId(session.sessionDbId, syntheticMemorySessionId); logger.info("SESSION", `MEMORY_ID_GENERATED | sessionDbId=${session.sessionDbId} | provider=Gemini`); } const mode = ModeManager.getInstance().getActiveMode(); const initPrompt = session.lastPromptNumber === 1 ? buildInitPrompt(session.project, session.contentSessionId, session.userPrompt, mode) : buildContinuationPrompt(session.userPrompt, session.lastPromptNumber, session.contentSessionId, mode); session.conversationHistory.push({ role: "user", content: initPrompt }); const initResponse = await this.queryGeminiMultiTurn(session.conversationHistory, apiKey, model, rateLimitingEnabled); if (initResponse.content) { session.conversationHistory.push({ role: "assistant", content: initResponse.content }); const tokensUsed = initResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); await processAgentResponse(initResponse.content, session, this.dbManager, this.sessionManager, worker, tokensUsed, null, "Gemini"); } else { logger.error("SDK", "Empty Gemini init response - session may lack context", { sessionId: session.sessionDbId, model }); } let lastCwd; for await (const message of this.sessionManager.getMessageIterator(session.sessionDbId)) { session.processingMessageIds.push(message._persistentId); if (message.cwd) { lastCwd = message.cwd; } const originalTimestamp = session.earliestPendingTimestamp; if (message.type === "observation") { if (message.prompt_number !== undefined) { session.lastPromptNumber = message.prompt_number; } if (!session.memorySessionId) { throw new Error("Cannot process observations: memorySessionId not yet captured. This session may need to be reinitialized."); } const obsPrompt = buildObservationPrompt({ id: 0, tool_name: message.tool_name, tool_input: JSON.stringify(message.tool_input), tool_output: JSON.stringify(message.tool_response), created_at_epoch: originalTimestamp ?? Date.now(), cwd: message.cwd }); session.conversationHistory.push({ role: "user", content: obsPrompt }); const obsResponse = await this.queryGeminiMultiTurn(session.conversationHistory, apiKey, model, rateLimitingEnabled); let tokensUsed = 0; if (obsResponse.content) { session.conversationHistory.push({ role: "assistant", content: obsResponse.content }); tokensUsed = obsResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); } if (obsResponse.content) { await processAgentResponse(obsResponse.content, session, this.dbManager, this.sessionManager, worker, tokensUsed, originalTimestamp, "Gemini", lastCwd); } else { logger.warn("SDK", "Empty Gemini observation response, skipping processing to preserve message", { sessionId: session.sessionDbId, messageId: session.processingMessageIds[session.processingMessageIds.length - 1] }); } } else if (message.type === "summarize") { if (!session.memorySessionId) { throw new Error("Cannot process summary: memorySessionId not yet captured. This session may need to be reinitialized."); } const summaryPrompt = buildSummaryPrompt({ id: session.sessionDbId, memory_session_id: session.memorySessionId, project: session.project, user_prompt: session.userPrompt, last_assistant_message: message.last_assistant_message || "" }, mode); session.conversationHistory.push({ role: "user", content: summaryPrompt }); const summaryResponse = await this.queryGeminiMultiTurn(session.conversationHistory, apiKey, model, rateLimitingEnabled); let tokensUsed = 0; if (summaryResponse.content) { session.conversationHistory.push({ role: "assistant", content: summaryResponse.content }); tokensUsed = summaryResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); } if (summaryResponse.content) { await processAgentResponse(summaryResponse.content, session, this.dbManager, this.sessionManager, worker, tokensUsed, originalTimestamp, "Gemini", lastCwd); } else { logger.warn("SDK", "Empty Gemini summary response, skipping processing to preserve message", { sessionId: session.sessionDbId, messageId: session.processingMessageIds[session.processingMessageIds.length - 1] }); } } } const sessionDuration = Date.now() - session.startTime; logger.success("SDK", "Gemini agent completed", { sessionId: session.sessionDbId, duration: `${(sessionDuration / 1000).toFixed(1)}s`, historyLength: session.conversationHistory.length }); } catch (error3) { if (isAbortError(error3)) { logger.warn("SDK", "Gemini agent aborted", { sessionId: session.sessionDbId }); throw error3; } if (shouldFallbackToClaude(error3) && this.fallbackAgent) { logger.warn("SDK", "Gemini API failed, falling back to Claude SDK", { sessionDbId: session.sessionDbId, error: error3 instanceof Error ? error3.message : String(error3), historyLength: session.conversationHistory.length }); return this.fallbackAgent.startSession(session, worker); } logger.failure("SDK", "Gemini agent error", { sessionDbId: session.sessionDbId }, error3); throw error3; } } conversationToGeminiContents(history) { return history.map((msg) => ({ role: msg.role === "assistant" ? "model" : "user", parts: [{ text: msg.content }] })); } async queryGeminiMultiTurn(history, apiKey, model, rateLimitingEnabled) { const contents = this.conversationToGeminiContents(history); const totalChars = history.reduce((sum, m) => sum + m.content.length, 0); logger.debug("SDK", `Querying Gemini multi-turn (${model})`, { turns: history.length, totalChars }); const url = `${GEMINI_API_URL}/${model}:generateContent?key=${apiKey}`; await enforceRateLimitForModel(model, rateLimitingEnabled); const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contents, generationConfig: { temperature: 0.3, maxOutputTokens: 4096 } }) }); if (!response.ok) { const error3 = await response.text(); throw new Error(`Gemini API error: ${response.status} - ${error3}`); } const data = await response.json(); if (!data.candidates?.[0]?.content?.parts?.[0]?.text) { logger.error("SDK", "Empty response from Gemini"); return { content: "" }; } const content = data.candidates[0].content.parts[0].text; const tokensUsed = data.usageMetadata?.totalTokenCount; return { content, tokensUsed }; } getGeminiConfig() { const settingsPath = path14.join(homedir13(), ".claude-mem", "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); const apiKey = settings.CLAUDE_MEM_GEMINI_API_KEY || getCredential("GEMINI_API_KEY") || ""; const defaultModel = "gemini-2.5-flash"; const configuredModel = settings.CLAUDE_MEM_GEMINI_MODEL || defaultModel; const validModels = [ "gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-2.5-pro", "gemini-2.0-flash", "gemini-2.0-flash-lite", "gemini-3-flash", "gemini-3-flash-preview" ]; let model; if (validModels.includes(configuredModel)) { model = configuredModel; } else { logger.warn("SDK", `Invalid Gemini model "${configuredModel}", falling back to ${defaultModel}`, { configured: configuredModel, validModels }); model = defaultModel; } const rateLimitingEnabled = settings.CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED !== "false"; return { apiKey, model, rateLimitingEnabled }; } } function isGeminiAvailable() { const settingsPath = path14.join(homedir13(), ".claude-mem", "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); return !!(settings.CLAUDE_MEM_GEMINI_API_KEY || getCredential("GEMINI_API_KEY")); } function isGeminiSelected() { const settingsPath = path14.join(homedir13(), ".claude-mem", "settings.json"); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); return settings.CLAUDE_MEM_PROVIDER === "gemini"; } // src/services/worker/OpenRouterAgent.ts init_SettingsDefaultsManager(); init_paths(); init_logger(); init_ModeManager(); var OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"; var DEFAULT_MAX_CONTEXT_MESSAGES = 20; var DEFAULT_MAX_ESTIMATED_TOKENS = 1e5; var CHARS_PER_TOKEN_ESTIMATE = 4; class OpenRouterAgent { dbManager; sessionManager; fallbackAgent = null; constructor(dbManager, sessionManager) { this.dbManager = dbManager; this.sessionManager = sessionManager; } setFallbackAgent(agent) { this.fallbackAgent = agent; } async startSession(session, worker) { try { const { apiKey, model, siteUrl, appName } = this.getOpenRouterConfig(); if (!apiKey) { throw new Error("OpenRouter API key not configured. Set CLAUDE_MEM_OPENROUTER_API_KEY in settings or OPENROUTER_API_KEY environment variable."); } if (!session.memorySessionId) { const syntheticMemorySessionId = `openrouter-${session.contentSessionId}-${Date.now()}`; session.memorySessionId = syntheticMemorySessionId; this.dbManager.getSessionStore().updateMemorySessionId(session.sessionDbId, syntheticMemorySessionId); logger.info("SESSION", `MEMORY_ID_GENERATED | sessionDbId=${session.sessionDbId} | provider=OpenRouter`); } const mode = ModeManager.getInstance().getActiveMode(); const initPrompt = session.lastPromptNumber === 1 ? buildInitPrompt(session.project, session.contentSessionId, session.userPrompt, mode) : buildContinuationPrompt(session.userPrompt, session.lastPromptNumber, session.contentSessionId, mode); session.conversationHistory.push({ role: "user", content: initPrompt }); const initResponse = await this.queryOpenRouterMultiTurn(session.conversationHistory, apiKey, model, siteUrl, appName); if (initResponse.content) { const tokensUsed = initResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); await processAgentResponse(initResponse.content, session, this.dbManager, this.sessionManager, worker, tokensUsed, null, "OpenRouter", undefined); } else { logger.error("SDK", "Empty OpenRouter init response - session may lack context", { sessionId: session.sessionDbId, model }); } let lastCwd; for await (const message of this.sessionManager.getMessageIterator(session.sessionDbId)) { session.processingMessageIds.push(message._persistentId); if (message.cwd) { lastCwd = message.cwd; } const originalTimestamp = session.earliestPendingTimestamp; if (message.type === "observation") { if (message.prompt_number !== undefined) { session.lastPromptNumber = message.prompt_number; } if (!session.memorySessionId) { throw new Error("Cannot process observations: memorySessionId not yet captured. This session may need to be reinitialized."); } const obsPrompt = buildObservationPrompt({ id: 0, tool_name: message.tool_name, tool_input: JSON.stringify(message.tool_input), tool_output: JSON.stringify(message.tool_response), created_at_epoch: originalTimestamp ?? Date.now(), cwd: message.cwd }); session.conversationHistory.push({ role: "user", content: obsPrompt }); const obsResponse = await this.queryOpenRouterMultiTurn(session.conversationHistory, apiKey, model, siteUrl, appName); let tokensUsed = 0; if (obsResponse.content) { tokensUsed = obsResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); } await processAgentResponse(obsResponse.content || "", session, this.dbManager, this.sessionManager, worker, tokensUsed, originalTimestamp, "OpenRouter", lastCwd); } else if (message.type === "summarize") { if (!session.memorySessionId) { throw new Error("Cannot process summary: memorySessionId not yet captured. This session may need to be reinitialized."); } const summaryPrompt = buildSummaryPrompt({ id: session.sessionDbId, memory_session_id: session.memorySessionId, project: session.project, user_prompt: session.userPrompt, last_assistant_message: message.last_assistant_message || "" }, mode); session.conversationHistory.push({ role: "user", content: summaryPrompt }); const summaryResponse = await this.queryOpenRouterMultiTurn(session.conversationHistory, apiKey, model, siteUrl, appName); let tokensUsed = 0; if (summaryResponse.content) { tokensUsed = summaryResponse.tokensUsed || 0; session.cumulativeInputTokens += Math.floor(tokensUsed * 0.7); session.cumulativeOutputTokens += Math.floor(tokensUsed * 0.3); } await processAgentResponse(summaryResponse.content || "", session, this.dbManager, this.sessionManager, worker, tokensUsed, originalTimestamp, "OpenRouter", lastCwd); } } const sessionDuration = Date.now() - session.startTime; logger.success("SDK", "OpenRouter agent completed", { sessionId: session.sessionDbId, duration: `${(sessionDuration / 1000).toFixed(1)}s`, historyLength: session.conversationHistory.length, model }); } catch (error3) { if (isAbortError(error3)) { logger.warn("SDK", "OpenRouter agent aborted", { sessionId: session.sessionDbId }); throw error3; } if (shouldFallbackToClaude(error3) && this.fallbackAgent) { logger.warn("SDK", "OpenRouter API failed, falling back to Claude SDK", { sessionDbId: session.sessionDbId, error: error3 instanceof Error ? error3.message : String(error3), historyLength: session.conversationHistory.length }); return this.fallbackAgent.startSession(session, worker); } logger.failure("SDK", "OpenRouter agent error", { sessionDbId: session.sessionDbId }, error3); throw error3; } } estimateTokens(text) { return Math.ceil(text.length / CHARS_PER_TOKEN_ESTIMATE); } truncateHistory(history) { const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const MAX_CONTEXT_MESSAGES = parseInt(settings.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES) || DEFAULT_MAX_CONTEXT_MESSAGES; const MAX_ESTIMATED_TOKENS = parseInt(settings.CLAUDE_MEM_OPENROUTER_MAX_TOKENS) || DEFAULT_MAX_ESTIMATED_TOKENS; if (history.length <= MAX_CONTEXT_MESSAGES) { const totalTokens = history.reduce((sum, m) => sum + this.estimateTokens(m.content), 0); if (totalTokens <= MAX_ESTIMATED_TOKENS) { return history; } } const truncated = []; let tokenCount = 0; for (let i = history.length - 1;i >= 0; i--) { const msg = history[i]; const msgTokens = this.estimateTokens(msg.content); if (truncated.length >= MAX_CONTEXT_MESSAGES || tokenCount + msgTokens > MAX_ESTIMATED_TOKENS) { logger.warn("SDK", "Context window truncated to prevent runaway costs", { originalMessages: history.length, keptMessages: truncated.length, droppedMessages: i + 1, estimatedTokens: tokenCount, tokenLimit: MAX_ESTIMATED_TOKENS }); break; } truncated.unshift(msg); tokenCount += msgTokens; } return truncated; } conversationToOpenAIMessages(history) { return history.map((msg) => ({ role: msg.role === "assistant" ? "assistant" : "user", content: msg.content })); } async queryOpenRouterMultiTurn(history, apiKey, model, siteUrl, appName) { const truncatedHistory = this.truncateHistory(history); const messages = this.conversationToOpenAIMessages(truncatedHistory); const totalChars = truncatedHistory.reduce((sum, m) => sum + m.content.length, 0); const estimatedTokens = this.estimateTokens(truncatedHistory.map((m) => m.content).join("")); logger.debug("SDK", `Querying OpenRouter multi-turn (${model})`, { turns: truncatedHistory.length, totalChars, estimatedTokens }); const response = await fetch(OPENROUTER_API_URL, { method: "POST", headers: { Authorization: `Bearer ${apiKey}`, "HTTP-Referer": siteUrl || "https://github.com/thedotmack/claude-mem", "X-Title": appName || "claude-mem", "Content-Type": "application/json" }, body: JSON.stringify({ model, messages, temperature: 0.3, max_tokens: 4096 }) }); if (!response.ok) { const errorText = await response.text(); throw new Error(`OpenRouter API error: ${response.status} - ${errorText}`); } const data = await response.json(); if (data.error) { throw new Error(`OpenRouter API error: ${data.error.code} - ${data.error.message}`); } if (!data.choices?.[0]?.message?.content) { logger.error("SDK", "Empty response from OpenRouter"); return { content: "" }; } const content = data.choices[0].message.content; const tokensUsed = data.usage?.total_tokens; if (tokensUsed) { const inputTokens = data.usage?.prompt_tokens || 0; const outputTokens = data.usage?.completion_tokens || 0; const estimatedCost = inputTokens / 1e6 * 3 + outputTokens / 1e6 * 15; logger.info("SDK", "OpenRouter API usage", { model, inputTokens, outputTokens, totalTokens: tokensUsed, estimatedCostUSD: estimatedCost.toFixed(4), messagesInContext: truncatedHistory.length }); if (tokensUsed > 50000) { logger.warn("SDK", "High token usage detected - consider reducing context", { totalTokens: tokensUsed, estimatedCost: estimatedCost.toFixed(4) }); } } return { content, tokensUsed }; } getOpenRouterConfig() { const settingsPath = USER_SETTINGS_PATH; const settings = SettingsDefaultsManager.loadFromFile(settingsPath); const apiKey = settings.CLAUDE_MEM_OPENROUTER_API_KEY || getCredential("OPENROUTER_API_KEY") || ""; const model = settings.CLAUDE_MEM_OPENROUTER_MODEL || "xiaomi/mimo-v2-flash:free"; const siteUrl = settings.CLAUDE_MEM_OPENROUTER_SITE_URL || ""; const appName = settings.CLAUDE_MEM_OPENROUTER_APP_NAME || "claude-mem"; return { apiKey, model, siteUrl, appName }; } } function isOpenRouterAvailable() { const settingsPath = USER_SETTINGS_PATH; const settings = SettingsDefaultsManager.loadFromFile(settingsPath); return !!(settings.CLAUDE_MEM_OPENROUTER_API_KEY || getCredential("OPENROUTER_API_KEY")); } function isOpenRouterSelected() { const settingsPath = USER_SETTINGS_PATH; const settings = SettingsDefaultsManager.loadFromFile(settingsPath); return settings.CLAUDE_MEM_PROVIDER === "openrouter"; } // src/services/worker/PaginationHelper.ts init_logger(); class PaginationHelper { dbManager; constructor(dbManager) { this.dbManager = dbManager; } stripProjectPath(filePath, projectName) { const marker = `/${projectName}/`; const index = filePath.indexOf(marker); if (index !== -1) { return filePath.substring(index + marker.length); } return filePath; } stripProjectPaths(filePathsStr, projectName) { if (!filePathsStr) return filePathsStr; try { const paths = JSON.parse(filePathsStr); const strippedPaths = paths.map((p) => this.stripProjectPath(p, projectName)); return JSON.stringify(strippedPaths); } catch (err) { logger.debug("WORKER", "File paths is plain string, using as-is", {}, err); return filePathsStr; } } sanitizeObservation(obs) { return { ...obs, files_read: this.stripProjectPaths(obs.files_read, obs.project), files_modified: this.stripProjectPaths(obs.files_modified, obs.project) }; } getObservations(offset, limit, project) { const result = this.paginate("observations", "id, memory_session_id, project, type, title, subtitle, narrative, text, facts, concepts, files_read, files_modified, prompt_number, created_at, created_at_epoch", offset, limit, project); return { ...result, items: result.items.map((obs) => this.sanitizeObservation(obs)) }; } getSummaries(offset, limit, project) { const db = this.dbManager.getSessionStore().db; let query2 = ` SELECT ss.id, s.content_session_id as session_id, ss.request, ss.investigated, ss.learned, ss.completed, ss.next_steps, ss.project, ss.created_at, ss.created_at_epoch FROM session_summaries ss JOIN sdk_sessions s ON ss.memory_session_id = s.memory_session_id `; const params = []; if (project) { query2 += " WHERE ss.project = ?"; params.push(project); } query2 += " ORDER BY ss.created_at_epoch DESC LIMIT ? OFFSET ?"; params.push(limit + 1, offset); const stmt = db.prepare(query2); const results = stmt.all(...params); return { items: results.slice(0, limit), hasMore: results.length > limit, offset, limit }; } getPrompts(offset, limit, project) { const db = this.dbManager.getSessionStore().db; let query2 = ` SELECT up.id, up.content_session_id, s.project, up.prompt_number, up.prompt_text, up.created_at, up.created_at_epoch FROM user_prompts up JOIN sdk_sessions s ON up.content_session_id = s.content_session_id `; const params = []; if (project) { query2 += " WHERE s.project = ?"; params.push(project); } query2 += " ORDER BY up.created_at_epoch DESC LIMIT ? OFFSET ?"; params.push(limit + 1, offset); const stmt = db.prepare(query2); const results = stmt.all(...params); return { items: results.slice(0, limit), hasMore: results.length > limit, offset, limit }; } paginate(table, columns, offset, limit, project) { const db = this.dbManager.getSessionStore().db; let query2 = `SELECT ${columns} FROM ${table}`; const params = []; if (project) { query2 += " WHERE project = ?"; params.push(project); } query2 += " ORDER BY created_at_epoch DESC LIMIT ? OFFSET ?"; params.push(limit + 1, offset); const stmt = db.prepare(query2); const results = stmt.all(...params); return { items: results.slice(0, limit), hasMore: results.length > limit, offset, limit }; } } // src/services/worker/SettingsManager.ts init_logger(); class SettingsManager { dbManager; defaultSettings = { sidebarOpen: true, selectedProject: null, theme: "system" }; constructor(dbManager) { this.dbManager = dbManager; } getSettings() { const db = this.dbManager.getSessionStore().db; try { const stmt = db.prepare("SELECT key, value FROM viewer_settings"); const rows = stmt.all(); const settings = { ...this.defaultSettings }; for (const row of rows) { const key = row.key; if (key in settings) { settings[key] = JSON.parse(row.value); } } return settings; } catch (error3) { logger.debug("WORKER", "Failed to load settings, using defaults", {}, error3); return { ...this.defaultSettings }; } } updateSettings(updates) { const db = this.dbManager.getSessionStore().db; const stmt = db.prepare(` INSERT OR REPLACE INTO viewer_settings (key, value) VALUES (?, ?) `); for (const [key, value] of Object.entries(updates)) { stmt.run(key, JSON.stringify(value)); } return this.getSettings(); } } // src/services/worker/SearchManager.ts init_logger(); init_timeline_formatting(); init_ModeManager(); import { basename as basename3 } from "path"; // src/services/worker/search/strategies/SearchStrategy.ts class BaseSearchStrategy { emptyResult(strategy) { return { results: { observations: [], sessions: [], prompts: [] }, usedChroma: strategy === "chroma" || strategy === "hybrid", fellBack: false, strategy }; } } // src/services/worker/search/types.ts var SEARCH_CONSTANTS = { RECENCY_WINDOW_DAYS: 90, RECENCY_WINDOW_MS: 90 * 24 * 60 * 60 * 1000, DEFAULT_LIMIT: 20, CHROMA_BATCH_SIZE: 100 }; // src/services/worker/search/strategies/ChromaSearchStrategy.ts init_logger(); class ChromaSearchStrategy extends BaseSearchStrategy { chromaSync; sessionStore; name = "chroma"; constructor(chromaSync, sessionStore) { super(); this.chromaSync = chromaSync; this.sessionStore = sessionStore; } canHandle(options) { return !!options.query && !!this.chromaSync; } async search(options) { const { query: query2, searchType = "all", obsType, concepts, files, limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, orderBy = "date_desc" } = options; if (!query2) { return this.emptyResult("chroma"); } const searchObservations = searchType === "all" || searchType === "observations"; const searchSessions = searchType === "all" || searchType === "sessions"; const searchPrompts = searchType === "all" || searchType === "prompts"; let observations = []; let sessions = []; let prompts = []; try { const whereFilter = this.buildWhereFilter(searchType, project); logger.debug("SEARCH", "ChromaSearchStrategy: Querying Chroma", { query: query2, searchType }); const chromaResults = await this.chromaSync.queryChroma(query2, SEARCH_CONSTANTS.CHROMA_BATCH_SIZE, whereFilter); logger.debug("SEARCH", "ChromaSearchStrategy: Chroma returned matches", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length === 0) { return { results: { observations: [], sessions: [], prompts: [] }, usedChroma: true, fellBack: false, strategy: "chroma" }; } const recentItems = this.filterByRecency(chromaResults); logger.debug("SEARCH", "ChromaSearchStrategy: Filtered by recency", { count: recentItems.length }); const categorized = this.categorizeByDocType(recentItems, { searchObservations, searchSessions, searchPrompts }); if (categorized.obsIds.length > 0) { const obsOptions = { type: obsType, concepts, files, orderBy, limit, project }; observations = this.sessionStore.getObservationsByIds(categorized.obsIds, obsOptions); } if (categorized.sessionIds.length > 0) { sessions = this.sessionStore.getSessionSummariesByIds(categorized.sessionIds, { orderBy, limit, project }); } if (categorized.promptIds.length > 0) { prompts = this.sessionStore.getUserPromptsByIds(categorized.promptIds, { orderBy, limit, project }); } logger.debug("SEARCH", "ChromaSearchStrategy: Hydrated results", { observations: observations.length, sessions: sessions.length, prompts: prompts.length }); return { results: { observations, sessions, prompts }, usedChroma: true, fellBack: false, strategy: "chroma" }; } catch (error3) { logger.error("SEARCH", "ChromaSearchStrategy: Search failed", {}, error3); return { results: { observations: [], sessions: [], prompts: [] }, usedChroma: false, fellBack: false, strategy: "chroma" }; } } buildWhereFilter(searchType, project) { let docTypeFilter; switch (searchType) { case "observations": docTypeFilter = { doc_type: "observation" }; break; case "sessions": docTypeFilter = { doc_type: "session_summary" }; break; case "prompts": docTypeFilter = { doc_type: "user_prompt" }; break; default: docTypeFilter = undefined; } if (project) { const projectFilter = { project }; if (docTypeFilter) { return { $and: [docTypeFilter, projectFilter] }; } return projectFilter; } return docTypeFilter; } filterByRecency(chromaResults) { const cutoff = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const metadataByIdMap = new Map; for (const meta2 of chromaResults.metadatas) { if (meta2?.sqlite_id !== undefined && !metadataByIdMap.has(meta2.sqlite_id)) { metadataByIdMap.set(meta2.sqlite_id, meta2); } } return chromaResults.ids.map((id) => ({ id, meta: metadataByIdMap.get(id) })).filter((item) => item.meta && item.meta.created_at_epoch > cutoff); } categorizeByDocType(items, options) { const obsIds = []; const sessionIds = []; const promptIds = []; for (const item of items) { const docType = item.meta?.doc_type; if (docType === "observation" && options.searchObservations) { obsIds.push(item.id); } else if (docType === "session_summary" && options.searchSessions) { sessionIds.push(item.id); } else if (docType === "user_prompt" && options.searchPrompts) { promptIds.push(item.id); } } return { obsIds, sessionIds, promptIds }; } } // src/services/worker/search/strategies/SQLiteSearchStrategy.ts init_logger(); class SQLiteSearchStrategy extends BaseSearchStrategy { sessionSearch; name = "sqlite"; constructor(sessionSearch) { super(); this.sessionSearch = sessionSearch; } canHandle(options) { return !options.query || options.strategyHint === "sqlite"; } async search(options) { const { searchType = "all", obsType, concepts, files, limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, offset = 0, project, dateRange, orderBy = "date_desc" } = options; const searchObservations = searchType === "all" || searchType === "observations"; const searchSessions = searchType === "all" || searchType === "sessions"; const searchPrompts = searchType === "all" || searchType === "prompts"; let observations = []; let sessions = []; let prompts = []; const baseOptions = { limit, offset, orderBy, project, dateRange }; logger.debug("SEARCH", "SQLiteSearchStrategy: Filter-only query", { searchType, hasDateRange: !!dateRange, hasProject: !!project }); try { if (searchObservations) { const obsOptions = { ...baseOptions, type: obsType, concepts, files }; observations = this.sessionSearch.searchObservations(undefined, obsOptions); } if (searchSessions) { sessions = this.sessionSearch.searchSessions(undefined, baseOptions); } if (searchPrompts) { prompts = this.sessionSearch.searchUserPrompts(undefined, baseOptions); } logger.debug("SEARCH", "SQLiteSearchStrategy: Results", { observations: observations.length, sessions: sessions.length, prompts: prompts.length }); return { results: { observations, sessions, prompts }, usedChroma: false, fellBack: false, strategy: "sqlite" }; } catch (error3) { logger.error("SEARCH", "SQLiteSearchStrategy: Search failed", {}, error3); return this.emptyResult("sqlite"); } } findByConcept(concept, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy = "date_desc" } = options; return this.sessionSearch.findByConcept(concept, { limit, project, dateRange, orderBy }); } findByType(type, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy = "date_desc" } = options; return this.sessionSearch.findByType(type, { limit, project, dateRange, orderBy }); } findByFile(filePath, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy = "date_desc" } = options; return this.sessionSearch.findByFile(filePath, { limit, project, dateRange, orderBy }); } } // src/services/worker/search/strategies/HybridSearchStrategy.ts init_logger(); class HybridSearchStrategy extends BaseSearchStrategy { chromaSync; sessionStore; sessionSearch; name = "hybrid"; constructor(chromaSync, sessionStore, sessionSearch) { super(); this.chromaSync = chromaSync; this.sessionStore = sessionStore; this.sessionSearch = sessionSearch; } canHandle(options) { return !!this.chromaSync && (!!options.concepts || !!options.files || !!options.type && !!options.query || options.strategyHint === "hybrid"); } async search(options) { const { query: query2, limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project } = options; if (!query2) { return this.emptyResult("hybrid"); } return this.emptyResult("hybrid"); } async findByConcept(concept, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy } = options; const filterOptions = { limit, project, dateRange, orderBy }; try { logger.debug("SEARCH", "HybridSearchStrategy: findByConcept", { concept }); const metadataResults = this.sessionSearch.findByConcept(concept, filterOptions); logger.debug("SEARCH", "HybridSearchStrategy: Found metadata matches", { count: metadataResults.length }); if (metadataResults.length === 0) { return this.emptyResult("hybrid"); } const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.chromaSync.queryChroma(concept, Math.min(ids.length, SEARCH_CONSTANTS.CHROMA_BATCH_SIZE)); const rankedIds = this.intersectWithRanking(ids, chromaResults.ids); logger.debug("SEARCH", "HybridSearchStrategy: Ranked by semantic relevance", { count: rankedIds.length }); if (rankedIds.length > 0) { const observations = this.sessionStore.getObservationsByIds(rankedIds, { limit }); observations.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); return { results: { observations, sessions: [], prompts: [] }, usedChroma: true, fellBack: false, strategy: "hybrid" }; } return this.emptyResult("hybrid"); } catch (error3) { logger.error("SEARCH", "HybridSearchStrategy: findByConcept failed", {}, error3); const results = this.sessionSearch.findByConcept(concept, filterOptions); return { results: { observations: results, sessions: [], prompts: [] }, usedChroma: false, fellBack: true, strategy: "hybrid" }; } } async findByType(type, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy } = options; const filterOptions = { limit, project, dateRange, orderBy }; const typeStr = Array.isArray(type) ? type.join(", ") : type; try { logger.debug("SEARCH", "HybridSearchStrategy: findByType", { type: typeStr }); const metadataResults = this.sessionSearch.findByType(type, filterOptions); logger.debug("SEARCH", "HybridSearchStrategy: Found metadata matches", { count: metadataResults.length }); if (metadataResults.length === 0) { return this.emptyResult("hybrid"); } const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.chromaSync.queryChroma(typeStr, Math.min(ids.length, SEARCH_CONSTANTS.CHROMA_BATCH_SIZE)); const rankedIds = this.intersectWithRanking(ids, chromaResults.ids); logger.debug("SEARCH", "HybridSearchStrategy: Ranked by semantic relevance", { count: rankedIds.length }); if (rankedIds.length > 0) { const observations = this.sessionStore.getObservationsByIds(rankedIds, { limit }); observations.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); return { results: { observations, sessions: [], prompts: [] }, usedChroma: true, fellBack: false, strategy: "hybrid" }; } return this.emptyResult("hybrid"); } catch (error3) { logger.error("SEARCH", "HybridSearchStrategy: findByType failed", {}, error3); const results = this.sessionSearch.findByType(type, filterOptions); return { results: { observations: results, sessions: [], prompts: [] }, usedChroma: false, fellBack: true, strategy: "hybrid" }; } } async findByFile(filePath, options) { const { limit = SEARCH_CONSTANTS.DEFAULT_LIMIT, project, dateRange, orderBy } = options; const filterOptions = { limit, project, dateRange, orderBy }; try { logger.debug("SEARCH", "HybridSearchStrategy: findByFile", { filePath }); const metadataResults = this.sessionSearch.findByFile(filePath, filterOptions); logger.debug("SEARCH", "HybridSearchStrategy: Found file matches", { observations: metadataResults.observations.length, sessions: metadataResults.sessions.length }); const sessions = metadataResults.sessions; if (metadataResults.observations.length === 0) { return { observations: [], sessions, usedChroma: false }; } const ids = metadataResults.observations.map((obs) => obs.id); const chromaResults = await this.chromaSync.queryChroma(filePath, Math.min(ids.length, SEARCH_CONSTANTS.CHROMA_BATCH_SIZE)); const rankedIds = this.intersectWithRanking(ids, chromaResults.ids); logger.debug("SEARCH", "HybridSearchStrategy: Ranked observations", { count: rankedIds.length }); if (rankedIds.length > 0) { const observations = this.sessionStore.getObservationsByIds(rankedIds, { limit }); observations.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); return { observations, sessions, usedChroma: true }; } return { observations: [], sessions, usedChroma: false }; } catch (error3) { logger.error("SEARCH", "HybridSearchStrategy: findByFile failed", {}, error3); const results = this.sessionSearch.findByFile(filePath, filterOptions); return { observations: results.observations, sessions: results.sessions, usedChroma: false }; } } intersectWithRanking(metadataIds, chromaIds) { const metadataSet = new Set(metadataIds); const rankedIds = []; for (const chromaId of chromaIds) { if (metadataSet.has(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } return rankedIds; } } // src/services/worker/search/ResultFormatter.ts init_ModeManager(); init_timeline_formatting(); var CHARS_PER_TOKEN_ESTIMATE2 = 4; class ResultFormatter { formatSearchResults(results, query2, chromaFailed = false) { const totalResults = results.observations.length + results.sessions.length + results.prompts.length; if (totalResults === 0) { if (chromaFailed) { return this.formatChromaFailureMessage(); } return `No results found matching "${query2}"`; } const combined = this.combineResults(results); combined.sort((a, b) => b.epoch - a.epoch); const cwd2 = process.cwd(); const resultsByDate = groupByDate(combined, (item) => item.created_at); const lines = []; lines.push(`Found ${totalResults} result(s) matching "${query2}" (${results.observations.length} obs, ${results.sessions.length} sessions, ${results.prompts.length} prompts)`); lines.push(""); for (const [day, dayResults] of resultsByDate) { lines.push(`### ${day}`); lines.push(""); const resultsByFile = new Map; for (const result of dayResults) { let file = "General"; if (result.type === "observation") { const obs = result.data; file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); } if (!resultsByFile.has(file)) { resultsByFile.set(file, []); } resultsByFile.get(file).push(result); } for (const [file, fileResults] of resultsByFile) { lines.push(`**${file}**`); lines.push(this.formatSearchTableHeader()); let lastTime = ""; for (const result of fileResults) { if (result.type === "observation") { const formatted = this.formatObservationSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } else if (result.type === "session") { const formatted = this.formatSessionSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } else { const formatted = this.formatPromptSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } } lines.push(""); } } return lines.join(` `); } combineResults(results) { return [ ...results.observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch, created_at: obs.created_at })), ...results.sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch, created_at: sess.created_at })), ...results.prompts.map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch, created_at: prompt.created_at })) ]; } formatSearchTableHeader() { return `| ID | Time | T | Title | Read | |----|------|---|-------|------|`; } formatTableHeader() { return `| ID | Time | T | Title | Read | Work | |-----|------|---|-------|------|------|`; } formatObservationSearchRow(obs, lastTime) { const id = `#${obs.id}`; const time4 = formatTime(obs.created_at_epoch); const icon = ModeManager.getInstance().getTypeIcon(obs.type); const title = obs.title || "Untitled"; const readTokens = this.estimateReadTokens(obs); const timeDisplay = time4 === lastTime ? '"' : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | ~${readTokens} |`, time: time4 }; } formatSessionSearchRow(session, lastTime) { const id = `#S${session.id}`; const time4 = formatTime(session.created_at_epoch); const icon = "\uD83C\uDFAF"; const title = session.request || `Session ${session.memory_session_id?.substring(0, 8) || "unknown"}`; const timeDisplay = time4 === lastTime ? '"' : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | - |`, time: time4 }; } formatPromptSearchRow(prompt, lastTime) { const id = `#P${prompt.id}`; const time4 = formatTime(prompt.created_at_epoch); const icon = "\uD83D\uDCAC"; const title = prompt.prompt_text.length > 60 ? prompt.prompt_text.substring(0, 57) + "..." : prompt.prompt_text; const timeDisplay = time4 === lastTime ? '"' : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | - |`, time: time4 }; } formatObservationIndex(obs, _index) { const id = `#${obs.id}`; const time4 = formatTime(obs.created_at_epoch); const icon = ModeManager.getInstance().getTypeIcon(obs.type); const title = obs.title || "Untitled"; const readTokens = this.estimateReadTokens(obs); const workEmoji = ModeManager.getInstance().getWorkEmoji(obs.type); const workTokens = obs.discovery_tokens || 0; const workDisplay = workTokens > 0 ? `${workEmoji} ${workTokens}` : "-"; return `| ${id} | ${time4} | ${icon} | ${title} | ~${readTokens} | ${workDisplay} |`; } formatSessionIndex(session, _index) { const id = `#S${session.id}`; const time4 = formatTime(session.created_at_epoch); const icon = "\uD83C\uDFAF"; const title = session.request || `Session ${session.memory_session_id?.substring(0, 8) || "unknown"}`; return `| ${id} | ${time4} | ${icon} | ${title} | - | - |`; } formatPromptIndex(prompt, _index) { const id = `#P${prompt.id}`; const time4 = formatTime(prompt.created_at_epoch); const icon = "\uD83D\uDCAC"; const title = prompt.prompt_text.length > 60 ? prompt.prompt_text.substring(0, 57) + "..." : prompt.prompt_text; return `| ${id} | ${time4} | ${icon} | ${title} | - | - |`; } estimateReadTokens(obs) { const size = (obs.title?.length || 0) + (obs.subtitle?.length || 0) + (obs.narrative?.length || 0) + (obs.facts?.length || 0); return Math.ceil(size / CHARS_PER_TOKEN_ESTIMATE2); } formatChromaFailureMessage() { return `Vector search failed - semantic search unavailable. To enable semantic search: 1. Install uv: https://docs.astral.sh/uv/getting-started/installation/ 2. Restart the worker: npm run worker:restart Note: You can still use filter-only searches (date ranges, types, files) without a query term.`; } formatSearchTips() { return ` --- Search Strategy: 1. Search with index to see titles, dates, IDs 2. Use timeline to get context around interesting results 3. Batch fetch full details: get_observations(ids=[...]) Tips: - Filter by type: obs_type="bugfix,feature" - Filter by date: dateStart="2025-01-01" - Sort: orderBy="date_desc" or "date_asc"`; } } // src/services/worker/search/TimelineBuilder.ts init_ModeManager(); init_timeline_formatting(); class TimelineBuilder { buildTimeline(data) { const items = [ ...data.observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch })), ...data.sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch })), ...data.prompts.map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch })) ]; items.sort((a, b) => a.epoch - b.epoch); return items; } filterByDepth(items, anchorId, anchorEpoch, depthBefore, depthAfter) { if (items.length === 0) return items; let anchorIndex = this.findAnchorIndex(items, anchorId, anchorEpoch); if (anchorIndex === -1) return items; const startIndex = Math.max(0, anchorIndex - depthBefore); const endIndex = Math.min(items.length, anchorIndex + depthAfter + 1); return items.slice(startIndex, endIndex); } findAnchorIndex(items, anchorId, anchorEpoch) { if (typeof anchorId === "number") { return items.findIndex((item) => item.type === "observation" && item.data.id === anchorId); } if (typeof anchorId === "string" && anchorId.startsWith("S")) { const sessionNum = parseInt(anchorId.slice(1), 10); return items.findIndex((item) => item.type === "session" && item.data.id === sessionNum); } const index = items.findIndex((item) => item.epoch >= anchorEpoch); return index === -1 ? items.length - 1 : index; } formatTimeline(items, anchorId, options = {}) { const { query: query2, depthBefore, depthAfter, cwd: cwd2 = process.cwd() } = options; if (items.length === 0) { return query2 ? `Found observation matching "${query2}", but no timeline context available.` : "No timeline items found"; } const lines = []; if (query2 && anchorId) { const anchorObs = items.find((item) => item.type === "observation" && item.data.id === anchorId); const anchorTitle = anchorObs ? anchorObs.data.title || "Untitled" : "Unknown"; lines.push(`# Timeline for query: "${query2}"`); lines.push(`**Anchor:** Observation #${anchorId} - ${anchorTitle}`); } else if (anchorId) { lines.push(`# Timeline around anchor: ${anchorId}`); } else { lines.push(`# Timeline`); } if (depthBefore !== undefined && depthAfter !== undefined) { lines.push(`**Window:** ${depthBefore} records before -> ${depthAfter} records after | **Items:** ${items.length}`); } else { lines.push(`**Items:** ${items.length}`); } lines.push(""); const dayMap = this.groupByDay(items); const sortedDays = this.sortDaysChronologically(dayMap); for (const [day, dayItems] of sortedDays) { lines.push(`### ${day}`); lines.push(""); let currentFile = null; let lastTime = ""; let tableOpen = false; for (const item of dayItems) { const isAnchor = this.isAnchorItem(item, anchorId); if (item.type === "session") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const sess = item.data; const title = sess.request || "Session summary"; const marker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`**\uD83C\uDFAF #S${sess.id}** ${title} (${formatDateTime(item.epoch)})${marker}`); lines.push(""); } else if (item.type === "prompt") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const prompt = item.data; const truncated = prompt.prompt_text.length > 100 ? prompt.prompt_text.substring(0, 100) + "..." : prompt.prompt_text; lines.push(`**\uD83D\uDCAC User Prompt #${prompt.prompt_number}** (${formatDateTime(item.epoch)})`); lines.push(`> ${truncated}`); lines.push(""); } else if (item.type === "observation") { const obs = item.data; const file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); if (file !== currentFile) { if (tableOpen) { lines.push(""); } lines.push(`**${file}**`); lines.push(`| ID | Time | T | Title | Tokens |`); lines.push(`|----|------|---|-------|--------|`); currentFile = file; tableOpen = true; lastTime = ""; } const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = formatTime(item.epoch); const title = obs.title || "Untitled"; const tokens = estimateTokens(obs.narrative); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : '"'; lastTime = time4; const anchorMarker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title}${anchorMarker} | ~${tokens} |`); } } if (tableOpen) { lines.push(""); } } return lines.join(` `); } groupByDay(items) { const dayMap = new Map; for (const item of items) { const day = formatDate(item.epoch); if (!dayMap.has(day)) { dayMap.set(day, []); } dayMap.get(day).push(item); } return dayMap; } sortDaysChronologically(dayMap) { return Array.from(dayMap.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); } isAnchorItem(item, anchorId) { if (anchorId === null) return false; if (typeof anchorId === "number" && item.type === "observation") { return item.data.id === anchorId; } if (typeof anchorId === "string" && anchorId.startsWith("S") && item.type === "session") { return `S${item.data.id}` === anchorId; } return false; } } // src/services/worker/search/SearchOrchestrator.ts init_logger(); class SearchOrchestrator { sessionSearch; sessionStore; chromaSync; chromaStrategy = null; sqliteStrategy; hybridStrategy = null; resultFormatter; timelineBuilder; constructor(sessionSearch, sessionStore, chromaSync) { this.sessionSearch = sessionSearch; this.sessionStore = sessionStore; this.chromaSync = chromaSync; this.sqliteStrategy = new SQLiteSearchStrategy(sessionSearch); if (chromaSync) { this.chromaStrategy = new ChromaSearchStrategy(chromaSync, sessionStore); this.hybridStrategy = new HybridSearchStrategy(chromaSync, sessionStore, sessionSearch); } this.resultFormatter = new ResultFormatter; this.timelineBuilder = new TimelineBuilder; } async search(args) { const options = this.normalizeParams(args); return await this.executeWithFallback(options); } async executeWithFallback(options) { if (!options.query) { logger.debug("SEARCH", "Orchestrator: Filter-only query, using SQLite", {}); return await this.sqliteStrategy.search(options); } if (this.chromaStrategy) { logger.debug("SEARCH", "Orchestrator: Using Chroma semantic search", {}); const result = await this.chromaStrategy.search(options); if (result.usedChroma) { return result; } logger.debug("SEARCH", "Orchestrator: Chroma failed, falling back to SQLite", {}); const fallbackResult = await this.sqliteStrategy.search({ ...options, query: undefined }); return { ...fallbackResult, fellBack: true }; } logger.debug("SEARCH", "Orchestrator: Chroma not available", {}); return { results: { observations: [], sessions: [], prompts: [] }, usedChroma: false, fellBack: false, strategy: "sqlite" }; } async findByConcept(concept, args) { const options = this.normalizeParams(args); if (this.hybridStrategy) { return await this.hybridStrategy.findByConcept(concept, options); } const results = this.sqliteStrategy.findByConcept(concept, options); return { results: { observations: results, sessions: [], prompts: [] }, usedChroma: false, fellBack: false, strategy: "sqlite" }; } async findByType(type, args) { const options = this.normalizeParams(args); if (this.hybridStrategy) { return await this.hybridStrategy.findByType(type, options); } const results = this.sqliteStrategy.findByType(type, options); return { results: { observations: results, sessions: [], prompts: [] }, usedChroma: false, fellBack: false, strategy: "sqlite" }; } async findByFile(filePath, args) { const options = this.normalizeParams(args); if (this.hybridStrategy) { return await this.hybridStrategy.findByFile(filePath, options); } const results = this.sqliteStrategy.findByFile(filePath, options); return { ...results, usedChroma: false }; } getTimeline(timelineData, anchorId, anchorEpoch, depthBefore, depthAfter) { const items = this.timelineBuilder.buildTimeline(timelineData); return this.timelineBuilder.filterByDepth(items, anchorId, anchorEpoch, depthBefore, depthAfter); } formatTimeline(items, anchorId, options = {}) { return this.timelineBuilder.formatTimeline(items, anchorId, options); } formatSearchResults(results, query2, chromaFailed = false) { return this.resultFormatter.formatSearchResults(results, query2, chromaFailed); } getFormatter() { return this.resultFormatter; } getTimelineBuilder() { return this.timelineBuilder; } normalizeParams(args) { const normalized = { ...args }; if (normalized.concepts && typeof normalized.concepts === "string") { normalized.concepts = normalized.concepts.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.files && typeof normalized.files === "string") { normalized.files = normalized.files.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.obs_type && typeof normalized.obs_type === "string") { normalized.obsType = normalized.obs_type.split(",").map((s) => s.trim()).filter(Boolean); delete normalized.obs_type; } if (normalized.type && typeof normalized.type === "string" && normalized.type.includes(",")) { normalized.type = normalized.type.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.type && !normalized.searchType) { if (["observations", "sessions", "prompts"].includes(normalized.type)) { normalized.searchType = normalized.type; delete normalized.type; } } if (normalized.dateStart || normalized.dateEnd) { normalized.dateRange = { start: normalized.dateStart, end: normalized.dateEnd }; delete normalized.dateStart; delete normalized.dateEnd; } return normalized; } isChromaAvailable() { return !!this.chromaSync; } } // src/services/worker/SearchManager.ts class SearchManager { sessionSearch; sessionStore; chromaSync; formatter; timelineService; orchestrator; timelineBuilder; constructor(sessionSearch, sessionStore, chromaSync, formatter, timelineService) { this.sessionSearch = sessionSearch; this.sessionStore = sessionStore; this.chromaSync = chromaSync; this.formatter = formatter; this.timelineService = timelineService; this.orchestrator = new SearchOrchestrator(sessionSearch, sessionStore, chromaSync); this.timelineBuilder = new TimelineBuilder; } async queryChroma(query2, limit, whereFilter) { if (!this.chromaSync) { return { ids: [], distances: [], metadatas: [] }; } return await this.chromaSync.queryChroma(query2, limit, whereFilter); } normalizeParams(args) { const normalized = { ...args }; if (normalized.filePath && !normalized.files) { normalized.files = normalized.filePath; delete normalized.filePath; } if (normalized.concepts && typeof normalized.concepts === "string") { normalized.concepts = normalized.concepts.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.files && typeof normalized.files === "string") { normalized.files = normalized.files.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.obs_type && typeof normalized.obs_type === "string") { normalized.obs_type = normalized.obs_type.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.type && typeof normalized.type === "string" && normalized.type.includes(",")) { normalized.type = normalized.type.split(",").map((s) => s.trim()).filter(Boolean); } if (normalized.dateStart || normalized.dateEnd) { normalized.dateRange = { start: normalized.dateStart, end: normalized.dateEnd }; delete normalized.dateStart; delete normalized.dateEnd; } if (normalized.isFolder === "true") { normalized.isFolder = true; } else if (normalized.isFolder === "false") { normalized.isFolder = false; } return normalized; } async search(args) { const normalized = this.normalizeParams(args); const { query: query2, type, obs_type, concepts, files, format, ...options } = normalized; let observations = []; let sessions = []; let prompts = []; let chromaFailed = false; const searchObservations = !type || type === "observations"; const searchSessions = !type || type === "sessions"; const searchPrompts = !type || type === "prompts"; if (!query2) { logger.debug("SEARCH", "Filter-only query (no query text), using direct SQLite filtering", { enablesDateFilters: true }); const obsOptions = { ...options, type: obs_type, concepts, files }; if (searchObservations) { observations = this.sessionSearch.searchObservations(undefined, obsOptions); } if (searchSessions) { sessions = this.sessionSearch.searchSessions(undefined, options); } if (searchPrompts) { prompts = this.sessionSearch.searchUserPrompts(undefined, options); } } else if (this.chromaSync) { let chromaSucceeded = false; logger.debug("SEARCH", "Using ChromaDB semantic search", { typeFilter: type || "all" }); let whereFilter; if (type === "observations") { whereFilter = { doc_type: "observation" }; } else if (type === "sessions") { whereFilter = { doc_type: "session_summary" }; } else if (type === "prompts") { whereFilter = { doc_type: "user_prompt" }; } if (options.project) { const projectFilter = { project: options.project }; whereFilter = whereFilter ? { $and: [whereFilter, projectFilter] } : projectFilter; } const chromaResults = await this.queryChroma(query2, 100, whereFilter); chromaSucceeded = true; logger.debug("SEARCH", "ChromaDB returned semantic matches", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { const { dateRange } = options; let startEpoch; let endEpoch; if (dateRange) { if (dateRange.start) { startEpoch = typeof dateRange.start === "number" ? dateRange.start : new Date(dateRange.start).getTime(); } if (dateRange.end) { endEpoch = typeof dateRange.end === "number" ? dateRange.end : new Date(dateRange.end).getTime(); } } else { startEpoch = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; } const recentMetadata = chromaResults.metadatas.map((meta2, idx) => ({ id: chromaResults.ids[idx], meta: meta2, isRecent: meta2 && meta2.created_at_epoch != null && (!startEpoch || meta2.created_at_epoch >= startEpoch) && (!endEpoch || meta2.created_at_epoch <= endEpoch) })).filter((item) => item.isRecent); logger.debug("SEARCH", dateRange ? "Results within user date range" : "Results within 90-day window", { count: recentMetadata.length }); const obsIds = []; const sessionIds = []; const promptIds = []; for (const item of recentMetadata) { const docType = item.meta?.doc_type; if (docType === "observation" && searchObservations) { obsIds.push(item.id); } else if (docType === "session_summary" && searchSessions) { sessionIds.push(item.id); } else if (docType === "user_prompt" && searchPrompts) { promptIds.push(item.id); } } logger.debug("SEARCH", "Categorized results by type", { observations: obsIds.length, sessions: sessionIds.length, prompts: prompts.length }); if (obsIds.length > 0) { const obsOptions = { ...options, type: obs_type, concepts, files }; observations = this.sessionStore.getObservationsByIds(obsIds, obsOptions); } if (sessionIds.length > 0) { sessions = this.sessionStore.getSessionSummariesByIds(sessionIds, { orderBy: "date_desc", limit: options.limit, project: options.project }); } if (promptIds.length > 0) { prompts = this.sessionStore.getUserPromptsByIds(promptIds, { orderBy: "date_desc", limit: options.limit, project: options.project }); } logger.debug("SEARCH", "Hydrated results from SQLite", { observations: observations.length, sessions: sessions.length, prompts: prompts.length }); } else { logger.debug("SEARCH", "ChromaDB found no matches (final result, no FTS5 fallback)", {}); } } else if (query2) { chromaFailed = true; logger.debug("SEARCH", "ChromaDB not initialized - semantic search unavailable", {}); logger.debug("SEARCH", "Install UVX/Python to enable vector search", { url: "https://docs.astral.sh/uv/getting-started/installation/" }); observations = []; sessions = []; prompts = []; } const totalResults = observations.length + sessions.length + prompts.length; if (format === "json") { return { observations, sessions, prompts, totalResults, query: query2 || "" }; } if (totalResults === 0) { if (chromaFailed) { return { content: [{ type: "text", text: `Vector search failed - semantic search unavailable. To enable semantic search: 1. Install uv: https://docs.astral.sh/uv/getting-started/installation/ 2. Restart the worker: npm run worker:restart Note: You can still use filter-only searches (date ranges, types, files) without a query term.` }] }; } return { content: [{ type: "text", text: `No results found matching "${query2}"` }] }; } const allResults = [ ...observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch, created_at: obs.created_at })), ...sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch, created_at: sess.created_at })), ...prompts.map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch, created_at: prompt.created_at })) ]; if (options.orderBy === "date_desc") { allResults.sort((a, b) => b.epoch - a.epoch); } else if (options.orderBy === "date_asc") { allResults.sort((a, b) => a.epoch - b.epoch); } const limitedResults = allResults.slice(0, options.limit || 20); const cwd2 = process.cwd(); const resultsByDate = groupByDate(limitedResults, (item) => item.created_at); const lines = []; lines.push(`Found ${totalResults} result(s) matching "${query2}" (${observations.length} obs, ${sessions.length} sessions, ${prompts.length} prompts)`); lines.push(""); for (const [day, dayResults] of resultsByDate) { lines.push(`### ${day}`); lines.push(""); const resultsByFile = new Map; for (const result of dayResults) { let file = "General"; if (result.type === "observation") { file = extractFirstFile(result.data.files_modified, cwd2, result.data.files_read); } if (!resultsByFile.has(file)) { resultsByFile.set(file, []); } resultsByFile.get(file).push(result); } for (const [file, fileResults] of resultsByFile) { lines.push(`**${file}**`); lines.push(this.formatter.formatSearchTableHeader()); let lastTime = ""; for (const result of fileResults) { if (result.type === "observation") { const formatted = this.formatter.formatObservationSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } else if (result.type === "session") { const formatted = this.formatter.formatSessionSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } else { const formatted = this.formatter.formatUserPromptSearchRow(result.data, lastTime); lines.push(formatted.row); lastTime = formatted.time; } } lines.push(""); } } return { content: [{ type: "text", text: lines.join(` `) }] }; } async timeline(args) { const { anchor, query: query2, depth_before = 10, depth_after = 10, project } = args; const cwd2 = process.cwd(); if (!anchor && !query2) { return { content: [{ type: "text", text: 'Error: Must provide either "anchor" or "query" parameter' }], isError: true }; } if (anchor && query2) { return { content: [{ type: "text", text: 'Error: Cannot provide both "anchor" and "query" parameters. Use one or the other.' }], isError: true }; } let anchorId; let anchorEpoch; let timelineData; if (query2) { let results = []; if (this.chromaSync) { try { logger.debug("SEARCH", "Using hybrid semantic search for timeline query", {}); const chromaResults = await this.queryChroma(query2, 100); logger.debug("SEARCH", "Chroma returned semantic matches for timeline", { matchCount: chromaResults?.ids?.length ?? 0 }); if (chromaResults?.ids && chromaResults.ids.length > 0) { const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const recentIds = chromaResults.ids.filter((_id, idx) => { const meta2 = chromaResults.metadatas[idx]; return meta2 && meta2.created_at_epoch > ninetyDaysAgo; }); if (recentIds.length > 0) { results = this.sessionStore.getObservationsByIds(recentIds, { orderBy: "date_desc", limit: 1 }); } } } catch (chromaError) { logger.error("SEARCH", "Chroma search failed for timeline, continuing without semantic results", {}, chromaError); } } if (results.length === 0) { return { content: [{ type: "text", text: `No observations found matching "${query2}". Try a different search query.` }] }; } const topResult = results[0]; anchorId = topResult.id; anchorEpoch = topResult.created_at_epoch; logger.debug("SEARCH", "Query mode: Using observation as timeline anchor", { observationId: topResult.id }); timelineData = this.sessionStore.getTimelineAroundObservation(topResult.id, topResult.created_at_epoch, depth_before, depth_after, project); } else if (typeof anchor === "number") { const obs = this.sessionStore.getObservationById(anchor); if (!obs) { return { content: [{ type: "text", text: `Observation #${anchor} not found` }], isError: true }; } anchorId = anchor; anchorEpoch = obs.created_at_epoch; timelineData = this.sessionStore.getTimelineAroundObservation(anchor, anchorEpoch, depth_before, depth_after, project); } else if (typeof anchor === "string") { if (anchor.startsWith("S") || anchor.startsWith("#S")) { const sessionId = anchor.replace(/^#?S/, ""); const sessionNum = parseInt(sessionId, 10); const sessions = this.sessionStore.getSessionSummariesByIds([sessionNum]); if (sessions.length === 0) { return { content: [{ type: "text", text: `Session #${sessionNum} not found` }], isError: true }; } anchorEpoch = sessions[0].created_at_epoch; anchorId = `S${sessionNum}`; timelineData = this.sessionStore.getTimelineAroundTimestamp(anchorEpoch, depth_before, depth_after, project); } else { const date5 = new Date(anchor); if (isNaN(date5.getTime())) { return { content: [{ type: "text", text: `Invalid timestamp: ${anchor}` }], isError: true }; } anchorEpoch = date5.getTime(); anchorId = anchor; timelineData = this.sessionStore.getTimelineAroundTimestamp(anchorEpoch, depth_before, depth_after, project); } } else { return { content: [{ type: "text", text: 'Invalid anchor: must be observation ID (number), session ID (e.g., "S123"), or ISO timestamp' }], isError: true }; } const items = [ ...(timelineData.observations || []).map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch })), ...(timelineData.sessions || []).map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch })), ...(timelineData.prompts || []).map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch })) ]; items.sort((a, b) => a.epoch - b.epoch); const filteredItems = this.timelineService.filterByDepth(items, anchorId, anchorEpoch, depth_before, depth_after); if (!filteredItems || filteredItems.length === 0) { return { content: [{ type: "text", text: query2 ? `Found observation matching "${query2}", but no timeline context available (${depth_before} records before, ${depth_after} records after).` : `No context found around anchor (${depth_before} records before, ${depth_after} records after)` }] }; } const lines = []; if (query2) { const anchorObs = filteredItems.find((item) => item.type === "observation" && item.data.id === anchorId); const anchorTitle = anchorObs && anchorObs.type === "observation" ? anchorObs.data.title || "Untitled" : "Unknown"; lines.push(`# Timeline for query: "${query2}"`); lines.push(`**Anchor:** Observation #${anchorId} - ${anchorTitle}`); } else { lines.push(`# Timeline around anchor: ${anchorId}`); } lines.push(`**Window:** ${depth_before} records before -> ${depth_after} records after | **Items:** ${filteredItems?.length ?? 0}`); lines.push(""); const dayMap = new Map; for (const item of filteredItems) { const day = formatDate(item.epoch); if (!dayMap.has(day)) { dayMap.set(day, []); } dayMap.get(day).push(item); } const sortedDays = Array.from(dayMap.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); for (const [day, dayItems] of sortedDays) { lines.push(`### ${day}`); lines.push(""); let currentFile = null; let lastTime = ""; let tableOpen = false; for (const item of dayItems) { const isAnchor = typeof anchorId === "number" && item.type === "observation" && item.data.id === anchorId || typeof anchorId === "string" && anchorId.startsWith("S") && item.type === "session" && `S${item.data.id}` === anchorId; if (item.type === "session") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const sess = item.data; const title = sess.request || "Session summary"; const marker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`**\uD83C\uDFAF #S${sess.id}** ${title} (${formatDateTime(item.epoch)})${marker}`); lines.push(""); } else if (item.type === "prompt") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const prompt = item.data; const truncated = prompt.prompt_text.length > 100 ? prompt.prompt_text.substring(0, 100) + "..." : prompt.prompt_text; lines.push(`**\uD83D\uDCAC User Prompt #${prompt.prompt_number}** (${formatDateTime(item.epoch)})`); lines.push(`> ${truncated}`); lines.push(""); } else if (item.type === "observation") { const obs = item.data; const file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); if (file !== currentFile) { if (tableOpen) { lines.push(""); } lines.push(`**${file}**`); lines.push(`| ID | Time | T | Title | Tokens |`); lines.push(`|----|------|---|-------|--------|`); currentFile = file; tableOpen = true; lastTime = ""; } const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = formatTime(item.epoch); const title = obs.title || "Untitled"; const tokens = estimateTokens(obs.narrative); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : '"'; lastTime = time4; const anchorMarker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title}${anchorMarker} | ~${tokens} |`); } } if (tableOpen) { lines.push(""); } } return { content: [{ type: "text", text: lines.join(` `) }] }; } async decisions(args) { const normalized = this.normalizeParams(args); const { query: query2, ...filters } = normalized; let results = []; if (this.chromaSync) { try { if (query2) { logger.debug("SEARCH", "Using Chroma semantic search with type=decision filter", {}); const chromaResults = await this.queryChroma(query2, Math.min((filters.limit || 20) * 2, 100), { type: "decision" }); const obsIds = chromaResults.ids; if (obsIds.length > 0) { results = this.sessionStore.getObservationsByIds(obsIds, { ...filters, type: "decision" }); results.sort((a, b) => obsIds.indexOf(a.id) - obsIds.indexOf(b.id)); } } else { logger.debug("SEARCH", "Using metadata-first + semantic ranking for decisions", {}); const metadataResults = this.sessionSearch.findByType("decision", filters); if (metadataResults.length > 0) { const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.queryChroma("decision", Math.min(ids.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (ids.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } if (rankedIds.length > 0) { results = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); results.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } } catch (chromaError) { logger.error("SEARCH", "Chroma search failed for decisions, falling back to metadata search", {}, chromaError); } } if (results.length === 0) { results = this.sessionSearch.findByType("decision", filters); } if (results.length === 0) { return { content: [{ type: "text", text: "No decision observations found" }] }; } const header = `Found ${results.length} decision(s) ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async changes(args) { const normalized = this.normalizeParams(args); const { ...filters } = normalized; let results = []; if (this.chromaSync) { try { logger.debug("SEARCH", "Using hybrid search for change-related observations", {}); const typeResults = this.sessionSearch.findByType("change", filters); const conceptChangeResults = this.sessionSearch.findByConcept("change", filters); const conceptWhatChangedResults = this.sessionSearch.findByConcept("what-changed", filters); const allIds = new Set; [...typeResults, ...conceptChangeResults, ...conceptWhatChangedResults].forEach((obs) => allIds.add(obs.id)); if (allIds.size > 0) { const idsArray = Array.from(allIds); const chromaResults = await this.queryChroma("what changed", Math.min(idsArray.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (idsArray.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } if (rankedIds.length > 0) { results = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); results.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } catch (chromaError) { logger.error("SEARCH", "Chroma search failed for changes, falling back to metadata search", {}, chromaError); } } if (results.length === 0) { const typeResults = this.sessionSearch.findByType("change", filters); const conceptResults = this.sessionSearch.findByConcept("change", filters); const whatChangedResults = this.sessionSearch.findByConcept("what-changed", filters); const allIds = new Set; [...typeResults, ...conceptResults, ...whatChangedResults].forEach((obs) => allIds.add(obs.id)); results = Array.from(allIds).map((id) => typeResults.find((obs) => obs.id === id) || conceptResults.find((obs) => obs.id === id) || whatChangedResults.find((obs) => obs.id === id)).filter(Boolean); results.sort((a, b) => b.created_at_epoch - a.created_at_epoch); results = results.slice(0, filters.limit || 20); } if (results.length === 0) { return { content: [{ type: "text", text: "No change-related observations found" }] }; } const header = `Found ${results.length} change-related observation(s) ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async howItWorks(args) { const normalized = this.normalizeParams(args); const { ...filters } = normalized; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using metadata-first + semantic ranking for how-it-works", {}); const metadataResults = this.sessionSearch.findByConcept("how-it-works", filters); if (metadataResults.length > 0) { const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.queryChroma("how it works architecture", Math.min(ids.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (ids.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } if (rankedIds.length > 0) { results = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); results.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } if (results.length === 0) { results = this.sessionSearch.findByConcept("how-it-works", filters); } if (results.length === 0) { return { content: [{ type: "text", text: 'No "how it works" observations found' }] }; } const header = `Found ${results.length} "how it works" observation(s) ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async searchObservations(args) { const normalized = this.normalizeParams(args); const { query: query2, ...options } = normalized; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using hybrid semantic search (Chroma + SQLite)", {}); const chromaResults = await this.queryChroma(query2, 100); logger.debug("SEARCH", "Chroma returned semantic matches", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const recentIds = chromaResults.ids.filter((_id, idx) => { const meta2 = chromaResults.metadatas[idx]; return meta2 && meta2.created_at_epoch > ninetyDaysAgo; }); logger.debug("SEARCH", "Results within 90-day window", { count: recentIds.length }); if (recentIds.length > 0) { const limit = options.limit || 20; results = this.sessionStore.getObservationsByIds(recentIds, { orderBy: "date_desc", limit }); logger.debug("SEARCH", "Hydrated observations from SQLite", { count: results.length }); } } } if (results.length === 0) { return { content: [{ type: "text", text: `No observations found matching "${query2}"` }] }; } const header = `Found ${results.length} observation(s) matching "${query2}" ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async searchSessions(args) { const normalized = this.normalizeParams(args); const { query: query2, ...options } = normalized; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using hybrid semantic search for sessions", {}); const chromaResults = await this.queryChroma(query2, 100, { doc_type: "session_summary" }); logger.debug("SEARCH", "Chroma returned semantic matches for sessions", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const recentIds = chromaResults.ids.filter((_id, idx) => { const meta2 = chromaResults.metadatas[idx]; return meta2 && meta2.created_at_epoch > ninetyDaysAgo; }); logger.debug("SEARCH", "Results within 90-day window", { count: recentIds.length }); if (recentIds.length > 0) { const limit = options.limit || 20; results = this.sessionStore.getSessionSummariesByIds(recentIds, { orderBy: "date_desc", limit }); logger.debug("SEARCH", "Hydrated sessions from SQLite", { count: results.length }); } } } if (results.length === 0) { return { content: [{ type: "text", text: `No sessions found matching "${query2}"` }] }; } const header = `Found ${results.length} session(s) matching "${query2}" ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((session, i) => this.formatter.formatSessionIndex(session, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async searchUserPrompts(args) { const normalized = this.normalizeParams(args); const { query: query2, ...options } = normalized; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using hybrid semantic search for user prompts", {}); const chromaResults = await this.queryChroma(query2, 100, { doc_type: "user_prompt" }); logger.debug("SEARCH", "Chroma returned semantic matches for prompts", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const recentIds = chromaResults.ids.filter((_id, idx) => { const meta2 = chromaResults.metadatas[idx]; return meta2 && meta2.created_at_epoch > ninetyDaysAgo; }); logger.debug("SEARCH", "Results within 90-day window", { count: recentIds.length }); if (recentIds.length > 0) { const limit = options.limit || 20; results = this.sessionStore.getUserPromptsByIds(recentIds, { orderBy: "date_desc", limit }); logger.debug("SEARCH", "Hydrated user prompts from SQLite", { count: results.length }); } } } if (results.length === 0) { return { content: [{ type: "text", text: query2 ? `No user prompts found matching "${query2}"` : "No user prompts found" }] }; } const header = `Found ${results.length} user prompt(s) matching "${query2}" ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((prompt, i) => this.formatter.formatUserPromptIndex(prompt, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async findByConcept(args) { const normalized = this.normalizeParams(args); const { concepts: concept, ...filters } = normalized; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using metadata-first + semantic ranking for concept search", {}); const metadataResults = this.sessionSearch.findByConcept(concept, filters); logger.debug("SEARCH", "Found observations with concept", { concept, count: metadataResults.length }); if (metadataResults.length > 0) { const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.queryChroma(concept, Math.min(ids.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (ids.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } logger.debug("SEARCH", "Chroma ranked results by semantic relevance", { count: rankedIds.length }); if (rankedIds.length > 0) { results = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); results.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } if (results.length === 0) { logger.debug("SEARCH", "Using SQLite-only concept search", {}); results = this.sessionSearch.findByConcept(concept, filters); } if (results.length === 0) { return { content: [{ type: "text", text: `No observations found with concept "${concept}"` }] }; } const header = `Found ${results.length} observation(s) with concept "${concept}" ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async findByFile(args) { const normalized = this.normalizeParams(args); const { files: rawFilePath, ...filters } = normalized; const filePath = Array.isArray(rawFilePath) ? rawFilePath[0] : rawFilePath; let observations = []; let sessions = []; if (this.chromaSync) { logger.debug("SEARCH", "Using metadata-first + semantic ranking for file search", {}); const metadataResults = this.sessionSearch.findByFile(filePath, filters); logger.debug("SEARCH", "Found results for file", { file: filePath, observations: metadataResults.observations.length, sessions: metadataResults.sessions.length }); sessions = metadataResults.sessions; if (metadataResults.observations.length > 0) { const ids = metadataResults.observations.map((obs) => obs.id); const chromaResults = await this.queryChroma(filePath, Math.min(ids.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (ids.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } logger.debug("SEARCH", "Chroma ranked observations by semantic relevance", { count: rankedIds.length }); if (rankedIds.length > 0) { observations = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); observations.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } if (observations.length === 0 && sessions.length === 0) { logger.debug("SEARCH", "Using SQLite-only file search", {}); const results = this.sessionSearch.findByFile(filePath, filters); observations = results.observations; sessions = results.sessions; } const totalResults = observations.length + sessions.length; if (totalResults === 0) { return { content: [{ type: "text", text: `No results found for file "${filePath}"` }] }; } const combined = [ ...observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch, created_at: obs.created_at })), ...sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch, created_at: sess.created_at })) ]; combined.sort((a, b) => b.epoch - a.epoch); const resultsByDate = groupByDate(combined, (item) => item.created_at); const lines = []; lines.push(`Found ${totalResults} result(s) for file "${filePath}"`); lines.push(""); for (const [day, dayResults] of resultsByDate) { lines.push(`### ${day}`); lines.push(""); lines.push(this.formatter.formatTableHeader()); for (const result of dayResults) { if (result.type === "observation") { lines.push(this.formatter.formatObservationIndex(result.data, 0)); } else { lines.push(this.formatter.formatSessionIndex(result.data, 0)); } } lines.push(""); } return { content: [{ type: "text", text: lines.join(` `) }] }; } async findByType(args) { const normalized = this.normalizeParams(args); const { type, ...filters } = normalized; const typeStr = Array.isArray(type) ? type.join(", ") : type; let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using metadata-first + semantic ranking for type search", {}); const metadataResults = this.sessionSearch.findByType(type, filters); logger.debug("SEARCH", "Found observations with type", { type: typeStr, count: metadataResults.length }); if (metadataResults.length > 0) { const ids = metadataResults.map((obs) => obs.id); const chromaResults = await this.queryChroma(typeStr, Math.min(ids.length, 100)); const rankedIds = []; for (const chromaId of chromaResults.ids) { if (ids.includes(chromaId) && !rankedIds.includes(chromaId)) { rankedIds.push(chromaId); } } logger.debug("SEARCH", "Chroma ranked results by semantic relevance", { count: rankedIds.length }); if (rankedIds.length > 0) { results = this.sessionStore.getObservationsByIds(rankedIds, { limit: filters.limit || 20 }); results.sort((a, b) => rankedIds.indexOf(a.id) - rankedIds.indexOf(b.id)); } } } if (results.length === 0) { logger.debug("SEARCH", "Using SQLite-only type search", {}); results = this.sessionSearch.findByType(type, filters); } if (results.length === 0) { return { content: [{ type: "text", text: `No observations found with type "${typeStr}"` }] }; } const header = `Found ${results.length} observation(s) with type "${typeStr}" ${this.formatter.formatTableHeader()}`; const formattedResults = results.map((obs, i) => this.formatter.formatObservationIndex(obs, i)); return { content: [{ type: "text", text: header + ` ` + formattedResults.join(` `) }] }; } async getRecentContext(args) { const project = args.project || basename3(process.cwd()); const limit = args.limit || 3; const sessions = this.sessionStore.getRecentSessionsWithStatus(project, limit); if (sessions.length === 0) { return { content: [{ type: "text", text: `# Recent Session Context No previous sessions found for project "${project}".` }] }; } const lines = []; lines.push("# Recent Session Context"); lines.push(""); lines.push(`Showing last ${sessions.length} session(s) for **${project}**:`); lines.push(""); for (const session of sessions) { if (!session.memory_session_id) continue; lines.push("---"); lines.push(""); if (session.has_summary) { const summary = this.sessionStore.getSummaryForSession(session.memory_session_id); if (summary) { const promptLabel = summary.prompt_number ? ` (Prompt #${summary.prompt_number})` : ""; lines.push(`**Summary${promptLabel}**`); lines.push(""); if (summary.request) lines.push(`**Request:** ${summary.request}`); if (summary.completed) lines.push(`**Completed:** ${summary.completed}`); if (summary.learned) lines.push(`**Learned:** ${summary.learned}`); if (summary.next_steps) lines.push(`**Next Steps:** ${summary.next_steps}`); if (summary.files_read) { try { const filesRead = JSON.parse(summary.files_read); if (Array.isArray(filesRead) && filesRead.length > 0) { lines.push(`**Files Read:** ${filesRead.join(", ")}`); } } catch (error3) { logger.debug("WORKER", "files_read is plain string, using as-is", {}, error3); if (summary.files_read.trim()) { lines.push(`**Files Read:** ${summary.files_read}`); } } } if (summary.files_edited) { try { const filesEdited = JSON.parse(summary.files_edited); if (Array.isArray(filesEdited) && filesEdited.length > 0) { lines.push(`**Files Edited:** ${filesEdited.join(", ")}`); } } catch (error3) { logger.debug("WORKER", "files_edited is plain string, using as-is", {}, error3); if (summary.files_edited.trim()) { lines.push(`**Files Edited:** ${summary.files_edited}`); } } } const date5 = new Date(summary.created_at).toLocaleString(); lines.push(`**Date:** ${date5}`); } } else if (session.status === "active") { lines.push("**In Progress**"); lines.push(""); if (session.user_prompt) { lines.push(`**Request:** ${session.user_prompt}`); } const observations = this.sessionStore.getObservationsForSession(session.memory_session_id); if (observations.length > 0) { lines.push(""); lines.push(`**Observations (${observations.length}):**`); for (const obs of observations) { lines.push(`- ${obs.title}`); } } else { lines.push(""); lines.push("*No observations yet*"); } lines.push(""); lines.push("**Status:** Active - summary pending"); const date5 = new Date(session.started_at).toLocaleString(); lines.push(`**Date:** ${date5}`); } else { lines.push(`**${session.status.charAt(0).toUpperCase() + session.status.slice(1)}**`); lines.push(""); if (session.user_prompt) { lines.push(`**Request:** ${session.user_prompt}`); } lines.push(""); lines.push(`**Status:** ${session.status} - no summary available`); const date5 = new Date(session.started_at).toLocaleString(); lines.push(`**Date:** ${date5}`); } lines.push(""); } return { content: [{ type: "text", text: lines.join(` `) }] }; } async getContextTimeline(args) { const { anchor, depth_before = 10, depth_after = 10, project } = args; const cwd2 = process.cwd(); let anchorEpoch; let anchorId = anchor; let timelineData; if (typeof anchor === "number") { const obs = this.sessionStore.getObservationById(anchor); if (!obs) { return { content: [{ type: "text", text: `Observation #${anchor} not found` }], isError: true }; } anchorEpoch = obs.created_at_epoch; timelineData = this.sessionStore.getTimelineAroundObservation(anchor, anchorEpoch, depth_before, depth_after, project); } else if (typeof anchor === "string") { if (anchor.startsWith("S") || anchor.startsWith("#S")) { const sessionId = anchor.replace(/^#?S/, ""); const sessionNum = parseInt(sessionId, 10); const sessions = this.sessionStore.getSessionSummariesByIds([sessionNum]); if (sessions.length === 0) { return { content: [{ type: "text", text: `Session #${sessionNum} not found` }], isError: true }; } anchorEpoch = sessions[0].created_at_epoch; anchorId = `S${sessionNum}`; timelineData = this.sessionStore.getTimelineAroundTimestamp(anchorEpoch, depth_before, depth_after, project); } else { const date5 = new Date(anchor); if (isNaN(date5.getTime())) { return { content: [{ type: "text", text: `Invalid timestamp: ${anchor}` }], isError: true }; } anchorEpoch = date5.getTime(); timelineData = this.sessionStore.getTimelineAroundTimestamp(anchorEpoch, depth_before, depth_after, project); } } else { return { content: [{ type: "text", text: 'Invalid anchor: must be observation ID (number), session ID (e.g., "S123"), or ISO timestamp' }], isError: true }; } const items = [ ...timelineData.observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch })), ...timelineData.sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch })), ...timelineData.prompts.map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch })) ]; items.sort((a, b) => a.epoch - b.epoch); const filteredItems = this.timelineService.filterByDepth(items, anchorId, anchorEpoch, depth_before, depth_after); if (!filteredItems || filteredItems.length === 0) { const anchorDate = new Date(anchorEpoch).toLocaleString(); return { content: [{ type: "text", text: `No context found around ${anchorDate} (${depth_before} records before, ${depth_after} records after)` }] }; } const lines = []; lines.push(`# Timeline around anchor: ${anchorId}`); lines.push(`**Window:** ${depth_before} records before -> ${depth_after} records after | **Items:** ${filteredItems?.length ?? 0}`); lines.push(""); const dayMap = new Map; for (const item of filteredItems) { const day = formatDate(item.epoch); if (!dayMap.has(day)) { dayMap.set(day, []); } dayMap.get(day).push(item); } const sortedDays = Array.from(dayMap.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); for (const [day, dayItems] of sortedDays) { lines.push(`### ${day}`); lines.push(""); let currentFile = null; let lastTime = ""; let tableOpen = false; for (const item of dayItems) { const isAnchor = typeof anchorId === "number" && item.type === "observation" && item.data.id === anchorId || typeof anchorId === "string" && anchorId.startsWith("S") && item.type === "session" && `S${item.data.id}` === anchorId; if (item.type === "session") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const sess = item.data; const title = sess.request || "Session summary"; const marker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`**\uD83C\uDFAF #S${sess.id}** ${title} (${formatDateTime(item.epoch)})${marker}`); lines.push(""); } else if (item.type === "prompt") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const prompt = item.data; const truncated = prompt.prompt_text.length > 100 ? prompt.prompt_text.substring(0, 100) + "..." : prompt.prompt_text; lines.push(`**\uD83D\uDCAC User Prompt #${prompt.prompt_number}** (${formatDateTime(item.epoch)})`); lines.push(`> ${truncated}`); lines.push(""); } else if (item.type === "observation") { const obs = item.data; const file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); if (file !== currentFile) { if (tableOpen) { lines.push(""); } lines.push(`**${file}**`); lines.push(`| ID | Time | T | Title | Tokens |`); lines.push(`|----|------|---|-------|--------|`); currentFile = file; tableOpen = true; lastTime = ""; } const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = formatTime(item.epoch); const title = obs.title || "Untitled"; const tokens = estimateTokens(obs.narrative); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : '"'; lastTime = time4; const anchorMarker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title}${anchorMarker} | ~${tokens} |`); } } if (tableOpen) { lines.push(""); } } return { content: [{ type: "text", text: lines.join(` `) }] }; } async getTimelineByQuery(args) { const { query: query2, mode = "auto", depth_before = 10, depth_after = 10, limit = 5, project } = args; const cwd2 = process.cwd(); let results = []; if (this.chromaSync) { logger.debug("SEARCH", "Using hybrid semantic search for timeline query", {}); const chromaResults = await this.queryChroma(query2, 100); logger.debug("SEARCH", "Chroma returned semantic matches for timeline", { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; const recentIds = chromaResults.ids.filter((_id, idx) => { const meta2 = chromaResults.metadatas[idx]; return meta2 && meta2.created_at_epoch > ninetyDaysAgo; }); logger.debug("SEARCH", "Results within 90-day window", { count: recentIds.length }); if (recentIds.length > 0) { results = this.sessionStore.getObservationsByIds(recentIds, { orderBy: "date_desc", limit: mode === "auto" ? 1 : limit }); logger.debug("SEARCH", "Hydrated observations from SQLite", { count: results.length }); } } } if (results.length === 0) { return { content: [{ type: "text", text: `No observations found matching "${query2}". Try a different search query.` }] }; } if (mode === "interactive") { const lines = []; lines.push(`# Timeline Anchor Search Results`); lines.push(""); lines.push(`Found ${results.length} observation(s) matching "${query2}"`); lines.push(""); lines.push(`To get timeline context around any of these observations, use the \`get_context_timeline\` tool with the observation ID as the anchor.`); lines.push(""); lines.push(`**Top ${results.length} matches:**`); lines.push(""); for (let i = 0;i < results.length; i++) { const obs = results[i]; const title = obs.title || `Observation #${obs.id}`; const date5 = new Date(obs.created_at_epoch).toLocaleString(); const type = obs.type ? `[${obs.type}]` : ""; lines.push(`${i + 1}. **${type} ${title}**`); lines.push(` - ID: ${obs.id}`); lines.push(` - Date: ${date5}`); if (obs.subtitle) { lines.push(` - ${obs.subtitle}`); } lines.push(""); } return { content: [{ type: "text", text: lines.join(` `) }] }; } else { const topResult = results[0]; logger.debug("SEARCH", "Auto mode: Using observation as timeline anchor", { observationId: topResult.id }); const timelineData = this.sessionStore.getTimelineAroundObservation(topResult.id, topResult.created_at_epoch, depth_before, depth_after, project); const items = [ ...(timelineData.observations || []).map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch })), ...(timelineData.sessions || []).map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch })), ...(timelineData.prompts || []).map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch })) ]; items.sort((a, b) => a.epoch - b.epoch); const filteredItems = this.timelineService.filterByDepth(items, topResult.id, 0, depth_before, depth_after); if (!filteredItems || filteredItems.length === 0) { return { content: [{ type: "text", text: `Found observation #${topResult.id} matching "${query2}", but no timeline context available (${depth_before} records before, ${depth_after} records after).` }] }; } const lines = []; lines.push(`# Timeline for query: "${query2}"`); lines.push(`**Anchor:** Observation #${topResult.id} - ${topResult.title || "Untitled"}`); lines.push(`**Window:** ${depth_before} records before -> ${depth_after} records after | **Items:** ${filteredItems?.length ?? 0}`); lines.push(""); const dayMap = new Map; for (const item of filteredItems) { const day = formatDate(item.epoch); if (!dayMap.has(day)) { dayMap.set(day, []); } dayMap.get(day).push(item); } const sortedDays = Array.from(dayMap.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); for (const [day, dayItems] of sortedDays) { lines.push(`### ${day}`); lines.push(""); let currentFile = null; let lastTime = ""; let tableOpen = false; for (const item of dayItems) { const isAnchor = item.type === "observation" && item.data.id === topResult.id; if (item.type === "session") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const sess = item.data; const title = sess.request || "Session summary"; lines.push(`**\uD83C\uDFAF #S${sess.id}** ${title} (${formatDateTime(item.epoch)})`); lines.push(""); } else if (item.type === "prompt") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const prompt = item.data; const truncated = prompt.prompt_text.length > 100 ? prompt.prompt_text.substring(0, 100) + "..." : prompt.prompt_text; lines.push(`**\uD83D\uDCAC User Prompt #${prompt.prompt_number}** (${formatDateTime(item.epoch)})`); lines.push(`> ${truncated}`); lines.push(""); } else if (item.type === "observation") { const obs = item.data; const file = extractFirstFile(obs.files_modified, cwd2, obs.files_read); if (file !== currentFile) { if (tableOpen) { lines.push(""); } lines.push(`**${file}**`); lines.push(`| ID | Time | T | Title | Tokens |`); lines.push(`|----|------|---|-------|--------|`); currentFile = file; tableOpen = true; lastTime = ""; } const icon = ModeManager.getInstance().getTypeIcon(obs.type); const time4 = formatTime(item.epoch); const title = obs.title || "Untitled"; const tokens = estimateTokens(obs.narrative); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : '"'; lastTime = time4; const anchorMarker = isAnchor ? " <- **ANCHOR**" : ""; lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title}${anchorMarker} | ~${tokens} |`); } } if (tableOpen) { lines.push(""); } } return { content: [{ type: "text", text: lines.join(` `) }] }; } } } // src/services/worker/FormattingService.ts init_ModeManager(); var CHARS_PER_TOKEN_ESTIMATE3 = 4; class FormattingService { formatSearchTips() { return ` --- \uD83D\uDCA1 Search Strategy: 1. Search with index to see titles, dates, IDs 2. Use timeline to get context around interesting results 3. Batch fetch full details: get_observations(ids=[...]) Tips: • Filter by type: obs_type="bugfix,feature" • Filter by date: dateStart="2025-01-01" • Sort: orderBy="date_desc" or "date_asc"`; } formatTime(epoch) { return new Date(epoch).toLocaleString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }); } estimateReadTokens(obs) { const size = (obs.title?.length || 0) + (obs.subtitle?.length || 0) + (obs.narrative?.length || 0) + (obs.facts?.length || 0); return Math.ceil(size / CHARS_PER_TOKEN_ESTIMATE3); } formatObservationIndex(obs, _index) { const id = `#${obs.id}`; const time4 = this.formatTime(obs.created_at_epoch); const icon = ModeManager.getInstance().getTypeIcon(obs.type); const title = obs.title || "Untitled"; const readTokens = this.estimateReadTokens(obs); const workEmoji = ModeManager.getInstance().getWorkEmoji(obs.type); const workTokens = obs.discovery_tokens || 0; const workDisplay = workTokens > 0 ? `${workEmoji} ${workTokens}` : "-"; return `| ${id} | ${time4} | ${icon} | ${title} | ~${readTokens} | ${workDisplay} |`; } formatSessionIndex(session, _index) { const id = `#S${session.id}`; const time4 = this.formatTime(session.created_at_epoch); const icon = "\uD83C\uDFAF"; const title = session.request || `Session ${session.memory_session_id?.substring(0, 8) || "unknown"}`; return `| ${id} | ${time4} | ${icon} | ${title} | - | - |`; } formatUserPromptIndex(prompt, _index) { const id = `#P${prompt.id}`; const time4 = this.formatTime(prompt.created_at_epoch); const icon = "\uD83D\uDCAC"; const title = prompt.prompt_text.length > 60 ? prompt.prompt_text.substring(0, 57) + "..." : prompt.prompt_text; return `| ${id} | ${time4} | ${icon} | ${title} | - | - |`; } formatTableHeader() { return `| ID | Time | T | Title | Read | Work | |-----|------|---|-------|------|------|`; } formatSearchTableHeader() { return `| ID | Time | T | Title | Read | |----|------|---|-------|------|`; } formatObservationSearchRow(obs, lastTime) { const id = `#${obs.id}`; const time4 = this.formatTime(obs.created_at_epoch); const icon = ModeManager.getInstance().getTypeIcon(obs.type); const title = obs.title || "Untitled"; const readTokens = this.estimateReadTokens(obs); const timeDisplay = time4 === lastTime ? "″" : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | ~${readTokens} |`, time: time4 }; } formatSessionSearchRow(session, lastTime) { const id = `#S${session.id}`; const time4 = this.formatTime(session.created_at_epoch); const icon = "\uD83C\uDFAF"; const title = session.request || `Session ${session.memory_session_id?.substring(0, 8) || "unknown"}`; const timeDisplay = time4 === lastTime ? "″" : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | - |`, time: time4 }; } formatUserPromptSearchRow(prompt, lastTime) { const id = `#P${prompt.id}`; const time4 = this.formatTime(prompt.created_at_epoch); const icon = "\uD83D\uDCAC"; const title = prompt.prompt_text.length > 60 ? prompt.prompt_text.substring(0, 57) + "..." : prompt.prompt_text; const timeDisplay = time4 === lastTime ? "″" : time4; return { row: `| ${id} | ${timeDisplay} | ${icon} | ${title} | - |`, time: time4 }; } } // src/services/worker/TimelineService.ts init_ModeManager(); class TimelineService { buildTimeline(data) { const items = [ ...data.observations.map((obs) => ({ type: "observation", data: obs, epoch: obs.created_at_epoch })), ...data.sessions.map((sess) => ({ type: "session", data: sess, epoch: sess.created_at_epoch })), ...data.prompts.map((prompt) => ({ type: "prompt", data: prompt, epoch: prompt.created_at_epoch })) ]; items.sort((a, b) => a.epoch - b.epoch); return items; } filterByDepth(items, anchorId, anchorEpoch, depth_before, depth_after) { if (items.length === 0) return items; let anchorIndex = -1; if (typeof anchorId === "number") { anchorIndex = items.findIndex((item) => item.type === "observation" && item.data.id === anchorId); } else if (typeof anchorId === "string" && anchorId.startsWith("S")) { const sessionNum = parseInt(anchorId.slice(1), 10); anchorIndex = items.findIndex((item) => item.type === "session" && item.data.id === sessionNum); } else { anchorIndex = items.findIndex((item) => item.epoch >= anchorEpoch); if (anchorIndex === -1) anchorIndex = items.length - 1; } if (anchorIndex === -1) return items; const startIndex = Math.max(0, anchorIndex - depth_before); const endIndex = Math.min(items.length, anchorIndex + depth_after + 1); return items.slice(startIndex, endIndex); } formatTimeline(items, anchorId, query2, depth_before, depth_after) { if (items.length === 0) { return query2 ? `Found observation matching "${query2}", but no timeline context available.` : "No timeline items found"; } const lines = []; if (query2 && anchorId) { const anchorObs = items.find((item) => item.type === "observation" && item.data.id === anchorId); const anchorTitle = anchorObs ? anchorObs.data.title || "Untitled" : "Unknown"; lines.push(`# Timeline for query: "${query2}"`); lines.push(`**Anchor:** Observation #${anchorId} - ${anchorTitle}`); } else if (anchorId) { lines.push(`# Timeline around anchor: ${anchorId}`); } else { lines.push(`# Timeline`); } if (depth_before !== undefined && depth_after !== undefined) { lines.push(`**Window:** ${depth_before} records before → ${depth_after} records after | **Items:** ${items.length}`); } else { lines.push(`**Items:** ${items.length}`); } lines.push(""); lines.push(`**Legend:** \uD83C\uDFAF session-request | \uD83D\uDD34 bugfix | \uD83D\uDFE3 feature | \uD83D\uDD04 refactor | ✅ change | \uD83D\uDD35 discovery | \uD83E\uDDE0 decision`); lines.push(""); const dayMap = new Map; for (const item of items) { const day = this.formatDate(item.epoch); if (!dayMap.has(day)) { dayMap.set(day, []); } dayMap.get(day).push(item); } const sortedDays = Array.from(dayMap.entries()).sort((a, b) => { const aDate = new Date(a[0]).getTime(); const bDate = new Date(b[0]).getTime(); return aDate - bDate; }); for (const [day, dayItems] of sortedDays) { lines.push(`### ${day}`); lines.push(""); let currentFile = null; let lastTime = ""; let tableOpen = false; for (const item of dayItems) { const isAnchor = typeof anchorId === "number" && item.type === "observation" && item.data.id === anchorId || typeof anchorId === "string" && anchorId.startsWith("S") && item.type === "session" && `S${item.data.id}` === anchorId; if (item.type === "session") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const sess = item.data; const title = sess.request || "Session summary"; const marker = isAnchor ? " ← **ANCHOR**" : ""; lines.push(`**\uD83C\uDFAF #S${sess.id}** ${title} (${this.formatDateTime(item.epoch)})${marker}`); lines.push(""); } else if (item.type === "prompt") { if (tableOpen) { lines.push(""); tableOpen = false; currentFile = null; lastTime = ""; } const prompt = item.data; const truncated = prompt.prompt_text.length > 100 ? prompt.prompt_text.substring(0, 100) + "..." : prompt.prompt_text; lines.push(`**\uD83D\uDCAC User Prompt #${prompt.prompt_number}** (${this.formatDateTime(item.epoch)})`); lines.push(`> ${truncated}`); lines.push(""); } else if (item.type === "observation") { const obs = item.data; const file = "General"; if (file !== currentFile) { if (tableOpen) { lines.push(""); } lines.push(`**${file}**`); lines.push(`| ID | Time | T | Title | Tokens |`); lines.push(`|----|------|---|-------|--------|`); currentFile = file; tableOpen = true; lastTime = ""; } const icon = this.getTypeIcon(obs.type); const time4 = this.formatTime(item.epoch); const title = obs.title || "Untitled"; const tokens = this.estimateTokens(obs.narrative); const showTime = time4 !== lastTime; const timeDisplay = showTime ? time4 : "″"; lastTime = time4; const anchorMarker = isAnchor ? " ← **ANCHOR**" : ""; lines.push(`| #${obs.id} | ${timeDisplay} | ${icon} | ${title}${anchorMarker} | ~${tokens} |`); } } if (tableOpen) { lines.push(""); } } return lines.join(` `); } getTypeIcon(type) { return ModeManager.getInstance().getTypeIcon(type); } formatDate(epochMs) { const date5 = new Date(epochMs); return date5.toLocaleString("en-US", { month: "short", day: "numeric", year: "numeric" }); } formatTime(epochMs) { const date5 = new Date(epochMs); return date5.toLocaleString("en-US", { hour: "numeric", minute: "2-digit", hour12: true }); } formatDateTime(epochMs) { const date5 = new Date(epochMs); return date5.toLocaleString("en-US", { month: "short", day: "numeric", hour: "numeric", minute: "2-digit", hour12: true }); } estimateTokens(text) { if (!text) return 0; return Math.ceil(text.length / 4); } } // src/services/worker/events/SessionEventBroadcaster.ts class SessionEventBroadcaster { sseBroadcaster; workerService; constructor(sseBroadcaster, workerService) { this.sseBroadcaster = sseBroadcaster; this.workerService = workerService; } broadcastNewPrompt(prompt) { this.sseBroadcaster.broadcast({ type: "new_prompt", prompt }); this.sseBroadcaster.broadcast({ type: "processing_status", isProcessing: true }); this.workerService.broadcastProcessingStatus(); } broadcastSessionStarted(sessionDbId, project) { this.sseBroadcaster.broadcast({ type: "session_started", sessionDbId, project }); this.workerService.broadcastProcessingStatus(); } broadcastObservationQueued(sessionDbId) { this.sseBroadcaster.broadcast({ type: "observation_queued", sessionDbId }); this.workerService.broadcastProcessingStatus(); } broadcastSessionCompleted(sessionDbId) { this.sseBroadcaster.broadcast({ type: "session_completed", timestamp: Date.now(), sessionDbId }); this.workerService.broadcastProcessingStatus(); } broadcastSummarizeQueued() { this.workerService.broadcastProcessingStatus(); } } // src/services/worker/http/routes/ViewerRoutes.ts init_paths(); var import_express3 = __toESM(require_express(), 1); import path15 from "path"; import { readFileSync as readFileSync15, existsSync as existsSync14 } from "fs"; // src/services/worker/http/BaseRouteHandler.ts init_logger(); class BaseRouteHandler { wrapHandler(handler) { return (req, res) => { try { const result = handler(req, res); if (result instanceof Promise) { result.catch((error3) => this.handleError(res, error3)); } } catch (error3) { logger.error("HTTP", "Route handler error", { path: req.path }, error3); this.handleError(res, error3); } }; } parseIntParam(req, res, paramName) { const value = parseInt(req.params[paramName], 10); if (isNaN(value)) { this.badRequest(res, `Invalid ${paramName}`); return null; } return value; } validateRequired(req, res, params) { for (const param of params) { if (req.body[param] === undefined || req.body[param] === null) { this.badRequest(res, `Missing ${param}`); return false; } } return true; } badRequest(res, message) { res.status(400).json({ error: message }); } notFound(res, message) { res.status(404).json({ error: message }); } handleError(res, error3, context) { logger.failure("WORKER", context || "Request failed", {}, error3); if (!res.headersSent) { res.status(500).json({ error: error3.message }); } } } // src/services/worker/http/routes/ViewerRoutes.ts class ViewerRoutes extends BaseRouteHandler { sseBroadcaster; dbManager; sessionManager; constructor(sseBroadcaster, dbManager, sessionManager) { super(); this.sseBroadcaster = sseBroadcaster; this.dbManager = dbManager; this.sessionManager = sessionManager; } setupRoutes(app) { const packageRoot = getPackageRoot(); app.use(import_express3.default.static(path15.join(packageRoot, "ui"))); app.get("/health", this.handleHealth.bind(this)); app.get("/", this.handleViewerUI.bind(this)); app.get("/stream", this.handleSSEStream.bind(this)); } handleHealth = this.wrapHandler((req, res) => { res.json({ status: "ok", timestamp: Date.now() }); }); handleViewerUI = this.wrapHandler((req, res) => { const packageRoot = getPackageRoot(); const viewerPaths = [ path15.join(packageRoot, "ui", "viewer.html"), path15.join(packageRoot, "plugin", "ui", "viewer.html") ]; const viewerPath = viewerPaths.find((p) => existsSync14(p)); if (!viewerPath) { throw new Error("Viewer UI not found at any expected location"); } const html = readFileSync15(viewerPath, "utf-8"); res.setHeader("Content-Type", "text/html"); res.send(html); }); handleSSEStream = this.wrapHandler((req, res) => { res.setHeader("Content-Type", "text/event-stream"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Connection", "keep-alive"); this.sseBroadcaster.addClient(res); const allProjects = this.dbManager.getSessionStore().getAllProjects(); this.sseBroadcaster.broadcast({ type: "initial_load", projects: allProjects, timestamp: Date.now() }); const isProcessing = this.sessionManager.isAnySessionProcessing(); const queueDepth = this.sessionManager.getTotalActiveWork(); this.sseBroadcaster.broadcast({ type: "processing_status", isProcessing, queueDepth }); }); } // src/services/worker/http/routes/SessionRoutes.ts init_worker_utils(); init_logger(); // src/utils/tag-stripping.ts init_logger(); var MAX_TAG_COUNT = 100; function countTags(content) { const privateCount = (content.match(//g) || []).length; const contextCount = (content.match(//g) || []).length; const systemInstructionCount = (content.match(//g) || []).length; const systemInstructionHyphenCount = (content.match(//g) || []).length; return privateCount + contextCount + systemInstructionCount + systemInstructionHyphenCount; } function stripTagsInternal(content) { const tagCount = countTags(content); if (tagCount > MAX_TAG_COUNT) { logger.warn("SYSTEM", "tag count exceeds limit", undefined, { tagCount, maxAllowed: MAX_TAG_COUNT, contentLength: content.length }); } return content.replace(/[\s\S]*?<\/claude-mem-context>/g, "").replace(/[\s\S]*?<\/private>/g, "").replace(/[\s\S]*?<\/system_instruction>/g, "").replace(/[\s\S]*?<\/system-instruction>/g, "").trim(); } function stripMemoryTagsFromJson(content) { return stripTagsInternal(content); } function stripMemoryTagsFromPrompt(content) { return stripTagsInternal(content); } // src/services/worker/session/SessionCompletionHandler.ts class SessionCompletionHandler { sessionManager; eventBroadcaster; constructor(sessionManager, eventBroadcaster) { this.sessionManager = sessionManager; this.eventBroadcaster = eventBroadcaster; } async completeByDbId(sessionDbId) { await this.sessionManager.deleteSession(sessionDbId); this.eventBroadcaster.broadcastSessionCompleted(sessionDbId); } } // src/services/worker/validation/PrivacyCheckValidator.ts init_logger(); class PrivacyCheckValidator { static checkUserPromptPrivacy(store, contentSessionId, promptNumber, operationType, sessionDbId, additionalContext) { const userPrompt = store.getUserPrompt(contentSessionId, promptNumber); if (!userPrompt || userPrompt.trim() === "") { logger.debug("HOOK", `Skipping ${operationType} - user prompt was entirely private`, { sessionId: sessionDbId, promptNumber, ...additionalContext }); return null; } return userPrompt; } } // src/services/worker/http/routes/SessionRoutes.ts init_SettingsDefaultsManager(); init_paths(); class SessionRoutes extends BaseRouteHandler { sessionManager; dbManager; sdkAgent; geminiAgent; openRouterAgent; eventBroadcaster; workerService; completionHandler; spawnInProgress = new Map; crashRecoveryScheduled = new Set; constructor(sessionManager, dbManager, sdkAgent, geminiAgent, openRouterAgent, eventBroadcaster, workerService) { super(); this.sessionManager = sessionManager; this.dbManager = dbManager; this.sdkAgent = sdkAgent; this.geminiAgent = geminiAgent; this.openRouterAgent = openRouterAgent; this.eventBroadcaster = eventBroadcaster; this.workerService = workerService; this.completionHandler = new SessionCompletionHandler(sessionManager, eventBroadcaster); } getActiveAgent() { if (isOpenRouterSelected()) { if (isOpenRouterAvailable()) { logger.debug("SESSION", "Using OpenRouter agent"); return this.openRouterAgent; } else { throw new Error("OpenRouter provider selected but no API key configured. Set CLAUDE_MEM_OPENROUTER_API_KEY in settings or OPENROUTER_API_KEY environment variable."); } } if (isGeminiSelected()) { if (isGeminiAvailable()) { logger.debug("SESSION", "Using Gemini agent"); return this.geminiAgent; } else { throw new Error("Gemini provider selected but no API key configured. Set CLAUDE_MEM_GEMINI_API_KEY in settings or GEMINI_API_KEY environment variable."); } } return this.sdkAgent; } getSelectedProvider() { if (isOpenRouterSelected() && isOpenRouterAvailable()) { return "openrouter"; } return isGeminiSelected() && isGeminiAvailable() ? "gemini" : "claude"; } static STALE_GENERATOR_THRESHOLD_MS = 30000; ensureGeneratorRunning(sessionDbId, source) { const session = this.sessionManager.getSession(sessionDbId); if (!session) return; if (this.spawnInProgress.get(sessionDbId)) { logger.debug("SESSION", "Spawn already in progress, skipping", { sessionDbId, source }); return; } const selectedProvider = this.getSelectedProvider(); if (!session.generatorPromise) { this.spawnInProgress.set(sessionDbId, true); this.startGeneratorWithProvider(session, selectedProvider, source); return; } const timeSinceActivity = Date.now() - session.lastGeneratorActivity; if (timeSinceActivity > SessionRoutes.STALE_GENERATOR_THRESHOLD_MS) { logger.warn("SESSION", "Stale generator detected, aborting to prevent queue stall (#1099)", { sessionId: sessionDbId, timeSinceActivityMs: timeSinceActivity, thresholdMs: SessionRoutes.STALE_GENERATOR_THRESHOLD_MS, source }); session.abortController.abort(); session.generatorPromise = null; session.abortController = new AbortController; session.lastGeneratorActivity = Date.now(); this.spawnInProgress.set(sessionDbId, true); this.startGeneratorWithProvider(session, selectedProvider, "stale-recovery"); return; } if (session.currentProvider && session.currentProvider !== selectedProvider) { logger.info("SESSION", `Provider changed, will switch after current generator finishes`, { sessionId: sessionDbId, currentProvider: session.currentProvider, selectedProvider, historyLength: session.conversationHistory.length }); } } startGeneratorWithProvider(session, provider, source) { if (!session) return; if (session.abortController.signal.aborted) { logger.debug("SESSION", "Resetting aborted AbortController before starting generator", { sessionId: session.sessionDbId }); session.abortController = new AbortController; } const agent = provider === "openrouter" ? this.openRouterAgent : provider === "gemini" ? this.geminiAgent : this.sdkAgent; const agentName = provider === "openrouter" ? "OpenRouter" : provider === "gemini" ? "Gemini" : "Claude SDK"; const pendingStore = this.sessionManager.getPendingMessageStore(); const actualQueueDepth = pendingStore.getPendingCount(session.sessionDbId); logger.info("SESSION", `Generator auto-starting (${source}) using ${agentName}`, { sessionId: session.sessionDbId, queueDepth: actualQueueDepth, historyLength: session.conversationHistory.length }); session.currentProvider = provider; session.lastGeneratorActivity = Date.now(); session.generatorPromise = agent.startSession(session, this.workerService).catch((error3) => { if (session.abortController.signal.aborted) return; logger.error("SESSION", `Generator failed`, { sessionId: session.sessionDbId, provider, error: error3.message }, error3); const pendingStore2 = this.sessionManager.getPendingMessageStore(); try { const failedCount = pendingStore2.markSessionMessagesFailed(session.sessionDbId); if (failedCount > 0) { logger.error("SESSION", `Marked messages as failed after generator error`, { sessionId: session.sessionDbId, failedCount }); } } catch (dbError) { logger.error("SESSION", "Failed to mark messages as failed", { sessionId: session.sessionDbId }, dbError); } }).finally(async () => { const tracked = getProcessBySession(session.sessionDbId); if (tracked && !tracked.process.killed && tracked.process.exitCode === null) { await ensureProcessExit(tracked, 5000); } const sessionDbId = session.sessionDbId; this.spawnInProgress.delete(sessionDbId); const wasAborted = session.abortController.signal.aborted; if (wasAborted) { logger.info("SESSION", `Generator aborted`, { sessionId: sessionDbId }); } else { logger.error("SESSION", `Generator exited unexpectedly`, { sessionId: sessionDbId }); } session.generatorPromise = null; session.currentProvider = null; this.workerService.broadcastProcessingStatus(); if (!wasAborted) { try { const pendingStore2 = this.sessionManager.getPendingMessageStore(); const pendingCount = pendingStore2.getPendingCount(sessionDbId); const MAX_CONSECUTIVE_RESTARTS = 3; if (pendingCount > 0) { if (this.crashRecoveryScheduled.has(sessionDbId)) { logger.debug("SESSION", "Crash recovery already scheduled", { sessionDbId }); return; } session.consecutiveRestarts = (session.consecutiveRestarts || 0) + 1; if (session.consecutiveRestarts > MAX_CONSECUTIVE_RESTARTS) { logger.error("SESSION", `CRITICAL: Generator restart limit exceeded - stopping to prevent runaway costs`, { sessionId: sessionDbId, pendingCount, consecutiveRestarts: session.consecutiveRestarts, maxRestarts: MAX_CONSECUTIVE_RESTARTS, action: "Generator will NOT restart. Check logs for root cause. Messages remain in pending state." }); session.abortController.abort(); return; } logger.info("SESSION", `Restarting generator after crash/exit with pending work`, { sessionId: sessionDbId, pendingCount, consecutiveRestarts: session.consecutiveRestarts, maxRestarts: MAX_CONSECUTIVE_RESTARTS }); const oldController = session.abortController; session.abortController = new AbortController; oldController.abort(); this.crashRecoveryScheduled.add(sessionDbId); const backoffMs = Math.min(1000 * Math.pow(2, session.consecutiveRestarts - 1), 8000); setTimeout(() => { this.crashRecoveryScheduled.delete(sessionDbId); const stillExists = this.sessionManager.getSession(sessionDbId); if (stillExists && !stillExists.generatorPromise) { this.startGeneratorWithProvider(stillExists, this.getSelectedProvider(), "crash-recovery"); } }, backoffMs); } else { session.abortController.abort(); session.consecutiveRestarts = 0; logger.debug("SESSION", "Aborted controller after natural completion", { sessionId: sessionDbId }); } } catch (e) { logger.debug("SESSION", "Error during recovery check, aborting to prevent leaks", { sessionId: sessionDbId, error: e instanceof Error ? e.message : String(e) }); session.abortController.abort(); } } }); } setupRoutes(app) { app.post("/sessions/:sessionDbId/init", this.handleSessionInit.bind(this)); app.post("/sessions/:sessionDbId/observations", this.handleObservations.bind(this)); app.post("/sessions/:sessionDbId/summarize", this.handleSummarize.bind(this)); app.get("/sessions/:sessionDbId/status", this.handleSessionStatus.bind(this)); app.delete("/sessions/:sessionDbId", this.handleSessionDelete.bind(this)); app.post("/sessions/:sessionDbId/complete", this.handleSessionComplete.bind(this)); app.post("/api/sessions/init", this.handleSessionInitByClaudeId.bind(this)); app.post("/api/sessions/observations", this.handleObservationsByClaudeId.bind(this)); app.post("/api/sessions/summarize", this.handleSummarizeByClaudeId.bind(this)); app.post("/api/sessions/complete", this.handleCompleteByClaudeId.bind(this)); } handleSessionInit = this.wrapHandler((req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; const { userPrompt, promptNumber } = req.body; logger.info("HTTP", "SessionRoutes: handleSessionInit called", { sessionDbId, promptNumber, has_userPrompt: !!userPrompt }); const session = this.sessionManager.initializeSession(sessionDbId, userPrompt, promptNumber); const latestPrompt = this.dbManager.getSessionStore().getLatestUserPrompt(session.contentSessionId); if (latestPrompt) { this.eventBroadcaster.broadcastNewPrompt({ id: latestPrompt.id, content_session_id: latestPrompt.content_session_id, project: latestPrompt.project, prompt_number: latestPrompt.prompt_number, prompt_text: latestPrompt.prompt_text, created_at_epoch: latestPrompt.created_at_epoch }); const chromaStart = Date.now(); const promptText = latestPrompt.prompt_text; this.dbManager.getChromaSync()?.syncUserPrompt(latestPrompt.id, latestPrompt.memory_session_id, latestPrompt.project, promptText, latestPrompt.prompt_number, latestPrompt.created_at_epoch).then(() => { const chromaDuration = Date.now() - chromaStart; const truncatedPrompt = promptText.length > 60 ? promptText.substring(0, 60) + "..." : promptText; logger.debug("CHROMA", "User prompt synced", { promptId: latestPrompt.id, duration: `${chromaDuration}ms`, prompt: truncatedPrompt }); }).catch((error3) => { logger.error("CHROMA", "User prompt sync failed, continuing without vector search", { promptId: latestPrompt.id, prompt: promptText.length > 60 ? promptText.substring(0, 60) + "..." : promptText }, error3); }); } this.ensureGeneratorRunning(sessionDbId, "init"); this.eventBroadcaster.broadcastSessionStarted(sessionDbId, session.project); res.json({ status: "initialized", sessionDbId, port: getWorkerPort() }); }); handleObservations = this.wrapHandler((req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; const { tool_name, tool_input, tool_response, prompt_number, cwd: cwd2 } = req.body; this.sessionManager.queueObservation(sessionDbId, { tool_name, tool_input, tool_response, prompt_number, cwd: cwd2 }); this.ensureGeneratorRunning(sessionDbId, "observation"); this.eventBroadcaster.broadcastObservationQueued(sessionDbId); res.json({ status: "queued" }); }); handleSummarize = this.wrapHandler((req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; const { last_assistant_message } = req.body; this.sessionManager.queueSummarize(sessionDbId, last_assistant_message); this.ensureGeneratorRunning(sessionDbId, "summarize"); this.eventBroadcaster.broadcastSummarizeQueued(); res.json({ status: "queued" }); }); handleSessionStatus = this.wrapHandler((req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; const session = this.sessionManager.getSession(sessionDbId); if (!session) { res.json({ status: "not_found" }); return; } const pendingStore = this.sessionManager.getPendingMessageStore(); const queueLength = pendingStore.getPendingCount(sessionDbId); res.json({ status: "active", sessionDbId, project: session.project, queueLength, uptime: Date.now() - session.startTime }); }); handleSessionDelete = this.wrapHandler(async (req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; await this.completionHandler.completeByDbId(sessionDbId); res.json({ status: "deleted" }); }); handleSessionComplete = this.wrapHandler(async (req, res) => { const sessionDbId = this.parseIntParam(req, res, "sessionDbId"); if (sessionDbId === null) return; await this.completionHandler.completeByDbId(sessionDbId); res.json({ success: true }); }); handleObservationsByClaudeId = this.wrapHandler((req, res) => { const { contentSessionId, tool_name, tool_input, tool_response, cwd: cwd2 } = req.body; if (!contentSessionId) { return this.badRequest(res, "Missing contentSessionId"); } const settings = SettingsDefaultsManager.loadFromFile(USER_SETTINGS_PATH); const skipTools = new Set(settings.CLAUDE_MEM_SKIP_TOOLS.split(",").map((t) => t.trim()).filter(Boolean)); if (skipTools.has(tool_name)) { logger.debug("SESSION", "Skipping observation for tool", { tool_name }); res.json({ status: "skipped", reason: "tool_excluded" }); return; } const fileOperationTools = new Set(["Edit", "Write", "Read", "NotebookEdit"]); if (fileOperationTools.has(tool_name) && tool_input) { const filePath = tool_input.file_path || tool_input.notebook_path; if (filePath && filePath.includes("session-memory")) { logger.debug("SESSION", "Skipping meta-observation for session-memory file", { tool_name, file_path: filePath }); res.json({ status: "skipped", reason: "session_memory_meta" }); return; } } try { const store = this.dbManager.getSessionStore(); const sessionDbId = store.createSDKSession(contentSessionId, "", ""); const promptNumber = store.getPromptNumberFromUserPrompts(contentSessionId); const userPrompt = PrivacyCheckValidator.checkUserPromptPrivacy(store, contentSessionId, promptNumber, "observation", sessionDbId, { tool_name }); if (!userPrompt) { res.json({ status: "skipped", reason: "private" }); return; } const cleanedToolInput = tool_input !== undefined ? stripMemoryTagsFromJson(JSON.stringify(tool_input)) : "{}"; const cleanedToolResponse = tool_response !== undefined ? stripMemoryTagsFromJson(JSON.stringify(tool_response)) : "{}"; this.sessionManager.queueObservation(sessionDbId, { tool_name, tool_input: cleanedToolInput, tool_response: cleanedToolResponse, prompt_number: promptNumber, cwd: cwd2 || (() => { logger.error("SESSION", "Missing cwd when queueing observation in SessionRoutes", { sessionId: sessionDbId, tool_name }); return ""; })() }); this.ensureGeneratorRunning(sessionDbId, "observation"); this.eventBroadcaster.broadcastObservationQueued(sessionDbId); res.json({ status: "queued" }); } catch (error3) { logger.error("SESSION", "Observation storage failed", { contentSessionId, tool_name }, error3); res.json({ stored: false, reason: error3.message }); } }); handleSummarizeByClaudeId = this.wrapHandler((req, res) => { const { contentSessionId, last_assistant_message } = req.body; if (!contentSessionId) { return this.badRequest(res, "Missing contentSessionId"); } const store = this.dbManager.getSessionStore(); const sessionDbId = store.createSDKSession(contentSessionId, "", ""); const promptNumber = store.getPromptNumberFromUserPrompts(contentSessionId); const userPrompt = PrivacyCheckValidator.checkUserPromptPrivacy(store, contentSessionId, promptNumber, "summarize", sessionDbId); if (!userPrompt) { res.json({ status: "skipped", reason: "private" }); return; } this.sessionManager.queueSummarize(sessionDbId, last_assistant_message); this.ensureGeneratorRunning(sessionDbId, "summarize"); this.eventBroadcaster.broadcastSummarizeQueued(); res.json({ status: "queued" }); }); handleCompleteByClaudeId = this.wrapHandler(async (req, res) => { const { contentSessionId } = req.body; logger.info("HTTP", "→ POST /api/sessions/complete", { contentSessionId }); if (!contentSessionId) { return this.badRequest(res, "Missing contentSessionId"); } const store = this.dbManager.getSessionStore(); const sessionDbId = store.createSDKSession(contentSessionId, "", ""); const activeSession = this.sessionManager.getSession(sessionDbId); if (!activeSession) { logger.debug("SESSION", "session-complete: Session not in active map", { contentSessionId, sessionDbId }); res.json({ status: "skipped", reason: "not_active" }); return; } await this.completionHandler.completeByDbId(sessionDbId); logger.info("SESSION", "Session completed via API", { contentSessionId, sessionDbId }); res.json({ status: "completed", sessionDbId }); }); handleSessionInitByClaudeId = this.wrapHandler((req, res) => { const { contentSessionId } = req.body; const project = req.body.project || "unknown"; const prompt = req.body.prompt || "[media prompt]"; const customTitle = req.body.customTitle || undefined; logger.info("HTTP", "SessionRoutes: handleSessionInitByClaudeId called", { contentSessionId, project, prompt_length: prompt?.length, customTitle }); if (!this.validateRequired(req, res, ["contentSessionId"])) { return; } const store = this.dbManager.getSessionStore(); const sessionDbId = store.createSDKSession(contentSessionId, project, prompt, customTitle); const dbSession = store.getSessionById(sessionDbId); const isNewSession = !dbSession?.memory_session_id; logger.info("SESSION", `CREATED | contentSessionId=${contentSessionId} → sessionDbId=${sessionDbId} | isNew=${isNewSession} | project=${project}`, { sessionId: sessionDbId }); const currentCount = store.getPromptNumberFromUserPrompts(contentSessionId); const promptNumber = currentCount + 1; const memorySessionId = dbSession?.memory_session_id || null; if (promptNumber > 1) { logger.debug("HTTP", `[ALIGNMENT] DB Lookup Proof | contentSessionId=${contentSessionId} → memorySessionId=${memorySessionId || "(not yet captured)"} | prompt#=${promptNumber}`); } else { logger.debug("HTTP", `[ALIGNMENT] New Session | contentSessionId=${contentSessionId} | prompt#=${promptNumber} | memorySessionId will be captured on first SDK response`); } const cleanedPrompt = stripMemoryTagsFromPrompt(prompt); if (!cleanedPrompt || cleanedPrompt.trim() === "") { logger.debug("HOOK", "Session init - prompt entirely private", { sessionId: sessionDbId, promptNumber, originalLength: prompt.length }); res.json({ sessionDbId, promptNumber, skipped: true, reason: "private" }); return; } store.saveUserPrompt(contentSessionId, promptNumber, cleanedPrompt); const contextInjected = this.sessionManager.getSession(sessionDbId) !== undefined; logger.debug("SESSION", "User prompt saved", { sessionId: sessionDbId, promptNumber, contextInjected }); res.json({ sessionDbId, promptNumber, skipped: false, contextInjected }); }); } // src/services/worker/http/routes/DataRoutes.ts init_logger(); init_paths(); init_worker_utils(); import path16 from "path"; import { readFileSync as readFileSync16, statSync as statSync3, existsSync as existsSync15 } from "fs"; import { homedir as homedir14 } from "os"; class DataRoutes extends BaseRouteHandler { paginationHelper; dbManager; sessionManager; sseBroadcaster; workerService; startTime; constructor(paginationHelper, dbManager, sessionManager, sseBroadcaster, workerService, startTime) { super(); this.paginationHelper = paginationHelper; this.dbManager = dbManager; this.sessionManager = sessionManager; this.sseBroadcaster = sseBroadcaster; this.workerService = workerService; this.startTime = startTime; } setupRoutes(app) { app.get("/api/observations", this.handleGetObservations.bind(this)); app.get("/api/summaries", this.handleGetSummaries.bind(this)); app.get("/api/prompts", this.handleGetPrompts.bind(this)); app.get("/api/observation/:id", this.handleGetObservationById.bind(this)); app.post("/api/observations/batch", this.handleGetObservationsByIds.bind(this)); app.get("/api/session/:id", this.handleGetSessionById.bind(this)); app.post("/api/sdk-sessions/batch", this.handleGetSdkSessionsByIds.bind(this)); app.get("/api/prompt/:id", this.handleGetPromptById.bind(this)); app.get("/api/stats", this.handleGetStats.bind(this)); app.get("/api/projects", this.handleGetProjects.bind(this)); app.get("/api/processing-status", this.handleGetProcessingStatus.bind(this)); app.post("/api/processing", this.handleSetProcessing.bind(this)); app.get("/api/pending-queue", this.handleGetPendingQueue.bind(this)); app.post("/api/pending-queue/process", this.handleProcessPendingQueue.bind(this)); app.delete("/api/pending-queue/failed", this.handleClearFailedQueue.bind(this)); app.delete("/api/pending-queue/all", this.handleClearAllQueue.bind(this)); app.post("/api/import", this.handleImport.bind(this)); } handleGetObservations = this.wrapHandler((req, res) => { const { offset, limit, project } = this.parsePaginationParams(req); const result = this.paginationHelper.getObservations(offset, limit, project); res.json(result); }); handleGetSummaries = this.wrapHandler((req, res) => { const { offset, limit, project } = this.parsePaginationParams(req); const result = this.paginationHelper.getSummaries(offset, limit, project); res.json(result); }); handleGetPrompts = this.wrapHandler((req, res) => { const { offset, limit, project } = this.parsePaginationParams(req); const result = this.paginationHelper.getPrompts(offset, limit, project); res.json(result); }); handleGetObservationById = this.wrapHandler((req, res) => { const id = this.parseIntParam(req, res, "id"); if (id === null) return; const store = this.dbManager.getSessionStore(); const observation = store.getObservationById(id); if (!observation) { this.notFound(res, `Observation #${id} not found`); return; } res.json(observation); }); handleGetObservationsByIds = this.wrapHandler((req, res) => { let { ids, orderBy, limit, project } = req.body; if (typeof ids === "string") { try { ids = JSON.parse(ids); } catch { ids = ids.split(",").map(Number); } } if (!ids || !Array.isArray(ids)) { this.badRequest(res, "ids must be an array of numbers"); return; } if (ids.length === 0) { res.json([]); return; } if (!ids.every((id) => typeof id === "number" && Number.isInteger(id))) { this.badRequest(res, "All ids must be integers"); return; } const store = this.dbManager.getSessionStore(); const observations = store.getObservationsByIds(ids, { orderBy, limit, project }); res.json(observations); }); handleGetSessionById = this.wrapHandler((req, res) => { const id = this.parseIntParam(req, res, "id"); if (id === null) return; const store = this.dbManager.getSessionStore(); const sessions = store.getSessionSummariesByIds([id]); if (sessions.length === 0) { this.notFound(res, `Session #${id} not found`); return; } res.json(sessions[0]); }); handleGetSdkSessionsByIds = this.wrapHandler((req, res) => { let { memorySessionIds } = req.body; if (typeof memorySessionIds === "string") { try { memorySessionIds = JSON.parse(memorySessionIds); } catch { memorySessionIds = memorySessionIds.split(",").map((s) => s.trim()); } } if (!Array.isArray(memorySessionIds)) { this.badRequest(res, "memorySessionIds must be an array"); return; } const store = this.dbManager.getSessionStore(); const sessions = store.getSdkSessionsBySessionIds(memorySessionIds); res.json(sessions); }); handleGetPromptById = this.wrapHandler((req, res) => { const id = this.parseIntParam(req, res, "id"); if (id === null) return; const store = this.dbManager.getSessionStore(); const prompts = store.getUserPromptsByIds([id]); if (prompts.length === 0) { this.notFound(res, `Prompt #${id} not found`); return; } res.json(prompts[0]); }); handleGetStats = this.wrapHandler((req, res) => { const db = this.dbManager.getSessionStore().db; const packageRoot = getPackageRoot(); const packageJsonPath = path16.join(packageRoot, "package.json"); const packageJson = JSON.parse(readFileSync16(packageJsonPath, "utf-8")); const version3 = packageJson.version; const totalObservations = db.prepare("SELECT COUNT(*) as count FROM observations").get(); const totalSessions = db.prepare("SELECT COUNT(*) as count FROM sdk_sessions").get(); const totalSummaries = db.prepare("SELECT COUNT(*) as count FROM session_summaries").get(); const dbPath = path16.join(homedir14(), ".claude-mem", "claude-mem.db"); let dbSize = 0; if (existsSync15(dbPath)) { dbSize = statSync3(dbPath).size; } const uptime = Math.floor((Date.now() - this.startTime) / 1000); const activeSessions = this.sessionManager.getActiveSessionCount(); const sseClients = this.sseBroadcaster.getClientCount(); res.json({ worker: { version: version3, uptime, activeSessions, sseClients, port: getWorkerPort() }, database: { path: dbPath, size: dbSize, observations: totalObservations.count, sessions: totalSessions.count, summaries: totalSummaries.count } }); }); handleGetProjects = this.wrapHandler((req, res) => { const db = this.dbManager.getSessionStore().db; const rows = db.prepare(` SELECT DISTINCT project FROM observations WHERE project IS NOT NULL GROUP BY project ORDER BY MAX(created_at_epoch) DESC `).all(); const projects = rows.map((row) => row.project); res.json({ projects }); }); handleGetProcessingStatus = this.wrapHandler((req, res) => { const isProcessing = this.sessionManager.isAnySessionProcessing(); const queueDepth = this.sessionManager.getTotalActiveWork(); res.json({ isProcessing, queueDepth }); }); handleSetProcessing = this.wrapHandler((req, res) => { this.workerService.broadcastProcessingStatus(); const isProcessing = this.sessionManager.isAnySessionProcessing(); const queueDepth = this.sessionManager.getTotalQueueDepth(); const activeSessions = this.sessionManager.getActiveSessionCount(); res.json({ status: "ok", isProcessing, queueDepth, activeSessions }); }); parsePaginationParams(req) { const offset = parseInt(req.query.offset, 10) || 0; const limit = Math.min(parseInt(req.query.limit, 10) || 20, 100); const project = req.query.project; return { offset, limit, project }; } handleImport = this.wrapHandler((req, res) => { const { sessions, summaries, observations, prompts } = req.body; const stats = { sessionsImported: 0, sessionsSkipped: 0, summariesImported: 0, summariesSkipped: 0, observationsImported: 0, observationsSkipped: 0, promptsImported: 0, promptsSkipped: 0 }; const store = this.dbManager.getSessionStore(); if (Array.isArray(sessions)) { for (const session of sessions) { const result = store.importSdkSession(session); if (result.imported) { stats.sessionsImported++; } else { stats.sessionsSkipped++; } } } if (Array.isArray(summaries)) { for (const summary of summaries) { const result = store.importSessionSummary(summary); if (result.imported) { stats.summariesImported++; } else { stats.summariesSkipped++; } } } if (Array.isArray(observations)) { for (const obs of observations) { const result = store.importObservation(obs); if (result.imported) { stats.observationsImported++; } else { stats.observationsSkipped++; } } } if (Array.isArray(prompts)) { for (const prompt of prompts) { const result = store.importUserPrompt(prompt); if (result.imported) { stats.promptsImported++; } else { stats.promptsSkipped++; } } } res.json({ success: true, stats }); }); handleGetPendingQueue = this.wrapHandler((req, res) => { const { PendingMessageStore: PendingMessageStore2 } = (init_PendingMessageStore(), __toCommonJS(exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); const queueMessages = pendingStore.getQueueMessages(); const recentlyProcessed = pendingStore.getRecentlyProcessed(20, 30); const stuckCount = pendingStore.getStuckCount(5 * 60 * 1000); const sessionsWithPending = pendingStore.getSessionsWithPendingMessages(); res.json({ queue: { messages: queueMessages, totalPending: queueMessages.filter((m) => m.status === "pending").length, totalProcessing: queueMessages.filter((m) => m.status === "processing").length, totalFailed: queueMessages.filter((m) => m.status === "failed").length, stuckCount }, recentlyProcessed, sessionsWithPendingWork: sessionsWithPending }); }); handleProcessPendingQueue = this.wrapHandler(async (req, res) => { const sessionLimit = Math.min(Math.max(parseInt(req.body.sessionLimit, 10) || 10, 1), 100); const result = await this.workerService.processPendingQueues(sessionLimit); res.json({ success: true, ...result }); }); handleClearFailedQueue = this.wrapHandler((req, res) => { const { PendingMessageStore: PendingMessageStore2 } = (init_PendingMessageStore(), __toCommonJS(exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); const clearedCount = pendingStore.clearFailed(); logger.info("QUEUE", "Cleared failed queue messages", { clearedCount }); res.json({ success: true, clearedCount }); }); handleClearAllQueue = this.wrapHandler((req, res) => { const { PendingMessageStore: PendingMessageStore2 } = (init_PendingMessageStore(), __toCommonJS(exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); const clearedCount = pendingStore.clearAll(); logger.warn("QUEUE", "Cleared ALL queue messages (pending, processing, failed)", { clearedCount }); res.json({ success: true, clearedCount }); }); } // src/services/worker/http/routes/SearchRoutes.ts class SearchRoutes extends BaseRouteHandler { searchManager; constructor(searchManager) { super(); this.searchManager = searchManager; } setupRoutes(app) { app.get("/api/search", this.handleUnifiedSearch.bind(this)); app.get("/api/timeline", this.handleUnifiedTimeline.bind(this)); app.get("/api/decisions", this.handleDecisions.bind(this)); app.get("/api/changes", this.handleChanges.bind(this)); app.get("/api/how-it-works", this.handleHowItWorks.bind(this)); app.get("/api/search/observations", this.handleSearchObservations.bind(this)); app.get("/api/search/sessions", this.handleSearchSessions.bind(this)); app.get("/api/search/prompts", this.handleSearchPrompts.bind(this)); app.get("/api/search/by-concept", this.handleSearchByConcept.bind(this)); app.get("/api/search/by-file", this.handleSearchByFile.bind(this)); app.get("/api/search/by-type", this.handleSearchByType.bind(this)); app.get("/api/context/recent", this.handleGetRecentContext.bind(this)); app.get("/api/context/timeline", this.handleGetContextTimeline.bind(this)); app.get("/api/context/preview", this.handleContextPreview.bind(this)); app.get("/api/context/inject", this.handleContextInject.bind(this)); app.get("/api/timeline/by-query", this.handleGetTimelineByQuery.bind(this)); app.get("/api/search/help", this.handleSearchHelp.bind(this)); } handleUnifiedSearch = this.wrapHandler(async (req, res) => { const result = await this.searchManager.search(req.query); res.json(result); }); handleUnifiedTimeline = this.wrapHandler(async (req, res) => { const result = await this.searchManager.timeline(req.query); res.json(result); }); handleDecisions = this.wrapHandler(async (req, res) => { const result = await this.searchManager.decisions(req.query); res.json(result); }); handleChanges = this.wrapHandler(async (req, res) => { const result = await this.searchManager.changes(req.query); res.json(result); }); handleHowItWorks = this.wrapHandler(async (req, res) => { const result = await this.searchManager.howItWorks(req.query); res.json(result); }); handleSearchObservations = this.wrapHandler(async (req, res) => { const result = await this.searchManager.searchObservations(req.query); res.json(result); }); handleSearchSessions = this.wrapHandler(async (req, res) => { const result = await this.searchManager.searchSessions(req.query); res.json(result); }); handleSearchPrompts = this.wrapHandler(async (req, res) => { const result = await this.searchManager.searchUserPrompts(req.query); res.json(result); }); handleSearchByConcept = this.wrapHandler(async (req, res) => { const result = await this.searchManager.findByConcept(req.query); res.json(result); }); handleSearchByFile = this.wrapHandler(async (req, res) => { const result = await this.searchManager.findByFile(req.query); res.json(result); }); handleSearchByType = this.wrapHandler(async (req, res) => { const result = await this.searchManager.findByType(req.query); res.json(result); }); handleGetRecentContext = this.wrapHandler(async (req, res) => { const result = await this.searchManager.getRecentContext(req.query); res.json(result); }); handleGetContextTimeline = this.wrapHandler(async (req, res) => { const result = await this.searchManager.getContextTimeline(req.query); res.json(result); }); handleContextPreview = this.wrapHandler(async (req, res) => { const projectName = req.query.project; if (!projectName) { this.badRequest(res, "Project parameter is required"); return; } const { generateContext: generateContext2 } = await Promise.resolve().then(() => (init_context_generator(), exports_context_generator)); const cwd2 = `/preview/${projectName}`; const contextText = await generateContext2({ session_id: "preview-" + Date.now(), cwd: cwd2 }, true); res.setHeader("Content-Type", "text/plain; charset=utf-8"); res.send(contextText); }); handleContextInject = this.wrapHandler(async (req, res) => { const projectsParam = req.query.projects || req.query.project; const useColors = req.query.colors === "true"; const full = req.query.full === "true"; if (!projectsParam) { this.badRequest(res, "Project(s) parameter is required"); return; } const projects = projectsParam.split(",").map((p) => p.trim()).filter(Boolean); if (projects.length === 0) { this.badRequest(res, "At least one project is required"); return; } const { generateContext: generateContext2 } = await Promise.resolve().then(() => (init_context_generator(), exports_context_generator)); const primaryProject = projects[projects.length - 1]; const cwd2 = `/context/${primaryProject}`; const contextText = await generateContext2({ session_id: "context-inject-" + Date.now(), cwd: cwd2, projects, full }, useColors); res.setHeader("Content-Type", "text/plain; charset=utf-8"); res.send(contextText); }); handleGetTimelineByQuery = this.wrapHandler(async (req, res) => { const result = await this.searchManager.getTimelineByQuery(req.query); res.json(result); }); handleSearchHelp = this.wrapHandler((req, res) => { res.json({ title: "Claude-Mem Search API", description: "HTTP API for searching persistent memory", endpoints: [ { path: "/api/search/observations", method: "GET", description: "Search observations using full-text search", parameters: { query: "Search query (required)", limit: "Number of results (default: 20)", project: "Filter by project name (optional)" } }, { path: "/api/search/sessions", method: "GET", description: "Search session summaries using full-text search", parameters: { query: "Search query (required)", limit: "Number of results (default: 20)" } }, { path: "/api/search/prompts", method: "GET", description: "Search user prompts using full-text search", parameters: { query: "Search query (required)", limit: "Number of results (default: 20)", project: "Filter by project name (optional)" } }, { path: "/api/search/by-concept", method: "GET", description: "Find observations by concept tag", parameters: { concept: "Concept tag (required): discovery, decision, bugfix, feature, refactor", limit: "Number of results (default: 10)", project: "Filter by project name (optional)" } }, { path: "/api/search/by-file", method: "GET", description: "Find observations and sessions by file path", parameters: { filePath: "File path or partial path (required)", limit: "Number of results per type (default: 10)", project: "Filter by project name (optional)" } }, { path: "/api/search/by-type", method: "GET", description: "Find observations by type", parameters: { type: "Observation type (required): discovery, decision, bugfix, feature, refactor", limit: "Number of results (default: 10)", project: "Filter by project name (optional)" } }, { path: "/api/context/recent", method: "GET", description: "Get recent session context including summaries and observations", parameters: { project: "Project name (default: current directory)", limit: "Number of recent sessions (default: 3)" } }, { path: "/api/context/timeline", method: "GET", description: "Get unified timeline around a specific point in time", parameters: { anchor: 'Anchor point: observation ID, session ID (e.g., "S123"), or ISO timestamp (required)', depth_before: "Number of records before anchor (default: 10)", depth_after: "Number of records after anchor (default: 10)", project: "Filter by project name (optional)" } }, { path: "/api/timeline/by-query", method: "GET", description: "Search for best match, then get timeline around it", parameters: { query: "Search query (required)", mode: 'Search mode: "auto", "observations", or "sessions" (default: "auto")', depth_before: "Number of records before match (default: 10)", depth_after: "Number of records after match (default: 10)", project: "Filter by project name (optional)" } }, { path: "/api/search/help", method: "GET", description: "Get this help documentation" } ], examples: [ 'curl "http://localhost:37777/api/search/observations?query=authentication&limit=5"', 'curl "http://localhost:37777/api/search/by-type?type=bugfix&limit=10"', 'curl "http://localhost:37777/api/context/recent?project=claude-mem&limit=3"', 'curl "http://localhost:37777/api/context/timeline?anchor=123&depth_before=5&depth_after=5"' ] }); }); } // src/services/worker/http/routes/SettingsRoutes.ts init_paths(); init_logger(); import path22 from "path"; import { readFileSync as readFileSync19, writeFileSync as writeFileSync8, existsSync as existsSync18, renameSync as renameSync4, mkdirSync as mkdirSync10 } from "fs"; import { homedir as homedir17 } from "os"; // src/services/worker/BranchManager.ts init_logger(); init_paths(); import { spawnSync } from "child_process"; import { existsSync as existsSync17, unlinkSync as unlinkSync5 } from "fs"; import { join as join9 } from "path"; var INSTALLED_PLUGIN_PATH = MARKETPLACE_ROOT; function isValidBranchName(branchName) { if (!branchName || typeof branchName !== "string") { return false; } const validBranchRegex = /^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/; return validBranchRegex.test(branchName) && !branchName.includes(".."); } var GIT_COMMAND_TIMEOUT_MS = 300000; var NPM_INSTALL_TIMEOUT_MS = 600000; function execGit(args) { const result = spawnSync("git", args, { cwd: INSTALLED_PLUGIN_PATH, encoding: "utf-8", timeout: GIT_COMMAND_TIMEOUT_MS, windowsHide: true, shell: false }); if (result.error) { throw result.error; } if (result.status !== 0) { throw new Error(result.stderr || result.stdout || "Git command failed"); } return result.stdout.trim(); } function execNpm(args, timeoutMs = NPM_INSTALL_TIMEOUT_MS) { const isWindows = process.platform === "win32"; const npmCmd = isWindows ? "npm.cmd" : "npm"; const result = spawnSync(npmCmd, args, { cwd: INSTALLED_PLUGIN_PATH, encoding: "utf-8", timeout: timeoutMs, windowsHide: true, shell: false }); if (result.error) { throw result.error; } if (result.status !== 0) { throw new Error(result.stderr || result.stdout || "npm command failed"); } return result.stdout.trim(); } function getBranchInfo() { const gitDir = join9(INSTALLED_PLUGIN_PATH, ".git"); if (!existsSync17(gitDir)) { return { branch: null, isBeta: false, isGitRepo: false, isDirty: false, canSwitch: false, error: "Installed plugin is not a git repository" }; } try { const branch = execGit(["rev-parse", "--abbrev-ref", "HEAD"]); const status = execGit(["status", "--porcelain"]); const isDirty2 = status.length > 0; const isBeta = branch.startsWith("beta"); return { branch, isBeta, isGitRepo: true, isDirty: isDirty2, canSwitch: true }; } catch (error3) { logger.error("BRANCH", "Failed to get branch info", {}, error3); return { branch: null, isBeta: false, isGitRepo: true, isDirty: false, canSwitch: false, error: error3.message }; } } async function switchBranch(targetBranch) { if (!isValidBranchName(targetBranch)) { return { success: false, error: `Invalid branch name: ${targetBranch}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.` }; } const info = getBranchInfo(); if (!info.isGitRepo) { return { success: false, error: "Installed plugin is not a git repository. Please reinstall." }; } if (info.branch === targetBranch) { return { success: true, branch: targetBranch, message: `Already on branch ${targetBranch}` }; } try { logger.info("BRANCH", "Starting branch switch", { from: info.branch, to: targetBranch }); logger.debug("BRANCH", "Discarding local changes"); execGit(["checkout", "--", "."]); execGit(["clean", "-fd"]); logger.debug("BRANCH", "Fetching from origin"); execGit(["fetch", "origin"]); logger.debug("BRANCH", "Checking out branch", { branch: targetBranch }); try { execGit(["checkout", targetBranch]); } catch (error3) { logger.debug("BRANCH", "Branch not local, tracking remote", { branch: targetBranch, error: error3 instanceof Error ? error3.message : String(error3) }); execGit(["checkout", "-b", targetBranch, `origin/${targetBranch}`]); } logger.debug("BRANCH", "Pulling latest"); execGit(["pull", "origin", targetBranch]); const installMarker = join9(INSTALLED_PLUGIN_PATH, ".install-version"); if (existsSync17(installMarker)) { unlinkSync5(installMarker); } logger.debug("BRANCH", "Running npm install"); execNpm(["install"], NPM_INSTALL_TIMEOUT_MS); logger.success("BRANCH", "Branch switch complete", { branch: targetBranch }); return { success: true, branch: targetBranch, message: `Switched to ${targetBranch}. Worker will restart automatically.` }; } catch (error3) { logger.error("BRANCH", "Branch switch failed", { targetBranch }, error3); try { if (info.branch && isValidBranchName(info.branch)) { execGit(["checkout", info.branch]); } } catch (recoveryError) { logger.error("BRANCH", "Recovery checkout also failed", { originalBranch: info.branch }, recoveryError); } return { success: false, error: `Branch switch failed: ${error3.message}` }; } } async function pullUpdates() { const info = getBranchInfo(); if (!info.isGitRepo || !info.branch) { return { success: false, error: "Cannot pull updates: not a git repository" }; } try { if (!isValidBranchName(info.branch)) { return { success: false, error: `Invalid current branch name: ${info.branch}` }; } logger.info("BRANCH", "Pulling updates", { branch: info.branch }); execGit(["checkout", "--", "."]); execGit(["fetch", "origin"]); execGit(["pull", "origin", info.branch]); const installMarker = join9(INSTALLED_PLUGIN_PATH, ".install-version"); if (existsSync17(installMarker)) { unlinkSync5(installMarker); } execNpm(["install"], NPM_INSTALL_TIMEOUT_MS); logger.success("BRANCH", "Updates pulled", { branch: info.branch }); return { success: true, branch: info.branch, message: `Updated ${info.branch}. Worker will restart automatically.` }; } catch (error3) { logger.error("BRANCH", "Pull failed", {}, error3); return { success: false, error: `Pull failed: ${error3.message}` }; } } // src/services/worker/http/routes/SettingsRoutes.ts init_SettingsDefaultsManager(); init_worker_utils(); class SettingsRoutes extends BaseRouteHandler { settingsManager; constructor(settingsManager) { super(); this.settingsManager = settingsManager; } setupRoutes(app) { app.get("/api/settings", this.handleGetSettings.bind(this)); app.post("/api/settings", this.handleUpdateSettings.bind(this)); app.get("/api/mcp/status", this.handleGetMcpStatus.bind(this)); app.post("/api/mcp/toggle", this.handleToggleMcp.bind(this)); app.get("/api/branch/status", this.handleGetBranchStatus.bind(this)); app.post("/api/branch/switch", this.handleSwitchBranch.bind(this)); app.post("/api/branch/update", this.handleUpdateBranch.bind(this)); } handleGetSettings = this.wrapHandler((req, res) => { const settingsPath = path22.join(homedir17(), ".claude-mem", "settings.json"); this.ensureSettingsFile(settingsPath); const settings = SettingsDefaultsManager.loadFromFile(settingsPath); res.json(settings); }); handleUpdateSettings = this.wrapHandler((req, res) => { const validation = this.validateSettings(req.body); if (!validation.valid) { res.status(400).json({ success: false, error: validation.error }); return; } const settingsPath = path22.join(homedir17(), ".claude-mem", "settings.json"); this.ensureSettingsFile(settingsPath); let settings = {}; if (existsSync18(settingsPath)) { const settingsData = readFileSync19(settingsPath, "utf-8"); try { settings = JSON.parse(settingsData); } catch (parseError) { logger.error("SETTINGS", "Failed to parse settings file", { settingsPath }, parseError); res.status(500).json({ success: false, error: "Settings file is corrupted. Delete ~/.claude-mem/settings.json to reset." }); return; } } const settingKeys = [ "CLAUDE_MEM_MODEL", "CLAUDE_MEM_CONTEXT_OBSERVATIONS", "CLAUDE_MEM_WORKER_PORT", "CLAUDE_MEM_WORKER_HOST", "CLAUDE_MEM_PROVIDER", "CLAUDE_MEM_GEMINI_API_KEY", "CLAUDE_MEM_GEMINI_MODEL", "CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED", "CLAUDE_MEM_OPENROUTER_API_KEY", "CLAUDE_MEM_OPENROUTER_MODEL", "CLAUDE_MEM_OPENROUTER_SITE_URL", "CLAUDE_MEM_OPENROUTER_APP_NAME", "CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES", "CLAUDE_MEM_OPENROUTER_MAX_TOKENS", "CLAUDE_MEM_DATA_DIR", "CLAUDE_MEM_LOG_LEVEL", "CLAUDE_MEM_PYTHON_VERSION", "CLAUDE_CODE_PATH", "CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS", "CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS", "CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT", "CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT", "CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES", "CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS", "CLAUDE_MEM_CONTEXT_FULL_COUNT", "CLAUDE_MEM_CONTEXT_FULL_FIELD", "CLAUDE_MEM_CONTEXT_SESSION_COUNT", "CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY", "CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE", "CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED" ]; for (const key of settingKeys) { if (req.body[key] !== undefined) { settings[key] = req.body[key]; } } writeFileSync8(settingsPath, JSON.stringify(settings, null, 2), "utf-8"); clearPortCache(); logger.info("WORKER", "Settings updated"); res.json({ success: true, message: "Settings updated successfully" }); }); handleGetMcpStatus = this.wrapHandler((req, res) => { const enabled = this.isMcpEnabled(); res.json({ enabled }); }); handleToggleMcp = this.wrapHandler((req, res) => { const { enabled } = req.body; if (typeof enabled !== "boolean") { this.badRequest(res, "enabled must be a boolean"); return; } this.toggleMcp(enabled); res.json({ success: true, enabled: this.isMcpEnabled() }); }); handleGetBranchStatus = this.wrapHandler((req, res) => { const info = getBranchInfo(); res.json(info); }); handleSwitchBranch = this.wrapHandler(async (req, res) => { const { branch } = req.body; if (!branch) { res.status(400).json({ success: false, error: "Missing branch parameter" }); return; } const allowedBranches = ["main", "beta/7.0", "feature/bun-executable"]; if (!allowedBranches.includes(branch)) { res.status(400).json({ success: false, error: `Invalid branch. Allowed: ${allowedBranches.join(", ")}` }); return; } logger.info("WORKER", "Branch switch requested", { branch }); const result = await switchBranch(branch); if (result.success) { setTimeout(() => { logger.info("WORKER", "Restarting worker after branch switch"); process.exit(0); }, 1000); } res.json(result); }); handleUpdateBranch = this.wrapHandler(async (req, res) => { logger.info("WORKER", "Branch update requested"); const result = await pullUpdates(); if (result.success) { setTimeout(() => { logger.info("WORKER", "Restarting worker after branch update"); process.exit(0); }, 1000); } res.json(result); }); validateSettings(settings) { if (settings.CLAUDE_MEM_PROVIDER) { const validProviders = ["claude", "gemini", "openrouter"]; if (!validProviders.includes(settings.CLAUDE_MEM_PROVIDER)) { return { valid: false, error: 'CLAUDE_MEM_PROVIDER must be "claude", "gemini", or "openrouter"' }; } } if (settings.CLAUDE_MEM_GEMINI_MODEL) { const validGeminiModels = ["gemini-2.5-flash-lite", "gemini-2.5-flash", "gemini-3-flash-preview"]; if (!validGeminiModels.includes(settings.CLAUDE_MEM_GEMINI_MODEL)) { return { valid: false, error: "CLAUDE_MEM_GEMINI_MODEL must be one of: gemini-2.5-flash-lite, gemini-2.5-flash, gemini-3-flash-preview" }; } } if (settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS) { const obsCount = parseInt(settings.CLAUDE_MEM_CONTEXT_OBSERVATIONS, 10); if (isNaN(obsCount) || obsCount < 1 || obsCount > 200) { return { valid: false, error: "CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200" }; } } if (settings.CLAUDE_MEM_WORKER_PORT) { const port = parseInt(settings.CLAUDE_MEM_WORKER_PORT, 10); if (isNaN(port) || port < 1024 || port > 65535) { return { valid: false, error: "CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535" }; } } if (settings.CLAUDE_MEM_WORKER_HOST) { const host = settings.CLAUDE_MEM_WORKER_HOST; const validHostPattern = /^(127\.0\.0\.1|0\.0\.0\.0|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/; if (!validHostPattern.test(host)) { return { valid: false, error: "CLAUDE_MEM_WORKER_HOST must be a valid IP address (e.g., 127.0.0.1, 0.0.0.0)" }; } } if (settings.CLAUDE_MEM_LOG_LEVEL) { const validLevels = ["DEBUG", "INFO", "WARN", "ERROR", "SILENT"]; if (!validLevels.includes(settings.CLAUDE_MEM_LOG_LEVEL.toUpperCase())) { return { valid: false, error: "CLAUDE_MEM_LOG_LEVEL must be one of: DEBUG, INFO, WARN, ERROR, SILENT" }; } } if (settings.CLAUDE_MEM_PYTHON_VERSION) { const pythonVersionRegex = /^3\.\d{1,2}$/; if (!pythonVersionRegex.test(settings.CLAUDE_MEM_PYTHON_VERSION)) { return { valid: false, error: 'CLAUDE_MEM_PYTHON_VERSION must be in format "3.X" or "3.XX" (e.g., "3.13")' }; } } const booleanSettings = [ "CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS", "CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS", "CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT", "CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT", "CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY", "CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE" ]; for (const key of booleanSettings) { if (settings[key] && !["true", "false"].includes(settings[key])) { return { valid: false, error: `${key} must be "true" or "false"` }; } } if (settings.CLAUDE_MEM_CONTEXT_FULL_COUNT) { const count = parseInt(settings.CLAUDE_MEM_CONTEXT_FULL_COUNT, 10); if (isNaN(count) || count < 0 || count > 20) { return { valid: false, error: "CLAUDE_MEM_CONTEXT_FULL_COUNT must be between 0 and 20" }; } } if (settings.CLAUDE_MEM_CONTEXT_SESSION_COUNT) { const count = parseInt(settings.CLAUDE_MEM_CONTEXT_SESSION_COUNT, 10); if (isNaN(count) || count < 1 || count > 50) { return { valid: false, error: "CLAUDE_MEM_CONTEXT_SESSION_COUNT must be between 1 and 50" }; } } if (settings.CLAUDE_MEM_CONTEXT_FULL_FIELD) { if (!["narrative", "facts"].includes(settings.CLAUDE_MEM_CONTEXT_FULL_FIELD)) { return { valid: false, error: 'CLAUDE_MEM_CONTEXT_FULL_FIELD must be "narrative" or "facts"' }; } } if (settings.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES) { const count = parseInt(settings.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES, 10); if (isNaN(count) || count < 1 || count > 100) { return { valid: false, error: "CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES must be between 1 and 100" }; } } if (settings.CLAUDE_MEM_OPENROUTER_MAX_TOKENS) { const tokens = parseInt(settings.CLAUDE_MEM_OPENROUTER_MAX_TOKENS, 10); if (isNaN(tokens) || tokens < 1000 || tokens > 1e6) { return { valid: false, error: "CLAUDE_MEM_OPENROUTER_MAX_TOKENS must be between 1000 and 1000000" }; } } if (settings.CLAUDE_MEM_OPENROUTER_SITE_URL) { try { new URL(settings.CLAUDE_MEM_OPENROUTER_SITE_URL); } catch (error3) { logger.debug("SETTINGS", "Invalid URL format", { url: settings.CLAUDE_MEM_OPENROUTER_SITE_URL, error: error3 instanceof Error ? error3.message : String(error3) }); return { valid: false, error: "CLAUDE_MEM_OPENROUTER_SITE_URL must be a valid URL" }; } } return { valid: true }; } isMcpEnabled() { const packageRoot = getPackageRoot(); const mcpPath = path22.join(packageRoot, "plugin", ".mcp.json"); return existsSync18(mcpPath); } toggleMcp(enabled) { const packageRoot = getPackageRoot(); const mcpPath = path22.join(packageRoot, "plugin", ".mcp.json"); const mcpDisabledPath = path22.join(packageRoot, "plugin", ".mcp.json.disabled"); if (enabled && existsSync18(mcpDisabledPath)) { renameSync4(mcpDisabledPath, mcpPath); logger.info("WORKER", "MCP search server enabled"); } else if (!enabled && existsSync18(mcpPath)) { renameSync4(mcpPath, mcpDisabledPath); logger.info("WORKER", "MCP search server disabled"); } else { logger.debug("WORKER", "MCP toggle no-op (already in desired state)", { enabled }); } } ensureSettingsFile(settingsPath) { if (!existsSync18(settingsPath)) { const defaults = SettingsDefaultsManager.getAllDefaults(); const dir = path22.dirname(settingsPath); if (!existsSync18(dir)) { mkdirSync10(dir, { recursive: true }); } writeFileSync8(settingsPath, JSON.stringify(defaults, null, 2), "utf-8"); logger.info("SETTINGS", "Created settings file with defaults", { settingsPath }); } } } // src/services/worker/http/routes/LogsRoutes.ts init_logger(); init_SettingsDefaultsManager(); import { openSync as openSync2, fstatSync, readSync as readSync2, closeSync as closeSync2, existsSync as existsSync19, writeFileSync as writeFileSync9 } from "fs"; import { join as join10 } from "path"; function readLastLines(filePath, lineCount) { const fd = openSync2(filePath, "r"); try { const stat = fstatSync(fd); const fileSize = stat.size; if (fileSize === 0) { return { lines: "", totalEstimate: 0 }; } const INITIAL_CHUNK_SIZE = 64 * 1024; const MAX_READ_SIZE = 10 * 1024 * 1024; let readSize = Math.min(INITIAL_CHUNK_SIZE, fileSize); let content = ""; let newlineCount = 0; while (readSize <= fileSize && readSize <= MAX_READ_SIZE) { const startPosition = Math.max(0, fileSize - readSize); const bytesToRead = fileSize - startPosition; const buffer = Buffer.alloc(bytesToRead); readSync2(fd, buffer, 0, bytesToRead, startPosition); content = buffer.toString("utf-8"); newlineCount = 0; for (let i = 0;i < content.length; i++) { if (content[i] === ` `) newlineCount++; } if (newlineCount >= lineCount || startPosition === 0) { break; } readSize = Math.min(readSize * 2, fileSize, MAX_READ_SIZE); } const allLines = content.split(` `); if (allLines.length > 0 && allLines[allLines.length - 1] === "") { allLines.pop(); } const startIndex = Math.max(0, allLines.length - lineCount); const resultLines = allLines.slice(startIndex); let totalEstimate; if (fileSize <= readSize) { totalEstimate = allLines.length; } else { const avgLineLength = content.length / Math.max(newlineCount, 1); totalEstimate = Math.round(fileSize / avgLineLength); } return { lines: resultLines.join(` `), totalEstimate }; } finally { closeSync2(fd); } } class LogsRoutes extends BaseRouteHandler { getLogFilePath() { const dataDir = SettingsDefaultsManager.get("CLAUDE_MEM_DATA_DIR"); const logsDir = join10(dataDir, "logs"); const date5 = new Date().toISOString().split("T")[0]; return join10(logsDir, `claude-mem-${date5}.log`); } getLogsDir() { const dataDir = SettingsDefaultsManager.get("CLAUDE_MEM_DATA_DIR"); return join10(dataDir, "logs"); } setupRoutes(app) { app.get("/api/logs", this.handleGetLogs.bind(this)); app.post("/api/logs/clear", this.handleClearLogs.bind(this)); } handleGetLogs = this.wrapHandler((req, res) => { const logFilePath = this.getLogFilePath(); if (!existsSync19(logFilePath)) { res.json({ logs: "", path: logFilePath, exists: false }); return; } const requestedLines = parseInt(req.query.lines || "1000", 10); const maxLines = Math.min(requestedLines, 1e4); const { lines: recentLines, totalEstimate } = readLastLines(logFilePath, maxLines); const returnedLines = recentLines === "" ? 0 : recentLines.split(` `).length; res.json({ logs: recentLines, path: logFilePath, exists: true, totalLines: totalEstimate, returnedLines }); }); handleClearLogs = this.wrapHandler((req, res) => { const logFilePath = this.getLogFilePath(); if (!existsSync19(logFilePath)) { res.json({ success: true, message: "Log file does not exist", path: logFilePath }); return; } writeFileSync9(logFilePath, "", "utf-8"); logger.info("SYSTEM", "Log file cleared via UI", { path: logFilePath }); res.json({ success: true, message: "Log file cleared", path: logFilePath }); }); } // src/services/worker/http/routes/MemoryRoutes.ts init_logger(); class MemoryRoutes extends BaseRouteHandler { dbManager; defaultProject; constructor(dbManager, defaultProject) { super(); this.dbManager = dbManager; this.defaultProject = defaultProject; } setupRoutes(app) { app.post("/api/memory/save", this.handleSaveMemory.bind(this)); } handleSaveMemory = this.wrapHandler(async (req, res) => { const { text, title, project } = req.body; const targetProject = project || this.defaultProject; if (!text || typeof text !== "string" || text.trim().length === 0) { this.badRequest(res, "text is required and must be non-empty"); return; } const sessionStore = this.dbManager.getSessionStore(); const chromaSync = this.dbManager.getChromaSync(); const memorySessionId = sessionStore.getOrCreateManualSession(targetProject); const observation = { type: "discovery", title: title || text.substring(0, 60).trim() + (text.length > 60 ? "..." : ""), subtitle: "Manual memory", facts: [], narrative: text, concepts: [], files_read: [], files_modified: [] }; const result = sessionStore.storeObservation(memorySessionId, targetProject, observation, 0, 0); logger.info("HTTP", "Manual observation saved", { id: result.id, project: targetProject, title: observation.title }); chromaSync.syncObservation(result.id, memorySessionId, targetProject, observation, 0, result.createdAtEpoch, 0).catch((err) => { logger.error("CHROMA", "ChromaDB sync failed", { id: result.id }, err); }); res.json({ success: true, id: result.id, title: observation.title, project: targetProject, message: `Memory saved as observation #${result.id}` }); }); } // src/services/worker-service.ts var __dirname = "/Users/alexnewman/conductor/workspaces/claude-mem/banjul/src/services", __filename = "/Users/alexnewman/conductor/workspaces/claude-mem/banjul/src/services/worker-service.ts"; var WINDOWS_SPAWN_COOLDOWN_MS = 2 * 60 * 1000; function getWorkerSpawnLockPath() { return path24.join(SettingsDefaultsManager.get("CLAUDE_MEM_DATA_DIR"), ".worker-start-attempted"); } function shouldSkipSpawnOnWindows() { if (process.platform !== "win32") return false; const lockPath = getWorkerSpawnLockPath(); if (!existsSync23(lockPath)) return false; try { const modifiedTimeMs = statSync5(lockPath).mtimeMs; return Date.now() - modifiedTimeMs < WINDOWS_SPAWN_COOLDOWN_MS; } catch { return false; } } function markWorkerSpawnAttempted() { if (process.platform !== "win32") return; try { writeFileSync11(getWorkerSpawnLockPath(), "", "utf-8"); } catch {} } function clearWorkerSpawnAttempted() { if (process.platform !== "win32") return; try { const lockPath = getWorkerSpawnLockPath(); if (existsSync23(lockPath)) unlinkSync7(lockPath); } catch {} } var packageVersion = typeof __DEFAULT_PACKAGE_VERSION__ !== "undefined" ? __DEFAULT_PACKAGE_VERSION__ : "0.0.0-dev"; function buildStatusOutput(status, message) { return { continue: true, suppressOutput: true, status, ...message && { message } }; } class WorkerService { server; startTime = Date.now(); mcpClient; mcpReady = false; initializationCompleteFlag = false; isShuttingDown = false; dbManager; sessionManager; sseBroadcaster; sdkAgent; geminiAgent; openRouterAgent; paginationHelper; settingsManager; sessionEventBroadcaster; searchRoutes = null; chromaMcpManager = null; initializationComplete; resolveInitialization; stopOrphanReaper = null; staleSessionReaperInterval = null; lastAiInteraction = null; constructor() { this.initializationComplete = new Promise((resolve) => { this.resolveInitialization = resolve; }); this.dbManager = new DatabaseManager; this.sessionManager = new SessionManager(this.dbManager); this.sseBroadcaster = new SSEBroadcaster; this.sdkAgent = new SDKAgent(this.dbManager, this.sessionManager); this.geminiAgent = new GeminiAgent(this.dbManager, this.sessionManager); this.openRouterAgent = new OpenRouterAgent(this.dbManager, this.sessionManager); this.paginationHelper = new PaginationHelper(this.dbManager); this.settingsManager = new SettingsManager(this.dbManager); this.sessionEventBroadcaster = new SessionEventBroadcaster(this.sseBroadcaster, this); this.sessionManager.setOnSessionDeleted(() => { this.broadcastProcessingStatus(); }); this.mcpClient = new Client({ name: "worker-search-proxy", version: packageVersion }, { capabilities: {} }); this.server = new Server({ getInitializationComplete: () => this.initializationCompleteFlag, getMcpReady: () => this.mcpReady, onShutdown: () => this.shutdown(), onRestart: () => this.shutdown(), workerPath: __filename, getAiStatus: () => { let provider = "claude"; if (isOpenRouterSelected() && isOpenRouterAvailable()) provider = "openrouter"; else if (isGeminiSelected() && isGeminiAvailable()) provider = "gemini"; return { provider, authMethod: getAuthMethodDescription(), lastInteraction: this.lastAiInteraction ? { timestamp: this.lastAiInteraction.timestamp, success: this.lastAiInteraction.success, ...this.lastAiInteraction.error && { error: this.lastAiInteraction.error } } : null }; } }); this.registerRoutes(); this.registerSignalHandlers(); } registerSignalHandlers() { configureSupervisorSignalHandlers(async () => { this.isShuttingDown = true; await this.shutdown(); }); } registerRoutes() { this.server.app.get("/api/context/inject", async (req, res, next) => { if (!this.initializationCompleteFlag || !this.searchRoutes) { logger.warn("SYSTEM", "Context requested before initialization complete, returning empty"); res.status(200).json({ content: [{ type: "text", text: "" }] }); return; } next(); }); this.server.app.use("/api", async (req, res, next) => { if (this.initializationCompleteFlag) { next(); return; } const timeoutMs = 30000; const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error("Database initialization timeout")), timeoutMs)); try { await Promise.race([this.initializationComplete, timeoutPromise]); next(); } catch (error3) { logger.error("HTTP", `Request to ${req.method} ${req.path} rejected — DB not initialized`, {}, error3); res.status(503).json({ error: "Service initializing", message: "Database is still initializing, please retry" }); } }); this.server.registerRoutes(new ViewerRoutes(this.sseBroadcaster, this.dbManager, this.sessionManager)); this.server.registerRoutes(new SessionRoutes(this.sessionManager, this.dbManager, this.sdkAgent, this.geminiAgent, this.openRouterAgent, this.sessionEventBroadcaster, this)); this.server.registerRoutes(new DataRoutes(this.paginationHelper, this.dbManager, this.sessionManager, this.sseBroadcaster, this, this.startTime)); this.server.registerRoutes(new SettingsRoutes(this.settingsManager)); this.server.registerRoutes(new LogsRoutes); this.server.registerRoutes(new MemoryRoutes(this.dbManager, "claude-mem")); } async start() { const port = getWorkerPort(); const host = getWorkerHost(); await startSupervisor(); await this.server.listen(port, host); writePidFile({ pid: process.pid, port, startedAt: new Date().toISOString() }); getSupervisor().registerProcess("worker", { pid: process.pid, type: "worker", startedAt: new Date().toISOString() }); logger.info("SYSTEM", "Worker started", { host, port, pid: process.pid }); this.initializeBackground().catch((error3) => { logger.error("SYSTEM", "Background initialization failed", {}, error3); }); } async initializeBackground() { try { await aggressiveStartupCleanup(); const { ModeManager: ModeManager2 } = await Promise.resolve().then(() => (init_ModeManager(), exports_ModeManager)); const { SettingsDefaultsManager: SettingsDefaultsManager2 } = await Promise.resolve().then(() => (init_SettingsDefaultsManager(), exports_SettingsDefaultsManager)); const { USER_SETTINGS_PATH: USER_SETTINGS_PATH2 } = await Promise.resolve().then(() => (init_paths(), exports_paths)); const settings = SettingsDefaultsManager2.loadFromFile(USER_SETTINGS_PATH2); if (settings.CLAUDE_MEM_MODE === "local" || !settings.CLAUDE_MEM_MODE) { runOneTimeChromaMigration(); } const chromaEnabled = settings.CLAUDE_MEM_CHROMA_ENABLED !== "false"; if (chromaEnabled) { this.chromaMcpManager = ChromaMcpManager.getInstance(); logger.info("SYSTEM", "ChromaMcpManager initialized (lazy - connects on first use)"); } else { logger.info("SYSTEM", "Chroma disabled via CLAUDE_MEM_CHROMA_ENABLED=false, skipping ChromaMcpManager"); } const modeId = settings.CLAUDE_MEM_MODE; ModeManager2.getInstance().loadMode(modeId); logger.info("SYSTEM", `Mode loaded: ${modeId}`); await this.dbManager.initialize(); const { PendingMessageStore: PendingMessageStore2 } = await Promise.resolve().then(() => (init_PendingMessageStore(), exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); const resetCount = pendingStore.resetStaleProcessingMessages(0); if (resetCount > 0) { logger.info("SYSTEM", `Reset ${resetCount} stale processing messages to pending`); } const formattingService = new FormattingService; const timelineService = new TimelineService; const searchManager = new SearchManager(this.dbManager.getSessionSearch(), this.dbManager.getSessionStore(), this.dbManager.getChromaSync(), formattingService, timelineService); this.searchRoutes = new SearchRoutes(searchManager); this.server.registerRoutes(this.searchRoutes); logger.info("WORKER", "SearchManager initialized and search routes registered"); this.initializationCompleteFlag = true; this.resolveInitialization(); logger.info("SYSTEM", "Core initialization complete (DB + search ready)"); if (this.chromaMcpManager) { ChromaSync.backfillAllProjects().then(() => { logger.info("CHROMA_SYNC", "Backfill check complete for all projects"); }).catch((error3) => { logger.error("CHROMA_SYNC", "Backfill failed (non-blocking)", {}, error3); }); } const mcpServerPath = path24.join(__dirname, "mcp-server.cjs"); getSupervisor().assertCanSpawn("mcp server"); const transport = new StdioClientTransport({ command: "node", args: [mcpServerPath], env: sanitizeEnv(process.env) }); const MCP_INIT_TIMEOUT_MS = 300000; const mcpConnectionPromise = this.mcpClient.connect(transport); let timeoutId; const timeoutPromise = new Promise((_, reject) => { timeoutId = setTimeout(() => reject(new Error("MCP connection timeout after 5 minutes")), MCP_INIT_TIMEOUT_MS); }); try { await Promise.race([mcpConnectionPromise, timeoutPromise]); } catch (connectionError) { clearTimeout(timeoutId); logger.warn("WORKER", "MCP server connection failed, cleaning up subprocess", { error: connectionError instanceof Error ? connectionError.message : String(connectionError) }); try { await transport.close(); } catch {} throw connectionError; } clearTimeout(timeoutId); const mcpProcess = transport._process; if (mcpProcess?.pid) { getSupervisor().registerProcess("mcp-server", { pid: mcpProcess.pid, type: "mcp", startedAt: new Date().toISOString() }, mcpProcess); mcpProcess.once("exit", () => { getSupervisor().unregisterProcess("mcp-server"); }); } this.mcpReady = true; logger.success("WORKER", "MCP server connected"); this.stopOrphanReaper = startOrphanReaper(() => { const activeIds = new Set; for (const [id] of this.sessionManager["sessions"]) { activeIds.add(id); } return activeIds; }); logger.info("SYSTEM", "Started orphan reaper (runs every 30 seconds)"); this.staleSessionReaperInterval = setInterval(async () => { try { const reaped = await this.sessionManager.reapStaleSessions(); if (reaped > 0) { logger.info("SYSTEM", `Reaped ${reaped} stale sessions`); } } catch (e) { logger.error("SYSTEM", "Stale session reaper error", { error: e instanceof Error ? e.message : String(e) }); } }, 120000); this.processPendingQueues(50).then((result) => { if (result.sessionsStarted > 0) { logger.info("SYSTEM", `Auto-recovered ${result.sessionsStarted} sessions with pending work`, { totalPending: result.totalPendingSessions, started: result.sessionsStarted, sessionIds: result.startedSessionIds }); } }).catch((error3) => { logger.error("SYSTEM", "Auto-recovery of pending queues failed", {}, error3); }); } catch (error3) { logger.error("SYSTEM", "Background initialization failed", {}, error3); throw error3; } } getActiveAgent() { if (isOpenRouterSelected() && isOpenRouterAvailable()) { return this.openRouterAgent; } if (isGeminiSelected() && isGeminiAvailable()) { return this.geminiAgent; } return this.sdkAgent; } startSessionProcessor(session, source) { if (!session) return; const sid = session.sessionDbId; const agent = this.getActiveAgent(); const providerName = agent.constructor.name; if (session.abortController.signal.aborted) { logger.debug("SYSTEM", "Replacing aborted AbortController before starting generator", { sessionId: session.sessionDbId }); session.abortController = new AbortController; } let hadUnrecoverableError = false; let sessionFailed = false; logger.info("SYSTEM", `Starting generator (${source}) using ${providerName}`, { sessionId: sid }); session.lastGeneratorActivity = Date.now(); session.generatorPromise = agent.startSession(session, this).catch(async (error3) => { const errorMessage = error3?.message || ""; const unrecoverablePatterns = [ "Claude executable not found", "CLAUDE_CODE_PATH", "ENOENT", "spawn", "Invalid API key", "FOREIGN KEY constraint failed" ]; if (unrecoverablePatterns.some((pattern) => errorMessage.includes(pattern))) { hadUnrecoverableError = true; this.lastAiInteraction = { timestamp: Date.now(), success: false, provider: providerName, error: errorMessage }; logger.error("SDK", "Unrecoverable generator error - will NOT restart", { sessionId: session.sessionDbId, project: session.project, errorMessage }); return; } if (this.isSessionTerminatedError(error3)) { logger.warn("SDK", "SDK resume failed, falling back to standalone processing", { sessionId: session.sessionDbId, project: session.project, reason: error3 instanceof Error ? error3.message : String(error3) }); return this.runFallbackForTerminatedSession(session, error3); } if ((errorMessage.includes("aborted by user") || errorMessage.includes("No conversation found")) && session.memorySessionId) { logger.warn("SDK", "Detected stale resume failure, clearing memorySessionId for fresh start", { sessionId: session.sessionDbId, memorySessionId: session.memorySessionId, errorMessage }); this.dbManager.getSessionStore().updateMemorySessionId(session.sessionDbId, null); session.memorySessionId = null; session.forceInit = true; } logger.error("SDK", "Session generator failed", { sessionId: session.sessionDbId, project: session.project, provider: providerName }, error3); sessionFailed = true; this.lastAiInteraction = { timestamp: Date.now(), success: false, provider: providerName, error: errorMessage }; throw error3; }).finally(async () => { const trackedProcess = getProcessBySession(session.sessionDbId); if (trackedProcess && trackedProcess.process.exitCode === null) { await ensureProcessExit(trackedProcess, 5000); } session.generatorPromise = null; if (!sessionFailed && !hadUnrecoverableError) { this.lastAiInteraction = { timestamp: Date.now(), success: true, provider: providerName }; } if (hadUnrecoverableError) { logger.warn("SYSTEM", "Skipping restart due to unrecoverable error", { sessionId: session.sessionDbId }); this.broadcastProcessingStatus(); return; } const { PendingMessageStore: PendingMessageStore2 } = (init_PendingMessageStore(), __toCommonJS(exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); if (session.idleTimedOut) { logger.info("SYSTEM", "Generator exited due to idle timeout, not restarting", { sessionId: session.sessionDbId }); session.idleTimedOut = false; this.broadcastProcessingStatus(); return; } const pendingCount = pendingStore.getPendingCount(session.sessionDbId); const MAX_PENDING_RESTARTS = 3; if (pendingCount > 0) { session.consecutiveRestarts = (session.consecutiveRestarts || 0) + 1; if (session.consecutiveRestarts > MAX_PENDING_RESTARTS) { logger.error("SYSTEM", "Exceeded max pending-work restarts, stopping to prevent infinite loop", { sessionId: session.sessionDbId, pendingCount, consecutiveRestarts: session.consecutiveRestarts }); session.consecutiveRestarts = 0; this.broadcastProcessingStatus(); return; } logger.info("SYSTEM", "Pending work remains after generator exit, restarting with fresh AbortController", { sessionId: session.sessionDbId, pendingCount, attempt: session.consecutiveRestarts }); session.abortController = new AbortController; this.startSessionProcessor(session, "pending-work-restart"); } else { session.consecutiveRestarts = 0; } this.broadcastProcessingStatus(); }); } isSessionTerminatedError(error3) { const msg = error3 instanceof Error ? error3.message : String(error3); const normalized = msg.toLowerCase(); return normalized.includes("process aborted by user") || normalized.includes("processtransport") || normalized.includes("not ready for writing") || normalized.includes("session generator failed") || normalized.includes("claude code process"); } async runFallbackForTerminatedSession(session, _originalError) { if (!session) return; const sessionDbId = session.sessionDbId; if (!session.memorySessionId) { const syntheticId = `fallback-${sessionDbId}-${Date.now()}`; session.memorySessionId = syntheticId; this.dbManager.getSessionStore().updateMemorySessionId(sessionDbId, syntheticId); } if (isGeminiAvailable()) { try { await this.geminiAgent.startSession(session, this); return; } catch (e) { logger.warn("SDK", "Fallback Gemini failed, trying OpenRouter", { sessionId: sessionDbId, error: e instanceof Error ? e.message : String(e) }); } } if (isOpenRouterAvailable()) { try { await this.openRouterAgent.startSession(session, this); return; } catch (e) { logger.warn("SDK", "Fallback OpenRouter failed", { sessionId: sessionDbId, error: e instanceof Error ? e.message : String(e) }); } } const pendingStore = this.sessionManager.getPendingMessageStore(); const abandoned = pendingStore.markAllSessionMessagesAbandoned(sessionDbId); if (abandoned > 0) { logger.warn("SDK", "No fallback available; marked pending messages abandoned", { sessionId: sessionDbId, abandoned }); } this.sessionManager.removeSessionImmediate(sessionDbId); this.sessionEventBroadcaster.broadcastSessionCompleted(sessionDbId); } async processPendingQueues(sessionLimit = 10) { const { PendingMessageStore: PendingMessageStore2 } = await Promise.resolve().then(() => (init_PendingMessageStore(), exports_PendingMessageStore)); const pendingStore = new PendingMessageStore2(this.dbManager.getSessionStore().db, 3); const sessionStore = this.dbManager.getSessionStore(); const STALE_SESSION_THRESHOLD_MS = 21600000; const staleThreshold = Date.now() - STALE_SESSION_THRESHOLD_MS; try { const staleSessionIds = sessionStore.db.prepare(` SELECT id FROM sdk_sessions WHERE status = 'active' AND started_at_epoch < ? `).all(staleThreshold); if (staleSessionIds.length > 0) { const ids = staleSessionIds.map((r) => r.id); const placeholders = ids.map(() => "?").join(","); sessionStore.db.prepare(` UPDATE sdk_sessions SET status = 'failed', completed_at_epoch = ? WHERE id IN (${placeholders}) `).run(Date.now(), ...ids); logger.info("SYSTEM", `Marked ${ids.length} stale sessions as failed`); const msgResult = sessionStore.db.prepare(` UPDATE pending_messages SET status = 'failed', failed_at_epoch = ? WHERE status = 'pending' AND session_db_id IN (${placeholders}) `).run(Date.now(), ...ids); if (msgResult.changes > 0) { logger.info("SYSTEM", `Marked ${msgResult.changes} pending messages from stale sessions as failed`); } } } catch (error3) { logger.error("SYSTEM", "Failed to clean up stale sessions", {}, error3); } const orphanedSessionIds = pendingStore.getSessionsWithPendingMessages(); const result = { totalPendingSessions: orphanedSessionIds.length, sessionsStarted: 0, sessionsSkipped: 0, startedSessionIds: [] }; if (orphanedSessionIds.length === 0) return result; logger.info("SYSTEM", `Processing up to ${sessionLimit} of ${orphanedSessionIds.length} pending session queues`); for (const sessionDbId of orphanedSessionIds) { if (result.sessionsStarted >= sessionLimit) break; try { const existingSession = this.sessionManager.getSession(sessionDbId); if (existingSession?.generatorPromise) { result.sessionsSkipped++; continue; } const session = this.sessionManager.initializeSession(sessionDbId); logger.info("SYSTEM", `Starting processor for session ${sessionDbId}`, { project: session.project, pendingCount: pendingStore.getPendingCount(sessionDbId) }); this.startSessionProcessor(session, "startup-recovery"); result.sessionsStarted++; result.startedSessionIds.push(sessionDbId); await new Promise((resolve) => setTimeout(resolve, 100)); } catch (error3) { logger.error("SYSTEM", `Failed to process session ${sessionDbId}`, {}, error3); result.sessionsSkipped++; } } return result; } async shutdown() { if (this.stopOrphanReaper) { this.stopOrphanReaper(); this.stopOrphanReaper = null; } if (this.staleSessionReaperInterval) { clearInterval(this.staleSessionReaperInterval); this.staleSessionReaperInterval = null; } await performGracefulShutdown({ server: this.server.getHttpServer(), sessionManager: this.sessionManager, mcpClient: this.mcpClient, dbManager: this.dbManager, chromaMcpManager: this.chromaMcpManager || undefined }); } broadcastProcessingStatus() { const isProcessing = this.sessionManager.isAnySessionProcessing(); const queueDepth = this.sessionManager.getTotalActiveWork(); const activeSessions = this.sessionManager.getActiveSessionCount(); logger.info("WORKER", "Broadcasting processing status", { isProcessing, queueDepth, activeSessions }); this.sseBroadcaster.broadcast({ type: "processing_status", isProcessing, queueDepth }); } } async function ensureWorkerStarted(port) { const pidFileStatus = cleanStalePidFile(); if (pidFileStatus === "alive") { logger.info("SYSTEM", "Worker PID file points to a live process, skipping duplicate spawn"); const healthy2 = await waitForHealth(port, getPlatformTimeout(HOOK_TIMEOUTS.PORT_IN_USE_WAIT)); if (healthy2) { logger.info("SYSTEM", "Worker became healthy while waiting on live PID"); return true; } logger.warn("SYSTEM", "Live PID detected but worker did not become healthy before timeout"); return false; } if (await waitForHealth(port, 1000)) { const versionCheck = await checkVersionMatch(port); if (!versionCheck.matches) { const RESTART_COORDINATION_THRESHOLD_MS = 15000; if (isPidFileRecent(RESTART_COORDINATION_THRESHOLD_MS)) { logger.info("SYSTEM", "Version mismatch detected but PID file is recent — another restart likely in progress, polling health", { pluginVersion: versionCheck.pluginVersion, workerVersion: versionCheck.workerVersion }); const healthy2 = await waitForHealth(port, RESTART_COORDINATION_THRESHOLD_MS); if (healthy2) { logger.info("SYSTEM", "Worker became healthy after waiting for concurrent restart"); return true; } logger.warn("SYSTEM", "Worker did not become healthy after waiting — proceeding with own restart"); } logger.info("SYSTEM", "Worker version mismatch detected - auto-restarting", { pluginVersion: versionCheck.pluginVersion, workerVersion: versionCheck.workerVersion }); await httpShutdown(port); const freed = await waitForPortFree(port, getPlatformTimeout(HOOK_TIMEOUTS.PORT_IN_USE_WAIT)); if (!freed) { logger.error("SYSTEM", "Port did not free up after shutdown for version mismatch restart", { port }); return false; } removePidFile(); } else { logger.info("SYSTEM", "Worker already running and healthy"); return true; } } const portInUse = await isPortInUse(port); if (portInUse) { logger.info("SYSTEM", "Port in use, waiting for worker to become healthy"); const healthy2 = await waitForHealth(port, getPlatformTimeout(HOOK_TIMEOUTS.PORT_IN_USE_WAIT)); if (healthy2) { logger.info("SYSTEM", "Worker is now healthy"); return true; } logger.error("SYSTEM", "Port in use but worker not responding to health checks"); return false; } if (shouldSkipSpawnOnWindows()) { logger.warn("SYSTEM", "Worker unavailable on Windows — skipping spawn (recent attempt failed within cooldown)"); return false; } logger.info("SYSTEM", "Starting worker daemon"); markWorkerSpawnAttempted(); const pid = spawnDaemon(__filename, port); if (pid === undefined) { logger.error("SYSTEM", "Failed to spawn worker daemon"); return false; } const healthy = await waitForHealth(port, getPlatformTimeout(HOOK_TIMEOUTS.POST_SPAWN_WAIT)); if (!healthy) { removePidFile(); logger.error("SYSTEM", "Worker failed to start (health check timeout)"); return false; } const ready = await waitForReadiness(port, getPlatformTimeout(HOOK_TIMEOUTS.READINESS_WAIT)); if (!ready) { logger.warn("SYSTEM", "Worker is alive but readiness timed out — proceeding anyway"); } clearWorkerSpawnAttempted(); touchPidFile(); logger.info("SYSTEM", "Worker started successfully"); return true; } async function main() { const command = process.argv[2]; const hookInitiatedCommands = ["start", "hook", "restart", "--daemon"]; if ((hookInitiatedCommands.includes(command) || command === undefined) && isPluginDisabledInClaudeSettings()) { process.exit(0); } const port = getWorkerPort(); function exitWithStatus(status, message) { const output = buildStatusOutput(status, message); console.log(JSON.stringify(output)); process.exit(0); } switch (command) { case "start": { const success = await ensureWorkerStarted(port); if (success) { exitWithStatus("ready"); } else { exitWithStatus("error", "Failed to start worker"); } break; } case "stop": { await httpShutdown(port); const freed = await waitForPortFree(port, getPlatformTimeout(15000)); if (!freed) { logger.warn("SYSTEM", "Port did not free up after shutdown", { port }); } removePidFile(); logger.info("SYSTEM", "Worker stopped successfully"); process.exit(0); break; } case "restart": { logger.info("SYSTEM", "Restarting worker"); await httpShutdown(port); const restartFreed = await waitForPortFree(port, getPlatformTimeout(15000)); if (!restartFreed) { logger.error("SYSTEM", "Port did not free up after shutdown, aborting restart", { port }); process.exit(0); } removePidFile(); const pid = spawnDaemon(__filename, port); if (pid === undefined) { logger.error("SYSTEM", "Failed to spawn worker daemon during restart"); process.exit(0); } const healthy = await waitForHealth(port, getPlatformTimeout(HOOK_TIMEOUTS.POST_SPAWN_WAIT)); if (!healthy) { removePidFile(); logger.error("SYSTEM", "Worker failed to restart"); process.exit(0); } logger.info("SYSTEM", "Worker restarted successfully"); process.exit(0); break; } case "status": { const portInUse = await isPortInUse(port); const pidInfo = readPidFile(); if (portInUse && pidInfo) { console.log("Worker is running"); console.log(` PID: ${pidInfo.pid}`); console.log(` Port: ${pidInfo.port}`); console.log(` Started: ${pidInfo.startedAt}`); } else { console.log("Worker is not running"); } process.exit(0); break; } case "cursor": { const subcommand = process.argv[3]; const cursorResult = await handleCursorCommand(subcommand, process.argv.slice(4)); process.exit(cursorResult); break; } case "hook": { const platform = process.argv[3]; const event = process.argv[4]; if (!platform || !event) { console.error("Usage: claude-mem hook "); console.error("Platforms: claude-code, cursor, raw"); console.error("Events: context, session-init, observation, summarize, session-complete"); process.exit(1); } const workerReady = await ensureWorkerStarted(port); if (!workerReady) { logger.warn("SYSTEM", "Worker failed to start before hook, handler will proceed gracefully"); } const { hookCommand: hookCommand2 } = await Promise.resolve().then(() => (init_hook_command(), exports_hook_command)); await hookCommand2(platform, event); break; } case "generate": { const dryRun = process.argv.includes("--dry-run"); const { generateClaudeMd: generateClaudeMd2 } = await Promise.resolve().then(() => (init_claude_md_commands(), exports_claude_md_commands)); const result = await generateClaudeMd2(dryRun); process.exit(result); break; } case "clean": { const dryRun = process.argv.includes("--dry-run"); const { cleanClaudeMd: cleanClaudeMd2 } = await Promise.resolve().then(() => (init_claude_md_commands(), exports_claude_md_commands)); const result = await cleanClaudeMd2(dryRun); process.exit(result); break; } case "--daemon": default: { const existingPidInfo = readPidFile(); if (existingPidInfo && isProcessAlive(existingPidInfo.pid)) { logger.info("SYSTEM", "Worker already running (PID alive), refusing to start duplicate", { existingPid: existingPidInfo.pid, existingPort: existingPidInfo.port, startedAt: existingPidInfo.startedAt }); process.exit(0); } if (await isPortInUse(port)) { logger.info("SYSTEM", "Port already in use, refusing to start duplicate", { port }); process.exit(0); } process.on("unhandledRejection", (reason) => { logger.error("SYSTEM", "Unhandled rejection in daemon", { reason: reason instanceof Error ? reason.message : String(reason) }); }); process.on("uncaughtException", (error3) => { logger.error("SYSTEM", "Uncaught exception in daemon", {}, error3); }); const worker = new WorkerService; worker.start().catch((error3) => { logger.failure("SYSTEM", "Worker failed to start", {}, error3); removePidFile(); process.exit(0); }); } } } var isMainModule = typeof module_worker_service !== "undefined" ? __require.main == __require.module || !module_worker_service.parent : import.meta.url === `file://${process.argv[1]}` || process.argv[1]?.endsWith("worker-service"); if (isMainModule) { main().catch((error3) => { logger.error("SYSTEM", "Fatal error in main", {}, error3 instanceof Error ? error3 : undefined); process.exit(0); }); } export { isPluginDisabledInClaudeSettings, buildStatusOutput, WorkerService };