edgebase-worker 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../bundle-k6w7ik/strip-cf-connecting-ip-header.js", "../../../node_modules/unenv/dist/runtime/_internal/utils.mjs", "../../../node_modules/unenv/dist/runtime/node/internal/perf_hooks/performance.mjs", "../../../node_modules/@cloudflare/unenv-preset/dist/runtime/polyfill/performance.mjs", "../../../node_modules/unenv/dist/runtime/node/console.mjs", "../../../node_modules/unenv/dist/runtime/mock/noop.mjs", "../../../node_modules/@cloudflare/unenv-preset/dist/runtime/node/console.mjs", "../../../node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-console", "../../../node_modules/unenv/dist/runtime/node/internal/process/hrtime.mjs", "../../../node_modules/unenv/dist/runtime/node/internal/process/process.mjs", "../../../node_modules/unenv/dist/runtime/node/internal/tty/read-stream.mjs", "../../../node_modules/unenv/dist/runtime/node/internal/tty/write-stream.mjs", "../../../node_modules/@cloudflare/unenv-preset/dist/runtime/node/process.mjs", "../../../node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-process", "../../../../../node_modules/hono/dist/compose.js", "../../../../../node_modules/hono/dist/request/constants.js", "../../../../../node_modules/hono/dist/utils/body.js", "../../../../../node_modules/hono/dist/utils/url.js", "../../../../../node_modules/hono/dist/request.js", "../../../../../node_modules/hono/dist/utils/html.js", "../../../../../node_modules/hono/dist/context.js", "../../../../../node_modules/hono/dist/router.js", "../../../../../node_modules/hono/dist/utils/constants.js", "../../../../../node_modules/hono/dist/hono-base.js", "../../../../../node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../../../node_modules/hono/dist/router/reg-exp-router/node.js", "../../../../../node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../../../node_modules/hono/dist/router/reg-exp-router/router.js", "../../../../../node_modules/hono/dist/router/smart-router/router.js", "../../../../../node_modules/hono/dist/router/trie-router/node.js", "../../../../../node_modules/hono/dist/router/trie-router/router.js", "../../../../../node_modules/hono/dist/hono.js", "../../../../../node_modules/hono/dist/middleware/cors/index.js", "../../../../../node_modules/zod/v3/external.js", "../../../../../node_modules/zod/v3/helpers/util.js", "../../../../../node_modules/zod/v3/ZodError.js", "../../../../../node_modules/zod/v3/locales/en.js", "../../../../../node_modules/zod/v3/errors.js", "../../../../../node_modules/zod/v3/helpers/parseUtil.js", "../../../../../node_modules/zod/v3/helpers/errorUtil.js", "../../../../../node_modules/zod/v3/types.js", "../../../../../packages/core/src/auth/auth-service.ts", "../../../../../packages/core/src/access-rules/engine.ts", "../../../../../packages/core/src/sync/sync-engine.ts", "../../../../../packages/core/src/access-rules/column-security.ts", "../../../../../packages/core/src/realtime/subscription-manager.ts", "../../../../../packages/core/src/realtime/change-notifier.ts", "../../../../../packages/core/src/sync/transaction-manager.ts", "../../../../../packages/core/src/sync/batch-processor.ts", "../../../../../packages/core/src/sync/csv-processor.ts", "../../../../../packages/core/src/storage/file-manager.ts", "../../../../../packages/core/src/webhooks/webhook-manager.ts", "../../../../../packages/core/src/search/search-manager.ts", "../../../../../packages/core/src/audit/audit-manager.ts", "../../../../../packages/core/src/encryption/encryption-manager.ts", "../../../../../packages/core/src/notifications/push-notification-manager.ts", "../../../../../packages/core/src/analytics/analytics-manager.ts", "../../../../../packages/adapter-d1/src/d1-adapter.ts", "../../../../../packages/adapter-d1/src/schema-to-sql.ts", "../../../../../packages/worker/src/index.ts", "../../../edgebase.schema.ts", "../../../src/index.ts", "../../../node_modules/wrangler/templates/middleware/middleware-ensure-req-body-drained.ts", "../../../node_modules/wrangler/templates/middleware/middleware-miniflare3-json-error.ts", "../bundle-k6w7ik/middleware-insertion-facade.js", "../../../node_modules/wrangler/templates/middleware/common.ts", "../bundle-k6w7ik/middleware-loader.entry.ts"],
4
+ "sourceRoot": "/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/.wrangler/tmp/dev-VDWiSm",
5
+ "sourcesContent": ["function stripCfConnectingIPHeader(input, init) {\n\tconst request = new Request(input, init);\n\trequest.headers.delete(\"CF-Connecting-IP\");\n\treturn request;\n}\n\nglobalThis.fetch = new Proxy(globalThis.fetch, {\n\tapply(target, thisArg, argArray) {\n\t\treturn Reflect.apply(target, thisArg, [\n\t\t\tstripCfConnectingIPHeader.apply(null, argArray),\n\t\t]);\n\t},\n});\n", "/*@__NO_SIDE_EFFECTS__*/ export function rawHeaders(headers) {\n\tconst rawHeaders = [];\n\tfor (const key in headers) {\n\t\tif (Array.isArray(headers[key])) {\n\t\t\tfor (const h of headers[key]) {\n\t\t\t\trawHeaders.push(key, h);\n\t\t\t}\n\t\t} else {\n\t\t\trawHeaders.push(key, headers[key]);\n\t\t}\n\t}\n\treturn rawHeaders;\n}\n/*@__NO_SIDE_EFFECTS__*/ export function mergeFns(...functions) {\n\treturn function(...args) {\n\t\tfor (const fn of functions) {\n\t\t\tfn(...args);\n\t\t}\n\t};\n}\n/*@__NO_SIDE_EFFECTS__*/ export function createNotImplementedError(name) {\n\treturn new Error(`[unenv] ${name} is not implemented yet!`);\n}\n/*@__NO_SIDE_EFFECTS__*/ export function notImplemented(name) {\n\tconst fn = () => {\n\t\tthrow createNotImplementedError(name);\n\t};\n\treturn Object.assign(fn, { __unenv__: true });\n}\n/*@__NO_SIDE_EFFECTS__*/ export function notImplementedAsync(name) {\n\tconst fn = notImplemented(name);\n\tfn.__promisify__ = () => notImplemented(name + \".__promisify__\");\n\tfn.native = fn;\n\treturn fn;\n}\n/*@__NO_SIDE_EFFECTS__*/ export function notImplementedClass(name) {\n\treturn class {\n\t\t__unenv__ = true;\n\t\tconstructor() {\n\t\t\tthrow new Error(`[unenv] ${name} is not implemented yet!`);\n\t\t}\n\t};\n}\n", "import { createNotImplementedError } from \"../../../_internal/utils.mjs\";\nconst _timeOrigin = globalThis.performance?.timeOrigin ?? Date.now();\nconst _performanceNow = globalThis.performance?.now ? globalThis.performance.now.bind(globalThis.performance) : () => Date.now() - _timeOrigin;\nconst nodeTiming = {\n\tname: \"node\",\n\tentryType: \"node\",\n\tstartTime: 0,\n\tduration: 0,\n\tnodeStart: 0,\n\tv8Start: 0,\n\tbootstrapComplete: 0,\n\tenvironment: 0,\n\tloopStart: 0,\n\tloopExit: 0,\n\tidleTime: 0,\n\tuvMetricsInfo: {\n\t\tloopCount: 0,\n\t\tevents: 0,\n\t\teventsWaiting: 0\n\t},\n\tdetail: undefined,\n\ttoJSON() {\n\t\treturn this;\n\t}\n};\nexport class PerformanceEntry {\n\t__unenv__ = true;\n\tdetail;\n\tentryType = \"event\";\n\tname;\n\tstartTime;\n\tconstructor(name, options) {\n\t\tthis.name = name;\n\t\tthis.startTime = options?.startTime || _performanceNow();\n\t\tthis.detail = options?.detail;\n\t}\n\tget duration() {\n\t\treturn _performanceNow() - this.startTime;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tentryType: this.entryType,\n\t\t\tstartTime: this.startTime,\n\t\t\tduration: this.duration,\n\t\t\tdetail: this.detail\n\t\t};\n\t}\n}\nexport const PerformanceMark = class PerformanceMark extends PerformanceEntry {\n\tentryType = \"mark\";\n\tconstructor() {\n\t\tsuper(...arguments);\n\t}\n\tget duration() {\n\t\treturn 0;\n\t}\n};\nexport class PerformanceMeasure extends PerformanceEntry {\n\tentryType = \"measure\";\n}\nexport class PerformanceResourceTiming extends PerformanceEntry {\n\tentryType = \"resource\";\n\tserverTiming = [];\n\tconnectEnd = 0;\n\tconnectStart = 0;\n\tdecodedBodySize = 0;\n\tdomainLookupEnd = 0;\n\tdomainLookupStart = 0;\n\tencodedBodySize = 0;\n\tfetchStart = 0;\n\tinitiatorType = \"\";\n\tname = \"\";\n\tnextHopProtocol = \"\";\n\tredirectEnd = 0;\n\tredirectStart = 0;\n\trequestStart = 0;\n\tresponseEnd = 0;\n\tresponseStart = 0;\n\tsecureConnectionStart = 0;\n\tstartTime = 0;\n\ttransferSize = 0;\n\tworkerStart = 0;\n\tresponseStatus = 0;\n}\nexport class PerformanceObserverEntryList {\n\t__unenv__ = true;\n\tgetEntries() {\n\t\treturn [];\n\t}\n\tgetEntriesByName(_name, _type) {\n\t\treturn [];\n\t}\n\tgetEntriesByType(type) {\n\t\treturn [];\n\t}\n}\nexport class Performance {\n\t__unenv__ = true;\n\ttimeOrigin = _timeOrigin;\n\teventCounts = new Map();\n\t_entries = [];\n\t_resourceTimingBufferSize = 0;\n\tnavigation = undefined;\n\ttiming = undefined;\n\ttimerify(_fn, _options) {\n\t\tthrow createNotImplementedError(\"Performance.timerify\");\n\t}\n\tget nodeTiming() {\n\t\treturn nodeTiming;\n\t}\n\teventLoopUtilization() {\n\t\treturn {};\n\t}\n\tmarkResourceTiming() {\n\t\treturn new PerformanceResourceTiming(\"\");\n\t}\n\tonresourcetimingbufferfull = null;\n\tnow() {\n\t\tif (this.timeOrigin === _timeOrigin) {\n\t\t\treturn _performanceNow();\n\t\t}\n\t\treturn Date.now() - this.timeOrigin;\n\t}\n\tclearMarks(markName) {\n\t\tthis._entries = markName ? this._entries.filter((e) => e.name !== markName) : this._entries.filter((e) => e.entryType !== \"mark\");\n\t}\n\tclearMeasures(measureName) {\n\t\tthis._entries = measureName ? this._entries.filter((e) => e.name !== measureName) : this._entries.filter((e) => e.entryType !== \"measure\");\n\t}\n\tclearResourceTimings() {\n\t\tthis._entries = this._entries.filter((e) => e.entryType !== \"resource\" || e.entryType !== \"navigation\");\n\t}\n\tgetEntries() {\n\t\treturn this._entries;\n\t}\n\tgetEntriesByName(name, type) {\n\t\treturn this._entries.filter((e) => e.name === name && (!type || e.entryType === type));\n\t}\n\tgetEntriesByType(type) {\n\t\treturn this._entries.filter((e) => e.entryType === type);\n\t}\n\tmark(name, options) {\n\t\tconst entry = new PerformanceMark(name, options);\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tmeasure(measureName, startOrMeasureOptions, endMark) {\n\t\tlet start;\n\t\tlet end;\n\t\tif (typeof startOrMeasureOptions === \"string\") {\n\t\t\tstart = this.getEntriesByName(startOrMeasureOptions, \"mark\")[0]?.startTime;\n\t\t\tend = this.getEntriesByName(endMark, \"mark\")[0]?.startTime;\n\t\t} else {\n\t\t\tstart = Number.parseFloat(startOrMeasureOptions?.start) || this.now();\n\t\t\tend = Number.parseFloat(startOrMeasureOptions?.end) || this.now();\n\t\t}\n\t\tconst entry = new PerformanceMeasure(measureName, {\n\t\t\tstartTime: start,\n\t\t\tdetail: {\n\t\t\t\tstart,\n\t\t\t\tend\n\t\t\t}\n\t\t});\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tsetResourceTimingBufferSize(maxSize) {\n\t\tthis._resourceTimingBufferSize = maxSize;\n\t}\n\taddEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.addEventListener\");\n\t}\n\tremoveEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.removeEventListener\");\n\t}\n\tdispatchEvent(event) {\n\t\tthrow createNotImplementedError(\"Performance.dispatchEvent\");\n\t}\n\ttoJSON() {\n\t\treturn this;\n\t}\n}\nexport class PerformanceObserver {\n\t__unenv__ = true;\n\tstatic supportedEntryTypes = [];\n\t_callback = null;\n\tconstructor(callback) {\n\t\tthis._callback = callback;\n\t}\n\ttakeRecords() {\n\t\treturn [];\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.disconnect\");\n\t}\n\tobserve(options) {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.observe\");\n\t}\n\tbind(fn) {\n\t\treturn fn;\n\t}\n\trunInAsyncScope(fn, thisArg, ...args) {\n\t\treturn fn.call(thisArg, ...args);\n\t}\n\tasyncId() {\n\t\treturn 0;\n\t}\n\ttriggerAsyncId() {\n\t\treturn 0;\n\t}\n\temitDestroy() {\n\t\treturn this;\n\t}\n}\nexport const performance = globalThis.performance && \"addEventListener\" in globalThis.performance ? globalThis.performance : new Performance();\n", "import {\n performance,\n Performance,\n PerformanceEntry,\n PerformanceMark,\n PerformanceMeasure,\n PerformanceObserver,\n PerformanceObserverEntryList,\n PerformanceResourceTiming\n} from \"node:perf_hooks\";\nglobalThis.performance = performance;\nglobalThis.Performance = Performance;\nglobalThis.PerformanceEntry = PerformanceEntry;\nglobalThis.PerformanceMark = PerformanceMark;\nglobalThis.PerformanceMeasure = PerformanceMeasure;\nglobalThis.PerformanceObserver = PerformanceObserver;\nglobalThis.PerformanceObserverEntryList = PerformanceObserverEntryList;\nglobalThis.PerformanceResourceTiming = PerformanceResourceTiming;\n", "import { Writable } from \"node:stream\";\nimport noop from \"../mock/noop.mjs\";\nimport { notImplemented, notImplementedClass } from \"../_internal/utils.mjs\";\nconst _console = globalThis.console;\nexport const _ignoreErrors = true;\nexport const _stderr = new Writable();\nexport const _stdout = new Writable();\nexport const log = _console?.log ?? noop;\nexport const info = _console?.info ?? log;\nexport const trace = _console?.trace ?? info;\nexport const debug = _console?.debug ?? log;\nexport const table = _console?.table ?? log;\nexport const error = _console?.error ?? log;\nexport const warn = _console?.warn ?? error;\nexport const createTask = _console?.createTask ?? /*@__PURE__*/ notImplemented(\"console.createTask\");\nexport const assert = /*@__PURE__*/ notImplemented(\"console.assert\");\nexport const clear = _console?.clear ?? noop;\nexport const count = _console?.count ?? noop;\nexport const countReset = _console?.countReset ?? noop;\nexport const dir = _console?.dir ?? noop;\nexport const dirxml = _console?.dirxml ?? noop;\nexport const group = _console?.group ?? noop;\nexport const groupEnd = _console?.groupEnd ?? noop;\nexport const groupCollapsed = _console?.groupCollapsed ?? noop;\nexport const profile = _console?.profile ?? noop;\nexport const profileEnd = _console?.profileEnd ?? noop;\nexport const time = _console?.time ?? noop;\nexport const timeEnd = _console?.timeEnd ?? noop;\nexport const timeLog = _console?.timeLog ?? noop;\nexport const timeStamp = _console?.timeStamp ?? noop;\nexport const Console = _console?.Console ?? /*@__PURE__*/ notImplementedClass(\"console.Console\");\nexport const _times = /*@__PURE__*/ new Map();\nexport function context() {\n\treturn _console;\n}\nexport const _stdoutErrorHandler = noop;\nexport const _stderrErrorHandler = noop;\nexport default {\n\t_times,\n\t_ignoreErrors,\n\t_stdoutErrorHandler,\n\t_stderrErrorHandler,\n\t_stdout,\n\t_stderr,\n\tassert,\n\tclear,\n\tConsole,\n\tcount,\n\tcountReset,\n\tdebug,\n\tdir,\n\tdirxml,\n\terror,\n\tcontext,\n\tcreateTask,\n\tgroup,\n\tgroupEnd,\n\tgroupCollapsed,\n\tinfo,\n\tlog,\n\tprofile,\n\tprofileEnd,\n\ttable,\n\ttime,\n\ttimeEnd,\n\ttimeLog,\n\ttimeStamp,\n\ttrace,\n\twarn\n};\n", "export default Object.assign(() => {}, { __unenv__: true });\n", "import {\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times,\n Console\n} from \"unenv/node/console\";\nexport {\n Console,\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times\n} from \"unenv/node/console\";\nconst workerdConsole = globalThis[\"console\"];\nexport const {\n assert,\n clear,\n // @ts-expect-error undocumented public API\n context,\n count,\n countReset,\n // @ts-expect-error undocumented public API\n createTask,\n debug,\n dir,\n dirxml,\n error,\n group,\n groupCollapsed,\n groupEnd,\n info,\n log,\n profile,\n profileEnd,\n table,\n time,\n timeEnd,\n timeLog,\n timeStamp,\n trace,\n warn\n} = workerdConsole;\nObject.assign(workerdConsole, {\n Console,\n _ignoreErrors,\n _stderr,\n _stderrErrorHandler,\n _stdout,\n _stdoutErrorHandler,\n _times\n});\nexport default workerdConsole;\n", "import { default as defaultExport } from \"@cloudflare/unenv-preset/node/console\";\nglobalThis.console = defaultExport;", "export const hrtime = /*@__PURE__*/ Object.assign(function hrtime(startTime) {\n\tconst now = Date.now();\n\tconst seconds = Math.trunc(now / 1e3);\n\tconst nanos = now % 1e3 * 1e6;\n\tif (startTime) {\n\t\tlet diffSeconds = seconds - startTime[0];\n\t\tlet diffNanos = nanos - startTime[0];\n\t\tif (diffNanos < 0) {\n\t\t\tdiffSeconds = diffSeconds - 1;\n\t\t\tdiffNanos = 1e9 + diffNanos;\n\t\t}\n\t\treturn [diffSeconds, diffNanos];\n\t}\n\treturn [seconds, nanos];\n}, { bigint: function bigint() {\n\treturn BigInt(Date.now() * 1e6);\n} });\n", "import { EventEmitter } from \"node:events\";\nimport { ReadStream, WriteStream } from \"node:tty\";\nimport { notImplemented, createNotImplementedError } from \"../../../_internal/utils.mjs\";\nexport class Process extends EventEmitter {\n\tenv;\n\thrtime;\n\tnextTick;\n\tconstructor(impl) {\n\t\tsuper();\n\t\tthis.env = impl.env;\n\t\tthis.hrtime = impl.hrtime;\n\t\tthis.nextTick = impl.nextTick;\n\t\tfor (const prop of [...Object.getOwnPropertyNames(Process.prototype), ...Object.getOwnPropertyNames(EventEmitter.prototype)]) {\n\t\t\tconst value = this[prop];\n\t\t\tif (typeof value === \"function\") {\n\t\t\t\tthis[prop] = value.bind(this);\n\t\t\t}\n\t\t}\n\t}\n\temitWarning(warning, type, code) {\n\t\tconsole.warn(`${code ? `[${code}] ` : \"\"}${type ? `${type}: ` : \"\"}${warning}`);\n\t}\n\temit(...args) {\n\t\treturn super.emit(...args);\n\t}\n\tlisteners(eventName) {\n\t\treturn super.listeners(eventName);\n\t}\n\t#stdin;\n\t#stdout;\n\t#stderr;\n\tget stdin() {\n\t\treturn this.#stdin ??= new ReadStream(0);\n\t}\n\tget stdout() {\n\t\treturn this.#stdout ??= new WriteStream(1);\n\t}\n\tget stderr() {\n\t\treturn this.#stderr ??= new WriteStream(2);\n\t}\n\t#cwd = \"/\";\n\tchdir(cwd) {\n\t\tthis.#cwd = cwd;\n\t}\n\tcwd() {\n\t\treturn this.#cwd;\n\t}\n\tarch = \"\";\n\tplatform = \"\";\n\targv = [];\n\targv0 = \"\";\n\texecArgv = [];\n\texecPath = \"\";\n\ttitle = \"\";\n\tpid = 200;\n\tppid = 100;\n\tget version() {\n\t\treturn \"\";\n\t}\n\tget versions() {\n\t\treturn {};\n\t}\n\tget allowedNodeEnvironmentFlags() {\n\t\treturn new Set();\n\t}\n\tget sourceMapsEnabled() {\n\t\treturn false;\n\t}\n\tget debugPort() {\n\t\treturn 0;\n\t}\n\tget throwDeprecation() {\n\t\treturn false;\n\t}\n\tget traceDeprecation() {\n\t\treturn false;\n\t}\n\tget features() {\n\t\treturn {};\n\t}\n\tget release() {\n\t\treturn {};\n\t}\n\tget connected() {\n\t\treturn false;\n\t}\n\tget config() {\n\t\treturn {};\n\t}\n\tget moduleLoadList() {\n\t\treturn [];\n\t}\n\tconstrainedMemory() {\n\t\treturn 0;\n\t}\n\tavailableMemory() {\n\t\treturn 0;\n\t}\n\tuptime() {\n\t\treturn 0;\n\t}\n\tresourceUsage() {\n\t\treturn {};\n\t}\n\tref() {}\n\tunref() {}\n\tumask() {\n\t\tthrow createNotImplementedError(\"process.umask\");\n\t}\n\tgetBuiltinModule() {\n\t\treturn undefined;\n\t}\n\tgetActiveResourcesInfo() {\n\t\tthrow createNotImplementedError(\"process.getActiveResourcesInfo\");\n\t}\n\texit() {\n\t\tthrow createNotImplementedError(\"process.exit\");\n\t}\n\treallyExit() {\n\t\tthrow createNotImplementedError(\"process.reallyExit\");\n\t}\n\tkill() {\n\t\tthrow createNotImplementedError(\"process.kill\");\n\t}\n\tabort() {\n\t\tthrow createNotImplementedError(\"process.abort\");\n\t}\n\tdlopen() {\n\t\tthrow createNotImplementedError(\"process.dlopen\");\n\t}\n\tsetSourceMapsEnabled() {\n\t\tthrow createNotImplementedError(\"process.setSourceMapsEnabled\");\n\t}\n\tloadEnvFile() {\n\t\tthrow createNotImplementedError(\"process.loadEnvFile\");\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"process.disconnect\");\n\t}\n\tcpuUsage() {\n\t\tthrow createNotImplementedError(\"process.cpuUsage\");\n\t}\n\tsetUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.setUncaughtExceptionCaptureCallback\");\n\t}\n\thasUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.hasUncaughtExceptionCaptureCallback\");\n\t}\n\tinitgroups() {\n\t\tthrow createNotImplementedError(\"process.initgroups\");\n\t}\n\topenStdin() {\n\t\tthrow createNotImplementedError(\"process.openStdin\");\n\t}\n\tassert() {\n\t\tthrow createNotImplementedError(\"process.assert\");\n\t}\n\tbinding() {\n\t\tthrow createNotImplementedError(\"process.binding\");\n\t}\n\tpermission = { has: /*@__PURE__*/ notImplemented(\"process.permission.has\") };\n\treport = {\n\t\tdirectory: \"\",\n\t\tfilename: \"\",\n\t\tsignal: \"SIGUSR2\",\n\t\tcompact: false,\n\t\treportOnFatalError: false,\n\t\treportOnSignal: false,\n\t\treportOnUncaughtException: false,\n\t\tgetReport: /*@__PURE__*/ notImplemented(\"process.report.getReport\"),\n\t\twriteReport: /*@__PURE__*/ notImplemented(\"process.report.writeReport\")\n\t};\n\tfinalization = {\n\t\tregister: /*@__PURE__*/ notImplemented(\"process.finalization.register\"),\n\t\tunregister: /*@__PURE__*/ notImplemented(\"process.finalization.unregister\"),\n\t\tregisterBeforeExit: /*@__PURE__*/ notImplemented(\"process.finalization.registerBeforeExit\")\n\t};\n\tmemoryUsage = Object.assign(() => ({\n\t\tarrayBuffers: 0,\n\t\trss: 0,\n\t\texternal: 0,\n\t\theapTotal: 0,\n\t\theapUsed: 0\n\t}), { rss: () => 0 });\n\tmainModule = undefined;\n\tdomain = undefined;\n\tsend = undefined;\n\texitCode = undefined;\n\tchannel = undefined;\n\tgetegid = undefined;\n\tgeteuid = undefined;\n\tgetgid = undefined;\n\tgetgroups = undefined;\n\tgetuid = undefined;\n\tsetegid = undefined;\n\tseteuid = undefined;\n\tsetgid = undefined;\n\tsetgroups = undefined;\n\tsetuid = undefined;\n\t_events = undefined;\n\t_eventsCount = undefined;\n\t_exiting = undefined;\n\t_maxListeners = undefined;\n\t_debugEnd = undefined;\n\t_debugProcess = undefined;\n\t_fatalException = undefined;\n\t_getActiveHandles = undefined;\n\t_getActiveRequests = undefined;\n\t_kill = undefined;\n\t_preload_modules = undefined;\n\t_rawDebug = undefined;\n\t_startProfilerIdleNotifier = undefined;\n\t_stopProfilerIdleNotifier = undefined;\n\t_tickCallback = undefined;\n\t_disconnect = undefined;\n\t_handleQueue = undefined;\n\t_pendingMessage = undefined;\n\t_channel = undefined;\n\t_send = undefined;\n\t_linkedBinding = undefined;\n}\n", "import { Socket } from \"node:net\";\nexport class ReadStream extends Socket {\n\tfd;\n\tconstructor(fd) {\n\t\tsuper();\n\t\tthis.fd = fd;\n\t}\n\tisRaw = false;\n\tsetRawMode(mode) {\n\t\tthis.isRaw = mode;\n\t\treturn this;\n\t}\n\tisTTY = false;\n}\n", "import { Socket } from \"node:net\";\nexport class WriteStream extends Socket {\n\tfd;\n\tconstructor(fd) {\n\t\tsuper();\n\t\tthis.fd = fd;\n\t}\n\tclearLine(dir, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tclearScreenDown(callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tcursorTo(x, y, callback) {\n\t\tcallback && typeof callback === \"function\" && callback();\n\t\treturn false;\n\t}\n\tmoveCursor(dx, dy, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tgetColorDepth(env) {\n\t\treturn 1;\n\t}\n\thasColors(count, env) {\n\t\treturn false;\n\t}\n\tgetWindowSize() {\n\t\treturn [this.columns, this.rows];\n\t}\n\tcolumns = 80;\n\trows = 24;\n\tisTTY = false;\n}\n", "import { hrtime as UnenvHrTime } from \"unenv/node/internal/process/hrtime\";\nimport { Process as UnenvProcess } from \"unenv/node/internal/process/process\";\nconst globalProcess = globalThis[\"process\"];\nexport const getBuiltinModule = globalProcess.getBuiltinModule;\nexport const { exit, platform, nextTick } = getBuiltinModule(\n \"node:process\"\n);\nconst unenvProcess = new UnenvProcess({\n env: globalProcess.env,\n hrtime: UnenvHrTime,\n nextTick\n});\nexport const {\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n hasUncaughtExceptionCaptureCallback,\n setUncaughtExceptionCaptureCallback,\n loadEnvFile,\n sourceMapsEnabled,\n arch,\n argv,\n argv0,\n chdir,\n config,\n connected,\n constrainedMemory,\n availableMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n disconnect,\n emit,\n emitWarning,\n env,\n eventNames,\n execArgv,\n execPath,\n finalization,\n features,\n getActiveResourcesInfo,\n getMaxListeners,\n hrtime,\n kill,\n listeners,\n listenerCount,\n memoryUsage,\n on,\n off,\n once,\n pid,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n setMaxListeners,\n setSourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n title,\n throwDeprecation,\n traceDeprecation,\n umask,\n uptime,\n version,\n versions,\n domain,\n initgroups,\n moduleLoadList,\n reallyExit,\n openStdin,\n assert,\n binding,\n send,\n exitCode,\n channel,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getuid,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setuid,\n permission,\n mainModule,\n _events,\n _eventsCount,\n _exiting,\n _maxListeners,\n _debugEnd,\n _debugProcess,\n _fatalException,\n _getActiveHandles,\n _getActiveRequests,\n _kill,\n _preload_modules,\n _rawDebug,\n _startProfilerIdleNotifier,\n _stopProfilerIdleNotifier,\n _tickCallback,\n _disconnect,\n _handleQueue,\n _pendingMessage,\n _channel,\n _send,\n _linkedBinding\n} = unenvProcess;\nconst _process = {\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n hasUncaughtExceptionCaptureCallback,\n setUncaughtExceptionCaptureCallback,\n loadEnvFile,\n sourceMapsEnabled,\n arch,\n argv,\n argv0,\n chdir,\n config,\n connected,\n constrainedMemory,\n availableMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n disconnect,\n emit,\n emitWarning,\n env,\n eventNames,\n execArgv,\n execPath,\n exit,\n finalization,\n features,\n getBuiltinModule,\n getActiveResourcesInfo,\n getMaxListeners,\n hrtime,\n kill,\n listeners,\n listenerCount,\n memoryUsage,\n nextTick,\n on,\n off,\n once,\n pid,\n platform,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n setMaxListeners,\n setSourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n title,\n throwDeprecation,\n traceDeprecation,\n umask,\n uptime,\n version,\n versions,\n // @ts-expect-error old API\n domain,\n initgroups,\n moduleLoadList,\n reallyExit,\n openStdin,\n assert,\n binding,\n send,\n exitCode,\n channel,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getuid,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setuid,\n permission,\n mainModule,\n _events,\n _eventsCount,\n _exiting,\n _maxListeners,\n _debugEnd,\n _debugProcess,\n _fatalException,\n _getActiveHandles,\n _getActiveRequests,\n _kill,\n _preload_modules,\n _rawDebug,\n _startProfilerIdleNotifier,\n _stopProfilerIdleNotifier,\n _tickCallback,\n _disconnect,\n _handleQueue,\n _pendingMessage,\n _channel,\n _send,\n _linkedBinding\n};\nexport default _process;\n", "import { default as defaultExport } from \"@cloudflare/unenv-preset/node/process\";\nglobalThis.process = defaultExport;", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const hashIndex = url.indexOf(\"#\", i);\n const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n const path = url.slice(start, end);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63 || charCode === 35) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \"&quot;\";\n break;\n case 39:\n escape = \"&#39;\";\n break;\n case 38:\n escape = \"&amp;\";\n break;\n case 60:\n escape = \"&lt;\";\n break;\n case 62:\n escape = \"&gt;\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/middleware/cors/index.ts\nvar cors = (options) => {\n const defaults = {\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"],\n allowHeaders: [],\n exposeHeaders: []\n };\n const opts = {\n ...defaults,\n ...options\n };\n const findAllowOrigin = ((optsOrigin) => {\n if (typeof optsOrigin === \"string\") {\n if (optsOrigin === \"*\") {\n return () => optsOrigin;\n } else {\n return (origin) => optsOrigin === origin ? origin : null;\n }\n } else if (typeof optsOrigin === \"function\") {\n return optsOrigin;\n } else {\n return (origin) => optsOrigin.includes(origin) ? origin : null;\n }\n })(opts.origin);\n const findAllowMethods = ((optsAllowMethods) => {\n if (typeof optsAllowMethods === \"function\") {\n return optsAllowMethods;\n } else if (Array.isArray(optsAllowMethods)) {\n return () => optsAllowMethods;\n } else {\n return () => [];\n }\n })(opts.allowMethods);\n return async function cors2(c, next) {\n function set(key, value) {\n c.res.headers.set(key, value);\n }\n const allowOrigin = await findAllowOrigin(c.req.header(\"origin\") || \"\", c);\n if (allowOrigin) {\n set(\"Access-Control-Allow-Origin\", allowOrigin);\n }\n if (opts.credentials) {\n set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n if (opts.exposeHeaders?.length) {\n set(\"Access-Control-Expose-Headers\", opts.exposeHeaders.join(\",\"));\n }\n if (c.req.method === \"OPTIONS\") {\n if (opts.origin !== \"*\") {\n set(\"Vary\", \"Origin\");\n }\n if (opts.maxAge != null) {\n set(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n const allowMethods = await findAllowMethods(c.req.header(\"origin\") || \"\", c);\n if (allowMethods.length) {\n set(\"Access-Control-Allow-Methods\", allowMethods.join(\",\"));\n }\n let headers = opts.allowHeaders;\n if (!headers?.length) {\n const requestHeaders = c.req.header(\"Access-Control-Request-Headers\");\n if (requestHeaders) {\n headers = requestHeaders.split(/\\s*,\\s*/);\n }\n }\n if (headers?.length) {\n set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n c.res.headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n }\n c.res.headers.delete(\"Content-Length\");\n c.res.headers.delete(\"Content-Type\");\n return new Response(null, {\n headers: c.res.headers,\n status: 204,\n statusText: \"No Content\"\n });\n }\n await next();\n if (opts.origin !== \"*\") {\n c.header(\"Vary\", \"Origin\", { append: true });\n }\n };\n};\nexport {\n cors\n};\n", "export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n", "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n", "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n", "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n", "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n", "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n", "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n", "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n", "// Authentication service\n// Handles password hashing, JWT generation, and token management\n\nimport { z } from 'zod';\nimport type { User, AuthTokens, LoginRequest, RegisterRequest } from '@edgebasejs/types';\n\n// Validation schemas\nexport const LoginSchema = z.object({\n email: z.string().email('Invalid email'),\n password: z.string().min(8, 'Password must be at least 8 characters'),\n});\n\nexport const RegisterSchema = z.object({\n email: z.string().email('Invalid email'),\n password: z.string().min(8, 'Password must be at least 8 characters'),\n});\n\n/**\n * Password hashing utilities\n * For D1/Cloudflare, we use PBKDF2 (built-in Web Crypto API)\n */\nexport async function hashPassword(password: string): Promise<string> {\n // Using PBKDF2 with Web Crypto API available in Cloudflare Workers\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n const salt = crypto.getRandomValues(new Uint8Array(16));\n\n const key = await crypto.subtle.importKey('raw', data, { name: 'PBKDF2' }, false, ['deriveBits']);\n\n const bits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256',\n },\n key,\n 256\n );\n\n // Combine salt + hash and encode as hex\n const hashArray = new Uint8Array(bits);\n const saltHex = Array.from(salt)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n const hashHex = Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n return `pbkdf2:${saltHex}:${hashHex}`;\n}\n\n/**\n * Verify password against hash\n */\nexport async function verifyPassword(password: string, hash: string): Promise<boolean> {\n if (!hash.startsWith('pbkdf2:')) {\n return false;\n }\n\n const parts = hash.split(':');\n if (parts.length !== 3) {\n return false;\n }\n\n const [, saltHex, storedHashHex] = parts;\n\n try {\n const encoder = new TextEncoder();\n const data = encoder.encode(password);\n\n // Convert hex salt back to bytes\n const salt = new Uint8Array(saltHex.match(/.{1,2}/g)!.map((byte) => parseInt(byte, 16)));\n\n const key = await crypto.subtle.importKey('raw', data, { name: 'PBKDF2' }, false, [\n 'deriveBits',\n ]);\n\n const bits = await crypto.subtle.deriveBits(\n {\n name: 'PBKDF2',\n salt: salt,\n iterations: 100000,\n hash: 'SHA-256',\n },\n key,\n 256\n );\n\n const hashArray = new Uint8Array(bits);\n const computedHashHex = Array.from(hashArray)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n\n return computedHashHex === storedHashHex;\n } catch (error) {\n console.error('Password verification error:', error);\n return false;\n }\n}\n\n/**\n * JWT token generation and verification\n */\nexport interface JWTPayload {\n userId: string;\n email: string;\n iat: number;\n exp: number;\n type: 'access' | 'refresh';\n nonce?: string;\n}\n\n/**\n * Create JWT token (simple implementation without external library)\n * Note: In production, consider using a library like `jose` or `jsonwebtoken`\n */\nexport function createJWT(\n payload: Omit<JWTPayload, 'iat' | 'exp'>,\n secret: string,\n expiresIn: number\n): string {\n const header = {\n alg: 'HS256',\n typ: 'JWT',\n };\n\n const now = Math.floor(Date.now() / 1000);\n // Add nonce to ensure uniqueness even if tokens are created within the same second\n const nonce = Math.random().toString(36).substr(2, 12);\n const jwtPayload = {\n ...payload,\n iat: now,\n exp: now + expiresIn,\n nonce,\n };\n\n const headerEncoded = btoa(JSON.stringify(header));\n const payloadEncoded = btoa(JSON.stringify(jwtPayload));\n\n // For now, return a placeholder token with payload info\n // Full HMAC implementation would require crypto-js or jose library\n return `${headerEncoded}.${payloadEncoded}.signature-placeholder`;\n}\n\n/**\n * Parse JWT token (simple implementation)\n */\nexport function parseJWT(token: string): JWTPayload | null {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n\n const payload = JSON.parse(atob(parts[1]));\n const now = Math.floor(Date.now() / 1000);\n\n if (payload.exp && payload.exp < now) {\n return null;\n }\n\n return payload as JWTPayload;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Authentication service\n */\nexport class AuthService {\n /**\n * Register a new user\n */\n static async registerUser(\n request: RegisterRequest,\n onCreateUser: (user: User) => Promise<void>\n ): Promise<User> {\n // Validate input\n const validated = RegisterSchema.parse(request);\n\n // Hash password\n const passwordHash = await hashPassword(validated.password);\n\n // Create user\n const userId = `user_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n\n const user: User = {\n id: userId,\n email: validated.email,\n createdAt: now,\n updatedAt: now,\n };\n\n await onCreateUser(user);\n\n return user;\n }\n\n /**\n * Login user\n */\n static async loginUser(\n request: LoginRequest,\n onGetUser: (email: string) => Promise<User & { passwordHash: string }>,\n secret: string\n ): Promise<AuthTokens> {\n // Validate input\n const validated = LoginSchema.parse(request);\n\n // Get user\n const user = await onGetUser(validated.email);\n\n // Verify password\n const passwordValid = await verifyPassword(validated.password, user.passwordHash);\n if (!passwordValid) {\n throw new Error('Invalid credentials');\n }\n\n // Generate tokens\n const accessToken = createJWT(\n { userId: user.id, email: user.email, type: 'access' },\n secret,\n 3600 // 1 hour\n );\n\n const refreshToken = createJWT(\n { userId: user.id, email: user.email, type: 'refresh' },\n secret,\n 604800 // 7 days\n );\n\n return {\n accessToken,\n refreshToken,\n expiresIn: 3600,\n };\n }\n\n /**\n * Refresh access token\n */\n static refreshToken(refreshToken: string, secret: string): string {\n const payload = parseJWT(refreshToken);\n if (!payload || payload.type !== 'refresh') {\n throw new Error('Invalid refresh token');\n }\n\n return createJWT(\n { userId: payload.userId, email: payload.email, type: 'access' },\n secret,\n 3600\n );\n }\n}\n\nexport default AuthService;\n", "// Access rules evaluation engine\n\nimport type { User, AccessRules } from '@edgebasejs/types';\n\nexport interface AccessContext {\n user: User;\n operation: 'create' | 'read' | 'update' | 'delete';\n data: Record<string, any>;\n existingData?: Record<string, any>;\n}\n\nexport interface AccessDecision {\n allowed: boolean;\n reason?: string;\n}\n\n/**\n * Access rules engine\n */\nexport class AccessRulesEngine {\n /**\n * Evaluate access rules for an operation\n */\n static async evaluate(context: AccessContext, rules?: AccessRules): Promise<AccessDecision> {\n if (!rules) {\n // No rules = allow all access\n return { allowed: true };\n }\n\n try {\n switch (context.operation) {\n case 'create':\n if (!rules.create) {\n return { allowed: true }; // No rule = allow\n }\n const createAllowed = await Promise.resolve(rules.create(context.user, context.data));\n return {\n allowed: createAllowed,\n reason: createAllowed ? undefined : 'Create denied by access rules',\n };\n\n case 'read':\n if (!rules.read) {\n return { allowed: true };\n }\n const readAllowed = await Promise.resolve(rules.read(context.user, context.data));\n return {\n allowed: readAllowed,\n reason: readAllowed ? undefined : 'Read denied by access rules',\n };\n\n case 'update':\n if (!rules.update) {\n return { allowed: true };\n }\n const updateAllowed = await Promise.resolve(\n rules.update(context.user, context.existingData || {}, context.data)\n );\n return {\n allowed: updateAllowed,\n reason: updateAllowed ? undefined : 'Update denied by access rules',\n };\n\n case 'delete':\n if (!rules.delete) {\n return { allowed: true };\n }\n const deleteData = context.existingData || context.data;\n const deleteAllowed = await Promise.resolve(rules.delete(context.user, deleteData));\n return {\n allowed: deleteAllowed,\n reason: deleteAllowed ? undefined : 'Delete denied by access rules',\n };\n\n default:\n return { allowed: false, reason: 'Unknown operation' };\n }\n } catch (error) {\n console.error('Access rule evaluation error:', error);\n return { allowed: false, reason: 'Access rule evaluation failed' };\n }\n }\n\n /**\n * Batch evaluate access for multiple records\n */\n static async evaluateBatch(\n contexts: AccessContext[],\n rules?: AccessRules\n ): Promise<Map<string, AccessDecision>> {\n const results = new Map<string, AccessDecision>();\n\n for (const context of contexts) {\n const recordKey = `${context.operation}:${context.data.id || 'unknown'}`;\n const decision = await this.evaluate(context, rules);\n results.set(recordKey, decision);\n }\n\n return results;\n }\n}\n\nexport default AccessRulesEngine;\n", "// Server-side synchronization engine\n\nimport type { SyncRequest, SyncResponse, User } from '@edgebasejs/types';\nimport { AccessRulesEngine, type AccessContext } from '../access-rules/engine';\nimport { ColumnSecurityManager } from '../access-rules/column-security';\nimport { EncryptionManager } from '../encryption/encryption-manager';\n\nexport interface SyncDatabase {\n getOne(sql: string, params: any[]): Promise<any>;\n getAll(sql: string, params: any[]): Promise<any[]>;\n run(sql: string, params: any[]): Promise<any>;\n batch(statements: Array<{ sql: string; params?: any[] }>): Promise<any[]>;\n}\n\nexport interface EntitySchema {\n accessRules?: any;\n}\n\nexport interface ServerSyncOptions {\n schemas: Map<string, EntitySchema>;\n db: SyncDatabase;\n user: User;\n columnSecurity?: ColumnSecurityManager;\n encryption?: EncryptionManager;\n onChangeApplied?: (info: {\n entity: string;\n id: string;\n operation: 'create' | 'update' | 'delete';\n before?: Record<string, any>;\n after?: Record<string, any>;\n }) => Promise<void> | void;\n}\n\n/**\n * Server-side sync engine\n */\nexport class ServerSyncEngine {\n private schemas: Map<string, EntitySchema>;\n private db: SyncDatabase;\n private user: User;\n private serverTimestamp: number;\n private columnSecurity?: ColumnSecurityManager;\n private encryption?: EncryptionManager;\n private onChangeApplied?: ServerSyncOptions['onChangeApplied'];\n\n constructor(options: ServerSyncOptions) {\n this.schemas = options.schemas;\n this.db = options.db;\n this.user = options.user;\n this.serverTimestamp = Date.now();\n this.columnSecurity = options.columnSecurity;\n this.encryption = options.encryption;\n this.onChangeApplied = options.onChangeApplied;\n }\n\n /**\n * Process sync request from client\n */\n async sync(request: SyncRequest): Promise<SyncResponse> {\n const response: SyncResponse = {\n serverTimestamp: this.serverTimestamp,\n changes: [],\n conflicts: [],\n errors: [],\n };\n\n const appliedChangeKeys = new Set<string>();\n\n // Process client changes\n if (request.changes && request.changes.length > 0) {\n await this.processClientChanges(request.changes, response);\n for (const change of response.changes) {\n if (change.entity && change.id) {\n appliedChangeKeys.add(`${change.entity}:${change.id}`);\n }\n }\n }\n\n // Get server changes since last sync\n await this.getServerChanges(request.lastSyncTimestamp, response, appliedChangeKeys);\n\n return response;\n }\n\n /**\n * Process changes from client\n */\n private async processClientChanges(\n changes: SyncRequest['changes'],\n response: SyncResponse\n ): Promise<void> {\n for (const change of changes) {\n try {\n if (!change.entity) {\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: 'Missing entity',\n code: 'VALIDATION_ERROR',\n });\n continue;\n }\n\n if (!change.id) {\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: 'Missing record id',\n code: 'VALIDATION_ERROR',\n });\n continue;\n }\n\n if (\n (change.operation === 'create' || change.operation === 'update') &&\n (!change.data || typeof change.data !== 'object')\n ) {\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: 'Missing data',\n code: 'VALIDATION_ERROR',\n });\n continue;\n }\n\n // Get schema for entity\n const schema = this.schemas.get(change.entity);\n if (!schema) {\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: 'Unknown entity',\n code: 'NOT_FOUND',\n });\n continue;\n }\n\n // Check access rules\n const accessContext: AccessContext = {\n user: this.user,\n operation: change.operation,\n data: change.data ?? {},\n };\n\n // Get existing data for update/delete operations\n if (change.operation === 'update' || change.operation === 'delete') {\n const existing = await this.db.getOne(`SELECT * FROM ${change.entity} WHERE id = ?`, [\n change.id,\n ]);\n if (existing) {\n accessContext.existingData = existing;\n }\n }\n\n // Evaluate access rules\n const accessDecision = await AccessRulesEngine.evaluate(accessContext, schema.accessRules);\n\n if (!accessDecision.allowed) {\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: accessDecision.reason || 'Access denied',\n code: 'ACCESS_DENIED',\n });\n continue;\n }\n\n // Filter writable columns for create/update operations\n if (change.data && (change.operation === 'create' || change.operation === 'update')) {\n const { filtered, rejected } = await this.filterWritableData(\n change.entity,\n change.data,\n accessContext.existingData\n );\n\n if (rejected.length > 0) {\n // Log rejected columns (optional: could add to response warnings)\n console.warn(`Rejected columns for ${change.entity}:${change.id}:`, rejected);\n }\n\n // Use filtered data\n change.data = filtered;\n }\n\n // Get current version\n const metadata = await this.db.getOne(\n 'SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?',\n [change.entity, change.id]\n );\n\n const currentVersion = metadata?.version || 0;\n\n // Check for conflicts (version mismatch)\n if (metadata && change.version !== currentVersion) {\n // Get current data\n const currentData = await this.db.getOne(`SELECT * FROM ${change.entity} WHERE id = ?`, [\n change.id,\n ]);\n\n response.conflicts.push({\n entity: change.entity,\n id: change.id,\n clientVersion: change.version,\n serverVersion: currentVersion,\n serverData: currentData || {},\n });\n continue;\n }\n\n const beforeData =\n change.operation === 'update' || change.operation === 'delete'\n ? (accessContext.existingData as Record<string, any> | undefined)\n : undefined;\n\n // Apply change to database\n await this.applyChange(change, currentVersion + 1);\n\n if (this.onChangeApplied) {\n let afterData: Record<string, any> | undefined;\n if (change.operation !== 'delete') {\n afterData = await this.db.getOne(`SELECT * FROM ${change.entity} WHERE id = ?`, [\n change.id,\n ]);\n }\n await this.onChangeApplied({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n before: beforeData,\n after: afterData,\n });\n }\n\n // Filter columns before sending back to client\n const filteredData = change.data ? await this.filterColumns(change.entity, change.data) : {};\n\n // Add to response changes\n response.changes.push({\n ...change,\n data: filteredData,\n serverTimestamp: this.serverTimestamp,\n version: currentVersion + 1,\n });\n } catch (error) {\n console.error('Error processing change:', error);\n response.errors.push({\n entity: change.entity,\n id: change.id,\n operation: change.operation,\n error: error instanceof Error ? error.message : 'Processing failed',\n code: 'VALIDATION_ERROR',\n });\n }\n }\n }\n\n /**\n * Apply a change to the database\n */\n private async applyChange(change: SyncRequest['changes'][0], version: number): Promise<void> {\n const now = Date.now();\n const sanitizedData = { ...(change.data || {}) } as Record<string, any>;\n if ('_version' in sanitizedData) {\n delete sanitizedData._version;\n }\n\n switch (change.operation) {\n case 'create': {\n // Insert record\n const columns = ['id', ...Object.keys(sanitizedData)];\n const values = [change.id, ...Object.values(sanitizedData)];\n const placeholders = columns.map(() => '?').join(', ');\n\n await this.db.run(\n `INSERT INTO ${change.entity} (${columns.join(', ')}) VALUES (${placeholders})`,\n values\n );\n\n // Insert metadata\n await this.db.run(\n 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',\n [change.entity, change.id, version, now]\n );\n break;\n }\n\n case 'update': {\n // Update record\n const updates = Object.entries(sanitizedData)\n .map(([key]) => `${key} = ?`)\n .join(', ');\n const values = [...Object.values(sanitizedData), change.id];\n\n if (updates.length > 0) {\n await this.db.run(`UPDATE ${change.entity} SET ${updates} WHERE id = ?`, values);\n }\n\n // Update metadata\n await this.db.run(\n 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',\n [change.entity, change.id, version, now]\n );\n break;\n }\n\n case 'delete': {\n // Delete record\n await this.db.run(`DELETE FROM ${change.entity} WHERE id = ?`, [change.id]);\n\n // Mark as deleted in metadata\n await this.db.run(\n 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?)',\n [change.entity, change.id, version, now, now]\n );\n break;\n }\n }\n }\n\n /**\n * Get server changes since last sync\n */\n private async getServerChanges(\n lastSyncTimestamp: number | null,\n response: SyncResponse,\n appliedChangeKeys: Set<string>\n ): Promise<void> {\n if (!lastSyncTimestamp) {\n // First sync - get all data\n for (const entity of this.schemas.keys()) {\n try {\n const records = await this.db.getAll(\n `SELECT m.version, r.* FROM ${entity} r\n LEFT JOIN sync_metadata m ON m.entity = ? AND m.record_id = r.id`,\n [entity]\n );\n\n for (const record of records) {\n if (appliedChangeKeys.has(`${entity}:${record.id}`)) {\n continue;\n }\n const entitySchema = this.schemas.get(entity);\n if (entitySchema?.accessRules?.read) {\n const accessDecision = await AccessRulesEngine.evaluate(\n { user: this.user, operation: 'read', data: record },\n entitySchema.accessRules\n );\n if (!accessDecision.allowed) {\n continue;\n }\n }\n\n // Filter columns based on column-level security\n const filteredData = await this.filterColumns(entity, record);\n\n response.changes.push({\n entity,\n operation: 'create',\n id: record.id,\n data: filteredData,\n serverTimestamp: this.serverTimestamp,\n version: record.version || 1,\n });\n }\n } catch (error) {\n console.error(`Error fetching records from ${entity}:`, error);\n }\n }\n } else {\n // Get changes since last sync\n for (const entity of this.schemas.keys()) {\n try {\n const records = await this.db.getAll(\n `SELECT m.version, m.deleted_at, m.record_id, r.* FROM sync_metadata m\n LEFT JOIN ${entity} r ON r.id = m.record_id\n WHERE m.entity = ? AND m.updated_at > ?`,\n [entity, lastSyncTimestamp]\n );\n\n for (const record of records) {\n const recordId = record.record_id || record.id;\n if (appliedChangeKeys.has(`${entity}:${recordId}`)) {\n continue;\n }\n const operation = record.deleted_at ? 'delete' : 'update';\n const entitySchema = this.schemas.get(entity);\n if (!record.deleted_at && entitySchema?.accessRules?.read) {\n const accessDecision = await AccessRulesEngine.evaluate(\n { user: this.user, operation: 'read', data: record },\n entitySchema.accessRules\n );\n if (!accessDecision.allowed) {\n continue;\n }\n }\n\n // Filter columns based on column-level security\n const filteredData = record.deleted_at ? {} : await this.filterColumns(entity, record);\n\n response.changes.push({\n entity,\n operation: operation as any,\n id: record.record_id || record.id,\n data: filteredData,\n serverTimestamp: this.serverTimestamp,\n version: record.version || 1,\n });\n }\n } catch (error) {\n console.error(`Error fetching changes from ${entity}:`, error);\n }\n }\n }\n }\n\n /**\n * Filter record columns based on column-level security\n */\n private async filterColumns(entity: string, data: Record<string, any>): Promise<Record<string, any>> {\n if (!this.columnSecurity) {\n return data; // No column security = return all data\n }\n\n return await this.columnSecurity.filterReadableColumns(entity, data, this.user);\n }\n\n /**\n * Filter writable columns for client changes\n */\n private async filterWritableData(\n entity: string,\n data: Record<string, any>,\n existingRecord?: Record<string, any>\n ): Promise<{ filtered: Record<string, any>; rejected: string[] }> {\n if (!this.columnSecurity) {\n return { filtered: data, rejected: [] }; // No column security = allow all\n }\n\n return await this.columnSecurity.filterWritableColumns(entity, data, this.user, existingRecord);\n }\n\n /**\n * Encrypt sensitive fields before storing\n */\n private async encryptData(entity: string, data: Record<string, any>): Promise<Record<string, any>> {\n if (!this.encryption) {\n return data; // No encryption = return as is\n }\n\n return await this.encryption.encryptRecord(entity, data);\n }\n\n /**\n * Decrypt sensitive fields after retrieving\n */\n private async decryptData(entity: string, data: Record<string, any>): Promise<Record<string, any>> {\n if (!this.encryption) {\n return data; // No encryption = return as is\n }\n\n return await this.encryption.decryptRecord(entity, data);\n }\n}\n\nexport default ServerSyncEngine;\n", "/**\n * Column-level security for field access control\n * Supports role-based visibility and selective field encryption\n */\n\nimport type { User } from '@edgebasejs/types';\n\nexport interface ColumnRule {\n column: string;\n visible?: boolean | ((context: ColumnAccessContext) => boolean | Promise<boolean>);\n readable?: boolean | ((context: ColumnAccessContext) => boolean | Promise<boolean>);\n writable?: boolean | ((context: ColumnAccessContext) => boolean | Promise<boolean>);\n roles?: string[]; // Required roles to access this column\n encrypted?: boolean; // Whether this column should be encrypted at rest\n maskValue?: any; // Value to return when column is not accessible\n}\n\nexport interface ColumnAccessContext {\n user: User;\n operation: 'read' | 'write' | 'create' | 'update';\n record?: Record<string, any>; // The full record being accessed\n column: string;\n value?: any; // The column value being accessed/written\n}\n\nexport interface ColumnSecurityRules {\n entity: string;\n columns: Map<string, ColumnRule>;\n defaultVisible?: boolean; // Default visibility for columns not explicitly defined\n defaultReadable?: boolean;\n defaultWritable?: boolean;\n}\n\n/**\n * Column-level security manager\n */\nexport class ColumnSecurityManager {\n private rules: Map<string, ColumnSecurityRules> = new Map();\n\n /**\n * Register column security rules for an entity\n */\n registerRules(entityName: string, rules: ColumnSecurityRules): void {\n this.rules.set(entityName, rules);\n }\n\n /**\n * Get rules for an entity\n */\n getRules(entityName: string): ColumnSecurityRules | undefined {\n return this.rules.get(entityName);\n }\n\n /**\n * Check if a user can read a specific column\n */\n async canReadColumn(\n entityName: string,\n columnName: string,\n user: User,\n record?: Record<string, any>\n ): Promise<boolean> {\n const rules = this.rules.get(entityName);\n if (!rules) {\n return true; // No rules = allow all\n }\n\n const columnRule = rules.columns.get(columnName);\n if (!columnRule) {\n return rules.defaultReadable ?? true; // Use default or allow\n }\n\n // Check role requirements\n if (columnRule.roles && columnRule.roles.length > 0) {\n const userRoles = (user as any).roles || [];\n const hasRole = columnRule.roles.some((role) => userRoles.includes(role));\n if (!hasRole) {\n return false;\n }\n }\n\n // Check readable predicate\n if (columnRule.readable !== undefined) {\n if (typeof columnRule.readable === 'function') {\n const context: ColumnAccessContext = {\n user,\n operation: 'read',\n record,\n column: columnName,\n value: record?.[columnName],\n };\n return await columnRule.readable(context);\n }\n return columnRule.readable;\n }\n\n // Check visible predicate\n if (columnRule.visible !== undefined) {\n if (typeof columnRule.visible === 'function') {\n const context: ColumnAccessContext = {\n user,\n operation: 'read',\n record,\n column: columnName,\n };\n return await columnRule.visible(context);\n }\n return columnRule.visible;\n }\n\n return true;\n }\n\n /**\n * Check if a user can write to a specific column\n */\n async canWriteColumn(\n entityName: string,\n columnName: string,\n user: User,\n value?: any,\n record?: Record<string, any>\n ): Promise<boolean> {\n const rules = this.rules.get(entityName);\n if (!rules) {\n return true; // No rules = allow all\n }\n\n const columnRule = rules.columns.get(columnName);\n if (!columnRule) {\n return rules.defaultWritable ?? true; // Use default or allow\n }\n\n // Check role requirements\n if (columnRule.roles && columnRule.roles.length > 0) {\n const userRoles = (user as any).roles || [];\n const hasRole = columnRule.roles.some((role) => userRoles.includes(role));\n if (!hasRole) {\n return false;\n }\n }\n\n // Check writable predicate\n if (columnRule.writable !== undefined) {\n if (typeof columnRule.writable === 'function') {\n const context: ColumnAccessContext = {\n user,\n operation: 'write',\n record,\n column: columnName,\n value,\n };\n return await columnRule.writable(context);\n }\n return columnRule.writable;\n }\n\n return true;\n }\n\n /**\n * Filter record columns based on read permissions\n * Returns a new record with only accessible columns\n */\n async filterReadableColumns(\n entityName: string,\n record: Record<string, any>,\n user: User\n ): Promise<Record<string, any>> {\n const rules = this.rules.get(entityName);\n if (!rules) {\n return record; // No rules = return all columns\n }\n\n const filtered: Record<string, any> = {};\n\n for (const [columnName, value] of Object.entries(record)) {\n const canRead = await this.canReadColumn(entityName, columnName, user, record);\n\n if (canRead) {\n filtered[columnName] = value;\n } else {\n // Apply mask value if defined\n const columnRule = rules.columns.get(columnName);\n if (columnRule?.maskValue !== undefined) {\n filtered[columnName] = columnRule.maskValue;\n }\n // Otherwise, omit the column entirely\n }\n }\n\n return filtered;\n }\n\n /**\n * Filter write data based on write permissions\n * Returns a new object with only writable columns\n */\n async filterWritableColumns(\n entityName: string,\n data: Record<string, any>,\n user: User,\n existingRecord?: Record<string, any>\n ): Promise<{ filtered: Record<string, any>; rejected: string[] }> {\n const rules = this.rules.get(entityName);\n if (!rules) {\n return { filtered: data, rejected: [] }; // No rules = allow all\n }\n\n const filtered: Record<string, any> = {};\n const rejected: string[] = [];\n\n for (const [columnName, value] of Object.entries(data)) {\n const canWrite = await this.canWriteColumn(entityName, columnName, user, value, existingRecord);\n\n if (canWrite) {\n filtered[columnName] = value;\n } else {\n rejected.push(columnName);\n }\n }\n\n return { filtered, rejected };\n }\n\n /**\n * Get list of encrypted columns for an entity\n */\n getEncryptedColumns(entityName: string): string[] {\n const rules = this.rules.get(entityName);\n if (!rules) {\n return [];\n }\n\n const encrypted: string[] = [];\n for (const [columnName, rule] of rules.columns.entries()) {\n if (rule.encrypted) {\n encrypted.push(columnName);\n }\n }\n\n return encrypted;\n }\n\n /**\n * Get all column rules for an entity\n */\n getAllColumnRules(entityName: string): Map<string, ColumnRule> | undefined {\n const rules = this.rules.get(entityName);\n return rules?.columns;\n }\n\n /**\n * Clear all rules\n */\n clear(): void {\n this.rules.clear();\n }\n}\n\n/**\n * Global column security manager instance\n */\nexport const columnSecurityManager = new ColumnSecurityManager();\n", "import type { SyncDatabase } from '../sync/sync-engine';\nimport type { SubscriptionState } from './message-types';\n\n/**\n * Manages active WebSocket subscriptions\n * Tracks which clients are subscribed to which entities and filters\n */\nexport class SubscriptionManager {\n private subscriptions = new Map<string, SubscriptionState>();\n private userSubscriptions = new Map<string, Set<string>>();\n private entitySubscriptions = new Map<string, Set<string>>();\n private connectionSubscriptions = new Map<string, Set<string>>();\n\n constructor(private db: SyncDatabase) {}\n\n /**\n * Create a new subscription\n */\n async subscribe(\n userId: string,\n connectionId: string,\n entity: string,\n filters?: Record<string, unknown>\n ): Promise<string> {\n const subscriptionId = `sub_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n\n const subscription: SubscriptionState = {\n subscriptionId,\n userId,\n entity,\n filters,\n createdAt: now,\n };\n\n // Store in memory\n this.subscriptions.set(subscriptionId, subscription);\n\n // Update indexes\n if (!this.userSubscriptions.has(userId)) {\n this.userSubscriptions.set(userId, new Set());\n }\n this.userSubscriptions.get(userId)!.add(subscriptionId);\n\n if (!this.entitySubscriptions.has(entity)) {\n this.entitySubscriptions.set(entity, new Set());\n }\n this.entitySubscriptions.get(entity)!.add(subscriptionId);\n\n if (!this.connectionSubscriptions.has(connectionId)) {\n this.connectionSubscriptions.set(connectionId, new Set());\n }\n this.connectionSubscriptions.get(connectionId)!.add(subscriptionId);\n\n // Persist to database\n await this.db.run(\n `INSERT INTO subscriptions (id, user_id, entity, connection_id, created_at, last_heartbeat)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [subscriptionId, userId, entity, connectionId, now, now]\n );\n\n // Store filters if provided\n if (filters) {\n for (const [key, value] of Object.entries(filters)) {\n const filterId = `filter_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n await this.db.run(\n `INSERT INTO subscription_filters (id, subscription_id, filter_key, filter_value, created_at)\n VALUES (?, ?, ?, ?, ?)`,\n [filterId, subscriptionId, key, JSON.stringify(value), now]\n );\n }\n }\n\n return subscriptionId;\n }\n\n /**\n * Remove a subscription\n */\n async unsubscribe(subscriptionId: string): Promise<void> {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) return;\n\n // Remove from memory\n this.subscriptions.delete(subscriptionId);\n\n // Update indexes\n this.userSubscriptions.get(subscription.userId)?.delete(subscriptionId);\n this.entitySubscriptions.get(subscription.entity)?.delete(subscriptionId);\n\n // Find and update connection subscriptions\n for (const [connId, subs] of this.connectionSubscriptions.entries()) {\n if (subs.has(subscriptionId)) {\n subs.delete(subscriptionId);\n if (subs.size === 0) {\n this.connectionSubscriptions.delete(connId);\n }\n }\n }\n\n // Remove from database\n await this.db.run('DELETE FROM subscriptions WHERE id = ?', [subscriptionId]);\n }\n\n /**\n * Remove all subscriptions for a connection\n */\n async disconnectClient(connectionId: string): Promise<void> {\n const subscriptionIds = this.connectionSubscriptions.get(connectionId);\n if (!subscriptionIds) return;\n\n for (const subId of subscriptionIds) {\n await this.unsubscribe(subId);\n }\n }\n\n /**\n * Get all subscriptions for an entity\n */\n getSubscriptionsForEntity(entity: string): SubscriptionState[] {\n const subscriptionIds = this.entitySubscriptions.get(entity);\n if (!subscriptionIds) return [];\n\n return Array.from(subscriptionIds)\n .map((id) => this.subscriptions.get(id))\n .filter((sub): sub is SubscriptionState => sub !== undefined);\n }\n\n /**\n * Get all subscriptions for a user\n */\n getSubscriptionsForUser(userId: string): SubscriptionState[] {\n const subscriptionIds = this.userSubscriptions.get(userId);\n if (!subscriptionIds) return [];\n\n return Array.from(subscriptionIds)\n .map((id) => this.subscriptions.get(id))\n .filter((sub): sub is SubscriptionState => sub !== undefined);\n }\n\n /**\n * Get all subscriptions for a connection\n */\n getSubscriptionsForConnection(connectionId: string): SubscriptionState[] {\n const subscriptionIds = this.connectionSubscriptions.get(connectionId);\n if (!subscriptionIds) return [];\n\n return Array.from(subscriptionIds)\n .map((id) => this.subscriptions.get(id))\n .filter((sub): sub is SubscriptionState => sub !== undefined);\n }\n\n /**\n * Update last heartbeat for a subscription\n */\n async updateHeartbeat(subscriptionId: string): Promise<void> {\n const subscription = this.subscriptions.get(subscriptionId);\n if (!subscription) return;\n\n const now = Date.now();\n subscription.createdAt = now; // Update in-memory\n\n await this.db.run('UPDATE subscriptions SET last_heartbeat = ? WHERE id = ?', [now, subscriptionId]);\n }\n\n /**\n * Get subscription by ID\n */\n getSubscription(subscriptionId: string): SubscriptionState | undefined {\n return this.subscriptions.get(subscriptionId);\n }\n\n /**\n * Check if a subscription matches a filter\n */\n matchesFilter(subscription: SubscriptionState, data: Record<string, unknown>): boolean {\n if (!subscription.filters) return true;\n\n for (const [key, filterValue] of Object.entries(subscription.filters)) {\n const dataValue = data[key];\n if (dataValue !== filterValue) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Load subscriptions from database on startup\n */\n async loadFromDatabase(): Promise<void> {\n try {\n const results = await this.db.getAll(\n `SELECT id, user_id, entity, connection_id, created_at\n FROM subscriptions\n WHERE last_heartbeat > ?`,\n [Date.now() - 3600000] // Only load subscriptions from last hour\n );\n\n for (const row of results) {\n const subscriptionId = row.id as string;\n const userId = row.user_id as string;\n const entity = row.entity as string;\n const connectionId = row.connection_id as string;\n const createdAt = row.created_at as number;\n\n // Load filters for this subscription\n const filterResults = await this.db.getAll(\n 'SELECT filter_key, filter_value FROM subscription_filters WHERE subscription_id = ?',\n [subscriptionId]\n );\n\n const filters: Record<string, unknown> = {};\n for (const filterRow of filterResults) {\n const key = filterRow.filter_key as string;\n const value = JSON.parse(filterRow.filter_value as string);\n filters[key] = value;\n }\n\n const subscription: SubscriptionState = {\n subscriptionId,\n userId,\n entity,\n filters: Object.keys(filters).length > 0 ? filters : undefined,\n createdAt,\n };\n\n this.subscriptions.set(subscriptionId, subscription);\n\n // Update indexes\n if (!this.userSubscriptions.has(userId)) {\n this.userSubscriptions.set(userId, new Set());\n }\n this.userSubscriptions.get(userId)!.add(subscriptionId);\n\n if (!this.entitySubscriptions.has(entity)) {\n this.entitySubscriptions.set(entity, new Set());\n }\n this.entitySubscriptions.get(entity)!.add(subscriptionId);\n\n if (!this.connectionSubscriptions.has(connectionId)) {\n this.connectionSubscriptions.set(connectionId, new Set());\n }\n this.connectionSubscriptions.get(connectionId)!.add(subscriptionId);\n }\n } catch (error) {\n console.error('Failed to load subscriptions from database:', error);\n }\n }\n\n /**\n * Cleanup expired subscriptions\n */\n async cleanup(): Promise<void> {\n const oneDayAgo = Date.now() - 86400000;\n\n // Delete old subscriptions from database\n await this.db.run(\n 'DELETE FROM subscriptions WHERE last_heartbeat < ?',\n [oneDayAgo]\n );\n\n // Remove disconnected subscriptions from memory\n const staleSubscriptions = Array.from(this.subscriptions.entries())\n .filter(([_, sub]) => sub.createdAt < oneDayAgo)\n .map(([id]) => id);\n\n for (const subId of staleSubscriptions) {\n this.subscriptions.delete(subId);\n }\n }\n\n /**\n * Get subscription statistics\n */\n getStats(): {\n totalSubscriptions: number;\n activeConnections: number;\n entitiesWithSubscriptions: number;\n } {\n return {\n totalSubscriptions: this.subscriptions.size,\n activeConnections: this.connectionSubscriptions.size,\n entitiesWithSubscriptions: this.entitySubscriptions.size,\n };\n }\n}\n", "import type { SubscriptionManager } from './subscription-manager';\nimport type { ChangeMessage } from './message-types';\nimport type { User } from '@edgebasejs/types';\n\nexport interface WebSocketClient {\n send(message: string): void;\n close(): void;\n isOpen(): boolean;\n}\n\n/**\n * Notifies subscribed clients about data changes\n * Manages broadcasting changes to WebSocket connections\n */\nexport class ChangeNotifier {\n private clients = new Map<string, WebSocketClient>();\n\n constructor(private subscriptionManager: SubscriptionManager) {}\n\n /**\n * Register a WebSocket client connection\n */\n registerClient(connectionId: string, client: WebSocketClient): void {\n this.clients.set(connectionId, client);\n }\n\n /**\n * Unregister a WebSocket client connection\n */\n unregisterClient(connectionId: string): void {\n this.clients.delete(connectionId);\n }\n\n /**\n * Broadcast a change to all subscribed clients\n */\n async notifyChange(\n entity: string,\n operation: 'create' | 'update' | 'delete',\n record: Record<string, unknown>,\n recordId: string,\n user: User,\n version?: number\n ): Promise<void> {\n const subscriptions = this.subscriptionManager.getSubscriptionsForEntity(entity);\n\n for (const subscription of subscriptions) {\n // Check if user has access (basic check - should be extended with full access rules)\n // For now, assume user can see their own data\n if (subscription.userId !== user.id) {\n // In production, would check RLS rules here\n continue;\n }\n\n // Check if subscription filters match the record\n if (!this.subscriptionManager.matchesFilter(subscription, record)) {\n continue;\n }\n\n // Send change message to client\n const message: ChangeMessage = {\n type: 'change',\n entity,\n operation,\n record: operation !== 'delete' ? record : undefined,\n recordId,\n timestamp: Date.now(),\n version,\n };\n\n this.sendToConnection(subscription.subscriptionId, message);\n }\n }\n\n /**\n * Send a message to a specific connection\n */\n private sendToConnection(subscriptionId: string, message: ChangeMessage): void {\n const subscription = this.subscriptionManager.getSubscription(subscriptionId);\n if (!subscription) return;\n\n // Find the connection for this subscription\n const subscriptions = this.subscriptionManager.getSubscriptionsForEntity(subscription.entity);\n const matchingSub = subscriptions.find((s) => s.subscriptionId === subscriptionId);\n\n if (!matchingSub) return;\n\n // This is a placeholder - in actual implementation, we'd need to track\n // which connection ID corresponds to which subscription\n // For now, we'll send to all connections and let them filter\n this.broadcastToAll(message, [subscriptionId]);\n }\n\n /**\n * Broadcast a message to all clients\n */\n broadcastToAll(message: ChangeMessage, filterSubscriptions?: string[]): void {\n const messageStr = JSON.stringify(message);\n\n for (const [connectionId, client] of this.clients.entries()) {\n if (!client.isOpen()) {\n this.unregisterClient(connectionId);\n continue;\n }\n\n // If filter subscriptions provided, only send to relevant clients\n if (filterSubscriptions) {\n const subscriptions = this.subscriptionManager.getSubscriptionsForConnection(connectionId);\n const hasMatchingSubscription = subscriptions.some((sub) =>\n filterSubscriptions.includes(sub.subscriptionId)\n );\n\n if (!hasMatchingSubscription) {\n continue;\n }\n }\n\n try {\n client.send(messageStr);\n } catch (error) {\n console.error(`Failed to send message to client ${connectionId}:`, error);\n this.unregisterClient(connectionId);\n }\n }\n }\n\n /**\n * Send heartbeat to all connected clients\n */\n sendHeartbeat(): void {\n const heartbeatMsg = JSON.stringify({\n type: 'heartbeat',\n timestamp: Date.now(),\n });\n\n for (const [connectionId, client] of this.clients.entries()) {\n if (!client.isOpen()) {\n this.unregisterClient(connectionId);\n continue;\n }\n\n try {\n client.send(heartbeatMsg);\n } catch (error) {\n console.error(`Failed to send heartbeat to client ${connectionId}:`, error);\n this.unregisterClient(connectionId);\n }\n }\n }\n\n /**\n * Send error message to a specific client\n */\n sendError(connectionId: string, code: string, message: string): void {\n const client = this.clients.get(connectionId);\n if (!client || !client.isOpen()) {\n return;\n }\n\n const errorMsg = JSON.stringify({\n type: 'error',\n code,\n message,\n });\n\n try {\n client.send(errorMsg);\n } catch (error) {\n console.error(`Failed to send error to client ${connectionId}:`, error);\n this.unregisterClient(connectionId);\n }\n }\n\n /**\n * Get connected clients count\n */\n getConnectedClientsCount(): number {\n return this.clients.size;\n }\n}\n", "import type { SyncDatabase } from './sync-engine';\nimport type { User } from '@edgebasejs/types';\n\nexport type IsolationLevel = 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'SERIALIZABLE';\nexport type TransactionStatus = 'active' | 'committed' | 'rolled_back' | 'expired';\n\nexport interface Transaction {\n id: string;\n userId: string;\n status: TransactionStatus;\n isolationLevel: IsolationLevel;\n createdAt: number;\n expiresAt: number;\n completedAt?: number;\n changes: TransactionChange[];\n}\n\nexport interface TransactionChange {\n id: string;\n entity: string;\n recordId: string;\n operation: 'create' | 'update' | 'delete';\n data: Record<string, any>;\n version?: number;\n}\n\n/**\n * Manages database transactions with ACID guarantees\n * Handles begin, commit, and rollback operations\n */\nexport class TransactionManager {\n private activeTransactions = new Map<string, Transaction>();\n private readonly transactionTimeout = 300000; // 5 minutes\n private readonly maxRetries = 3;\n\n constructor(private db: SyncDatabase) {}\n\n /**\n * Begin a new transaction\n */\n async begin(\n user: User,\n isolationLevel: IsolationLevel = 'READ_COMMITTED'\n ): Promise<string> {\n const transactionId = `txn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n const expiresAt = now + this.transactionTimeout;\n\n const transaction: Transaction = {\n id: transactionId,\n userId: user.id,\n status: 'active',\n isolationLevel,\n createdAt: now,\n expiresAt,\n changes: [],\n };\n\n // Store in memory\n this.activeTransactions.set(transactionId, transaction);\n\n // Persist to database\n await this.db.run(\n `INSERT INTO transactions (id, user_id, status, isolation_level, created_at, expires_at)\n VALUES (?, ?, ?, ?, ?, ?)`,\n [transactionId, user.id, 'active', isolationLevel, now, expiresAt]\n );\n\n return transactionId;\n }\n\n /**\n * Add a change to a transaction\n */\n async addChange(\n transactionId: string,\n entity: string,\n recordId: string,\n operation: 'create' | 'update' | 'delete',\n data: Record<string, any>,\n version?: number\n ): Promise<void> {\n const transaction = this.activeTransactions.get(transactionId);\n if (!transaction) {\n throw new Error(`Transaction not found: ${transactionId}`);\n }\n\n if (transaction.status !== 'active') {\n throw new Error(`Cannot add changes to ${transaction.status} transaction`);\n }\n\n // Check if transaction has expired\n if (Date.now() > transaction.expiresAt) {\n await this.rollback(transactionId);\n throw new Error('Transaction has expired');\n }\n\n const changeId = `change_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n const change: TransactionChange = {\n id: changeId,\n entity,\n recordId,\n operation,\n data,\n version,\n };\n\n // Add to transaction in memory\n transaction.changes.push(change);\n\n // Persist to database\n await this.db.run(\n `INSERT INTO transaction_changes (id, transaction_id, entity, record_id, operation, data, version, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [changeId, transactionId, entity, recordId, operation, JSON.stringify(data), version, Date.now()]\n );\n }\n\n /**\n * Get a transaction by ID\n */\n getTransaction(transactionId: string): Transaction | undefined {\n return this.activeTransactions.get(transactionId);\n }\n\n /**\n * Commit a transaction\n * Applies all changes atomically\n */\n async commit(transactionId: string): Promise<{ appliedCount: number; errors: string[] }> {\n const transaction = this.activeTransactions.get(transactionId);\n if (!transaction) {\n throw new Error(`Transaction not found: ${transactionId}`);\n }\n\n if (transaction.status !== 'active') {\n throw new Error(`Cannot commit ${transaction.status} transaction`);\n }\n\n // Check if transaction has expired\n if (Date.now() > transaction.expiresAt) {\n await this.rollback(transactionId);\n throw new Error('Transaction has expired');\n }\n\n const appliedChanges: TransactionChange[] = [];\n const errors: string[] = [];\n\n try {\n // Apply all changes with conflict detection\n for (const change of transaction.changes) {\n try {\n // Check for conflicts based on isolation level\n const conflict = await this.detectConflict(\n change.entity,\n change.recordId,\n change.version,\n transaction.isolationLevel\n );\n\n if (conflict) {\n errors.push(\n `Conflict on ${change.entity}:${change.recordId} (version mismatch)`\n );\n continue;\n }\n\n // Apply the change\n await this.applyChange(change);\n appliedChanges.push(change);\n } catch (error) {\n errors.push(`Error applying change to ${change.entity}:${change.recordId}`);\n }\n }\n\n // Mark transaction as committed\n transaction.status = 'committed';\n transaction.completedAt = Date.now();\n\n await this.db.run(\n `UPDATE transactions SET status = ?, completed_at = ? WHERE id = ?`,\n ['committed', Date.now(), transactionId]\n );\n\n return {\n appliedCount: appliedChanges.length,\n errors,\n };\n } catch (error) {\n // Rollback on error\n await this.rollback(transactionId);\n throw error;\n }\n }\n\n /**\n * Rollback a transaction\n * Reverts all changes\n */\n async rollback(transactionId: string): Promise<void> {\n const transaction = this.activeTransactions.get(transactionId);\n if (!transaction) {\n throw new Error(`Transaction not found: ${transactionId}`);\n }\n\n // Mark as rolled back\n transaction.status = 'rolled_back';\n transaction.completedAt = Date.now();\n\n // Update database\n await this.db.run(\n `UPDATE transactions SET status = ?, completed_at = ? WHERE id = ?`,\n ['rolled_back', Date.now(), transactionId]\n );\n\n // Remove from active transactions\n this.activeTransactions.delete(transactionId);\n }\n\n /**\n * Detect conflicts for a record\n */\n private async detectConflict(\n entity: string,\n recordId: string,\n clientVersion?: number,\n isolationLevel?: IsolationLevel\n ): Promise<boolean> {\n if (clientVersion === undefined) {\n return false; // No version provided, assume no conflict\n }\n\n try {\n const result = await this.db.getOne(\n `SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?`,\n [entity, recordId]\n );\n\n if (!result) {\n // Record doesn't exist yet, no conflict\n return false;\n }\n\n const serverVersion = result.version as number;\n\n // Check for version mismatch based on isolation level\n switch (isolationLevel) {\n case 'SERIALIZABLE':\n // Strict: any change by others = conflict\n return serverVersion !== clientVersion;\n\n case 'READ_COMMITTED':\n // Normal: only dirty reads avoided\n return serverVersion !== clientVersion;\n\n case 'READ_UNCOMMITTED':\n // Lenient: allow reads of uncommitted data\n return false;\n\n default:\n return serverVersion !== clientVersion;\n }\n } catch (error) {\n console.error('Error detecting conflict:', error);\n return false;\n }\n }\n\n /**\n * Apply a single change to the database\n */\n private async applyChange(change: TransactionChange): Promise<void> {\n switch (change.operation) {\n case 'create':\n case 'update':\n // Insert or update record\n const now = Date.now();\n await this.db.run(\n `INSERT INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)\n ON CONFLICT(entity, record_id) DO UPDATE SET version = version + 1, updated_at = ?`,\n [change.entity, change.recordId, 1, now, now]\n );\n break;\n\n case 'delete':\n // Mark as deleted\n const deletedAt = Date.now();\n await this.db.run(\n `UPDATE sync_metadata SET deleted_at = ? WHERE entity = ? AND record_id = ?`,\n [deletedAt, change.entity, change.recordId]\n );\n break;\n }\n }\n\n /**\n * Get all active transactions for a user\n */\n getActiveTransactions(userId: string): Transaction[] {\n return Array.from(this.activeTransactions.values()).filter(\n (txn) => txn.userId === userId && txn.status === 'active'\n );\n }\n\n /**\n * Cleanup expired transactions\n */\n async cleanup(): Promise<void> {\n const now = Date.now();\n const expired: string[] = [];\n\n for (const [id, txn] of this.activeTransactions.entries()) {\n if (now > txn.expiresAt) {\n expired.push(id);\n await this.rollback(id);\n }\n }\n\n if (expired.length > 0) {\n console.log(`Cleaned up ${expired.length} expired transactions`);\n }\n }\n\n /**\n * Get transaction statistics\n */\n getStats(): {\n activeTransactions: number;\n committedTransactions: number;\n rolledBackTransactions: number;\n } {\n return {\n activeTransactions: Array.from(this.activeTransactions.values()).filter(\n (txn) => txn.status === 'active'\n ).length,\n committedTransactions: Array.from(this.activeTransactions.values()).filter(\n (txn) => txn.status === 'committed'\n ).length,\n rolledBackTransactions: Array.from(this.activeTransactions.values()).filter(\n (txn) => txn.status === 'rolled_back'\n ).length,\n };\n }\n}\n", "/**\n * Batch processing for multiple CRUD operations\n * Supports atomic transactions and individual operation processing\n */\n\nimport type { SyncRequest, User } from '@edgebasejs/types';\nimport { AccessRulesEngine, type AccessContext } from '../access-rules/engine';\nimport { EncryptionManager } from '../encryption/encryption-manager';\nimport type { SyncDatabase, EntitySchema } from './sync-engine';\n\nexport interface BatchOperation {\n entity: string;\n id: string;\n operation: 'create' | 'update' | 'delete';\n data?: Record<string, any>;\n version?: number;\n}\n\nexport interface BatchRequest {\n create?: BatchOperation[];\n update?: BatchOperation[];\n delete?: BatchOperation[];\n atomic?: boolean; // If true, all succeed or all fail\n isolationLevel?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'SERIALIZABLE';\n}\n\nexport interface BatchResult {\n applied: Array<BatchOperation & { version: number; serverTimestamp: number }>;\n conflicts: Array<{\n entity: string;\n id: string;\n operation: string;\n clientVersion?: number;\n serverVersion: number;\n serverData: Record<string, any>;\n }>;\n errors: Array<{\n entity: string;\n id: string;\n operation: string;\n error: string;\n code: string;\n }>;\n appliedCount: number;\n conflictCount: number;\n errorCount: number;\n}\n\nexport interface BatchProcessorOptions {\n schemas: Map<string, EntitySchema>;\n db: SyncDatabase;\n user: User;\n maxBatchSize?: number; // Default: 1000\n encryption?: EncryptionManager;\n}\n\n/**\n * Batch processor for handling multiple CRUD operations\n */\nexport class BatchProcessor {\n private schemas: Map<string, EntitySchema>;\n private db: SyncDatabase;\n private user: User;\n private serverTimestamp: number;\n private maxBatchSize: number;\n private encryption?: EncryptionManager;\n\n constructor(options: BatchProcessorOptions) {\n this.schemas = options.schemas;\n this.db = options.db;\n this.user = options.user;\n this.serverTimestamp = Date.now();\n this.maxBatchSize = options.maxBatchSize || 1000;\n this.encryption = options.encryption;\n }\n\n /**\n * Process a batch of operations\n */\n async processBatch(request: BatchRequest): Promise<BatchResult> {\n const result: BatchResult = {\n applied: [],\n conflicts: [],\n errors: [],\n appliedCount: 0,\n conflictCount: 0,\n errorCount: 0,\n };\n\n // Collect all operations\n const allOperations: BatchOperation[] = [];\n allOperations.push(...(request.create || []));\n allOperations.push(...(request.update || []));\n allOperations.push(...(request.delete || []));\n\n // Check batch size\n if (allOperations.length > this.maxBatchSize) {\n result.errors.push({\n entity: '',\n id: '',\n operation: 'batch',\n error: `Batch size (${allOperations.length}) exceeds maximum (${this.maxBatchSize})`,\n code: 'BATCH_TOO_LARGE',\n });\n return result;\n }\n\n if (allOperations.length === 0) {\n return result;\n }\n\n // Process atomically or individually\n if (request.atomic) {\n return this.processBatchAtomic(allOperations, request, result);\n } else {\n return this.processBatchIndividual(allOperations, request, result);\n }\n }\n\n /**\n * Process batch atomically - all succeed or all fail\n */\n private async processBatchAtomic(\n operations: BatchOperation[],\n request: BatchRequest,\n result: BatchResult\n ): Promise<BatchResult> {\n const statements: Array<{ sql: string; params?: any[] }> = [];\n const operationMap: Map<string, BatchOperation> = new Map();\n\n try {\n // Validate and prepare all operations\n for (const op of operations) {\n const key = `${op.entity}:${op.id}`;\n operationMap.set(key, op);\n\n // Validate operation\n const validation = await this.validateOperation(op);\n if (validation.error) {\n throw new Error(`Operation validation failed for ${key}: ${validation.error}`);\n }\n\n // Check access rules\n const accessCheck = await this.checkAccess(op);\n if (!accessCheck.allowed) {\n throw new Error(`Access denied for ${key}: ${accessCheck.reason}`);\n }\n\n // Check conflicts\n const conflictCheck = await this.checkConflict(op);\n if (conflictCheck.hasConflict) {\n throw new Error(`Conflict detected for ${key}`);\n }\n\n // Prepare SQL statements\n const preparedStatements = this.prepareStatements(op);\n statements.push(...preparedStatements);\n }\n\n // Execute all statements atomically\n if (statements.length > 0) {\n await this.db.batch(statements);\n }\n\n // Add all operations to applied list\n let version = 1;\n for (const op of operations) {\n const currentVersion = (await this.getVersion(op.entity, op.id)) || 0;\n result.applied.push({\n ...op,\n version: currentVersion + 1,\n serverTimestamp: this.serverTimestamp,\n });\n }\n\n result.appliedCount = result.applied.length;\n } catch (error) {\n // Atomic transaction failed - return error\n const errorMsg = error instanceof Error ? error.message : 'Atomic batch failed';\n for (const op of operations) {\n result.errors.push({\n entity: op.entity,\n id: op.id,\n operation: op.operation,\n error: errorMsg,\n code: 'ATOMIC_BATCH_FAILED',\n });\n }\n result.errorCount = result.errors.length;\n }\n\n return result;\n }\n\n /**\n * Process batch operations individually\n */\n private async processBatchIndividual(\n operations: BatchOperation[],\n request: BatchRequest,\n result: BatchResult\n ): Promise<BatchResult> {\n for (const op of operations) {\n try {\n // Validate operation\n const validation = await this.validateOperation(op);\n if (validation.error) {\n result.errors.push({\n entity: op.entity,\n id: op.id,\n operation: op.operation,\n error: validation.error,\n code: 'VALIDATION_ERROR',\n });\n continue;\n }\n\n // Check access rules\n const accessCheck = await this.checkAccess(op);\n if (!accessCheck.allowed) {\n result.errors.push({\n entity: op.entity,\n id: op.id,\n operation: op.operation,\n error: accessCheck.reason || 'Access denied',\n code: 'ACCESS_DENIED',\n });\n continue;\n }\n\n // Check for conflicts\n const conflictCheck = await this.checkConflict(op);\n if (conflictCheck.hasConflict) {\n result.conflicts.push({\n entity: op.entity,\n id: op.id,\n operation: op.operation,\n clientVersion: op.version,\n serverVersion: conflictCheck.serverVersion || 0,\n serverData: conflictCheck.serverData || {},\n });\n continue;\n }\n\n // Apply operation\n const currentVersion = (await this.getVersion(op.entity, op.id)) || 0;\n const newVersion = currentVersion + 1;\n\n const statements = this.prepareStatements(op, newVersion);\n if (statements.length > 0) {\n await this.db.batch(statements);\n }\n\n result.applied.push({\n ...op,\n version: newVersion,\n serverTimestamp: this.serverTimestamp,\n });\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Processing failed';\n result.errors.push({\n entity: op.entity,\n id: op.id,\n operation: op.operation,\n error: errorMsg,\n code: 'PROCESSING_ERROR',\n });\n }\n }\n\n result.appliedCount = result.applied.length;\n result.conflictCount = result.conflicts.length;\n result.errorCount = result.errors.length;\n\n return result;\n }\n\n /**\n * Validate a single operation\n */\n private async validateOperation(op: BatchOperation): Promise<{ error?: string }> {\n if (!op.entity) {\n return { error: 'Missing entity' };\n }\n\n if (!op.id) {\n return { error: 'Missing record id' };\n }\n\n if ((op.operation === 'create' || op.operation === 'update') && (!op.data || typeof op.data !== 'object')) {\n return { error: 'Missing data' };\n }\n\n const schema = this.schemas.get(op.entity);\n if (!schema) {\n return { error: 'Unknown entity' };\n }\n\n return {};\n }\n\n /**\n * Check access rules for operation\n */\n private async checkAccess(op: BatchOperation): Promise<{ allowed: boolean; reason?: string }> {\n const schema = this.schemas.get(op.entity);\n if (!schema) {\n return { allowed: false, reason: 'Unknown entity' };\n }\n\n const accessContext: AccessContext = {\n user: this.user,\n operation: op.operation,\n data: op.data ?? {},\n };\n\n // Get existing data for update/delete operations\n if (op.operation === 'update' || op.operation === 'delete') {\n const existing = await this.db.getOne(`SELECT * FROM ${op.entity} WHERE id = ?`, [op.id]);\n if (existing) {\n accessContext.existingData = existing;\n }\n }\n\n // Evaluate access rules\n const accessDecision = await AccessRulesEngine.evaluate(accessContext, schema.accessRules);\n\n return {\n allowed: accessDecision.allowed,\n reason: accessDecision.reason,\n };\n }\n\n /**\n * Check for conflicts (version mismatch)\n */\n private async checkConflict(op: BatchOperation): Promise<{\n hasConflict: boolean;\n serverVersion?: number;\n serverData?: Record<string, any>;\n }> {\n const metadata = await this.db.getOne(\n 'SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?',\n [op.entity, op.id]\n );\n\n const serverVersion = metadata?.version || 0;\n\n // Check if operation version matches server version\n if (metadata && op.version !== undefined && op.version !== serverVersion) {\n const serverData = await this.db.getOne(`SELECT * FROM ${op.entity} WHERE id = ?`, [op.id]);\n return {\n hasConflict: true,\n serverVersion,\n serverData: serverData || {},\n };\n }\n\n return { hasConflict: false, serverVersion };\n }\n\n /**\n * Get current version for an entity record\n */\n private async getVersion(entity: string, recordId: string): Promise<number | null> {\n const metadata = await this.db.getOne(\n 'SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?',\n [entity, recordId]\n );\n return metadata?.version ?? null;\n }\n\n /**\n * Prepare SQL statements for an operation\n */\n private prepareStatements(op: BatchOperation, version?: number): Array<{ sql: string; params?: any[] }> {\n const now = Date.now();\n const finalVersion = version !== undefined ? version : 1;\n const statements: Array<{ sql: string; params?: any[] }> = [];\n\n switch (op.operation) {\n case 'create': {\n const columns = ['id', ...Object.keys(op.data || {})];\n const values = [op.id, ...Object.values(op.data || {})];\n const placeholders = columns.map(() => '?').join(', ');\n\n statements.push({\n sql: `INSERT INTO ${op.entity} (${columns.join(', ')}) VALUES (${placeholders})`,\n params: values,\n });\n\n statements.push({\n sql: 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',\n params: [op.entity, op.id, finalVersion, now],\n });\n break;\n }\n\n case 'update': {\n const updates = Object.entries(op.data || {})\n .map(([key]) => `${key} = ?`)\n .join(', ');\n const values = [...Object.values(op.data || {}), op.id];\n\n statements.push({\n sql: `UPDATE ${op.entity} SET ${updates} WHERE id = ?`,\n params: values,\n });\n\n statements.push({\n sql: 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)',\n params: [op.entity, op.id, finalVersion, now],\n });\n break;\n }\n\n case 'delete': {\n statements.push({\n sql: `DELETE FROM ${op.entity} WHERE id = ?`,\n params: [op.id],\n });\n\n statements.push({\n sql: 'DELETE FROM sync_metadata WHERE entity = ? AND record_id = ?',\n params: [op.entity, op.id],\n });\n break;\n }\n }\n\n return statements;\n }\n}\n", "/**\n * CSV import/export processor\n * Handles CSV data transformation for bulk import/export operations\n */\n\nexport interface CSVImportOptions {\n entity: string;\n data: string; // CSV content as string\n hasHeader?: boolean; // If true, first row is treated as header\n skipErrors?: boolean; // If true, continue on row errors\n}\n\nexport interface CSVImportResult {\n entity: string;\n totalRows: number;\n validRows: number;\n invalidRows: number;\n errors: Array<{\n row: number;\n error: string;\n data?: any;\n }>;\n data: Array<Record<string, any>>;\n}\n\nexport interface CSVExportOptions {\n entity: string;\n data: Array<Record<string, any>>;\n columns?: string[]; // Specific columns to export, or all if not specified\n includeMetadata?: boolean; // Include version, timestamps, etc.\n}\n\nexport interface CSVExportResult {\n entity: string;\n columns: string[];\n rows: Array<string[]>;\n csv: string;\n}\n\n/**\n * CSV processor for import/export operations\n */\nexport class CSVProcessor {\n /**\n * Parse CSV string to objects\n */\n static parseCSV(content: string, hasHeader = true): CSVImportResult & { data: Array<Record<string, any>> } {\n const lines = content.split('\\n').filter((line) => line.trim());\n\n if (lines.length === 0) {\n return {\n entity: '',\n totalRows: 0,\n validRows: 0,\n invalidRows: 0,\n errors: [],\n data: [],\n };\n }\n\n let headers: string[] = [];\n let startIndex = 0;\n\n // Parse header if present\n if (hasHeader && lines.length > 0) {\n headers = this.parseCSVLine(lines[0]);\n startIndex = 1;\n }\n\n if (headers.length === 0) {\n throw new Error('No headers found in CSV');\n }\n\n const data: Array<Record<string, any>> = [];\n const errors: Array<{ row: number; error: string; data?: any }> = [];\n\n // Parse data rows\n for (let i = startIndex; i < lines.length; i++) {\n try {\n const values = this.parseCSVLine(lines[i]);\n\n if (values.length === 0) {\n continue; // Skip empty rows\n }\n\n // Create object from headers and values\n const record: Record<string, any> = {};\n for (let j = 0; j < headers.length; j++) {\n const value = values[j] || '';\n record[headers[j]] = this.convertValue(value);\n }\n\n data.push(record);\n } catch (error) {\n const errorMsg = error instanceof Error ? error.message : 'Parse error';\n errors.push({\n row: i + 1,\n error: errorMsg,\n data: lines[i],\n });\n }\n }\n\n return {\n entity: '',\n totalRows: lines.length - (hasHeader ? 1 : 0),\n validRows: data.length,\n invalidRows: errors.length,\n errors,\n data,\n };\n }\n\n /**\n * Convert CSV string to objects for import\n */\n static async importFromCSV(options: CSVImportOptions): Promise<CSVImportResult> {\n try {\n const parsed = this.parseCSV(options.data, options.hasHeader !== false);\n\n return {\n entity: options.entity,\n totalRows: parsed.totalRows,\n validRows: parsed.validRows,\n invalidRows: parsed.invalidRows,\n errors: options.skipErrors ? [] : parsed.errors,\n data: parsed.data,\n };\n } catch (error) {\n throw new Error(`CSV import failed: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n /**\n * Convert objects to CSV string for export\n */\n static exportToCSV(options: CSVExportOptions): CSVExportResult {\n if (options.data.length === 0) {\n return {\n entity: options.entity,\n columns: [],\n rows: [],\n csv: '',\n };\n }\n\n // Determine columns\n let columns = options.columns || [];\n if (columns.length === 0) {\n // Extract all unique columns from data\n const columnSet = new Set<string>();\n for (const record of options.data) {\n Object.keys(record).forEach((key) => {\n if (!key.startsWith('_')) {\n columnSet.add(key);\n }\n });\n }\n columns = Array.from(columnSet).sort();\n }\n\n // Build CSV rows\n const rows: Array<string[]> = [];\n\n // Add header row\n rows.push(columns);\n\n // Add data rows\n for (const record of options.data) {\n const row: string[] = [];\n for (const column of columns) {\n const value = record[column];\n row.push(this.formatCSVValue(value));\n }\n rows.push(row);\n }\n\n // Convert to CSV string\n const csv = rows.map((row) => row.map((val) => `\"${val}\"`).join(',')).join('\\n');\n\n return {\n entity: options.entity,\n columns,\n rows,\n csv,\n };\n }\n\n /**\n * Parse a single CSV line, handling quoted fields\n */\n private static parseCSVLine(line: string): string[] {\n const result: string[] = [];\n let current = '';\n let inQuotes = false;\n\n for (let i = 0; i < line.length; i++) {\n const char = line[i];\n const nextChar = line[i + 1];\n\n if (char === '\"') {\n if (inQuotes && nextChar === '\"') {\n // Escaped quote\n current += '\"';\n i++; // Skip next quote\n } else {\n // Toggle quote mode\n inQuotes = !inQuotes;\n }\n } else if (char === ',' && !inQuotes) {\n // Field separator\n result.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n\n // Add last field\n result.push(current.trim());\n\n return result;\n }\n\n /**\n * Convert CSV string value to appropriate type\n */\n private static convertValue(value: string): any {\n if (!value || value === 'null' || value === 'undefined') {\n return null;\n }\n\n // Try to parse as boolean\n if (value.toLowerCase() === 'true') {\n return true;\n }\n if (value.toLowerCase() === 'false') {\n return false;\n }\n\n // Try to parse as number\n const num = parseFloat(value);\n if (!isNaN(num) && value !== '') {\n return num;\n }\n\n // Try to parse as JSON (for objects/arrays)\n if ((value.startsWith('{') && value.endsWith('}')) || (value.startsWith('[') && value.endsWith(']'))) {\n try {\n return JSON.parse(value);\n } catch {\n // Fall through to string\n }\n }\n\n // Return as string\n return value;\n }\n\n /**\n * Format a value for CSV output\n */\n private static formatCSVValue(value: any): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n\n return String(value);\n }\n}\n", "/**\n * File storage manager for Cloudflare R2\n * Handles upload, download, and file metadata management\n */\n\nimport type { User } from '@edgebasejs/types';\n\nexport interface R2Bucket {\n put(key: string, value: ReadableStream | ArrayBuffer | string, options?: R2PutOptions): Promise<R2Object>;\n get(key: string, options?: R2GetOptions): Promise<R2ObjectBody | null>;\n delete(key: string): Promise<void>;\n head(key: string): Promise<R2Object | null>;\n list(options?: R2ListOptions): Promise<R2Objects>;\n}\n\nexport interface R2PutOptions {\n httpMetadata?: R2HTTPMetadata;\n customMetadata?: Record<string, string>;\n}\n\nexport interface R2GetOptions {\n range?: { offset?: number; length?: number };\n}\n\nexport interface R2ListOptions {\n prefix?: string;\n limit?: number;\n cursor?: string;\n}\n\nexport interface R2HTTPMetadata {\n contentType?: string;\n contentLanguage?: string;\n contentDisposition?: string;\n contentEncoding?: string;\n cacheControl?: string;\n}\n\nexport interface R2Object {\n key: string;\n version: string;\n size: number;\n etag: string;\n httpMetadata?: R2HTTPMetadata;\n customMetadata?: Record<string, string>;\n uploaded: Date;\n}\n\nexport interface R2ObjectBody extends R2Object {\n body: ReadableStream;\n arrayBuffer(): Promise<ArrayBuffer>;\n text(): Promise<string>;\n json<T>(): Promise<T>;\n blob(): Promise<Blob>;\n}\n\nexport interface R2Objects {\n objects: R2Object[];\n truncated: boolean;\n cursor?: string;\n}\n\nexport interface FileMetadata {\n id: string;\n key: string;\n fileName: string;\n mimeType: string;\n size: number;\n userId: string;\n bucket: string;\n entityType?: string; // Optional: link to entity (e.g., 'profile_photo', 'document')\n entityId?: string; // Optional: link to specific record\n isPublic: boolean;\n uploadedAt: number;\n expiresAt?: number;\n checksum?: string;\n}\n\nexport interface UploadOptions {\n fileName: string;\n mimeType: string;\n size: number;\n entityType?: string;\n entityId?: string;\n isPublic?: boolean;\n expiresIn?: number; // Expiration in seconds\n maxSize?: number; // Max file size in bytes\n}\n\nexport interface FileDatabase {\n run(sql: string, params: any[]): Promise<any>;\n getOne(sql: string, params: any[]): Promise<any>;\n getAll(sql: string, params: any[]): Promise<any[]>;\n}\n\n/**\n * File storage manager\n */\nexport class FileStorageManager {\n private bucket: R2Bucket;\n private db: FileDatabase;\n private maxFileSize: number;\n private allowedMimeTypes?: string[];\n\n constructor(\n bucket: R2Bucket,\n db: FileDatabase,\n options?: {\n maxFileSize?: number; // Default: 100MB\n allowedMimeTypes?: string[];\n }\n ) {\n this.bucket = bucket;\n this.db = db;\n this.maxFileSize = options?.maxFileSize || 100 * 1024 * 1024; // 100MB default\n this.allowedMimeTypes = options?.allowedMimeTypes;\n }\n\n /**\n * Upload a file to R2\n */\n async uploadFile(\n user: User,\n file: ReadableStream | ArrayBuffer | string,\n options: UploadOptions\n ): Promise<FileMetadata> {\n // Validate file size\n if (options.size > (options.maxSize || this.maxFileSize)) {\n throw new Error(\n `File size (${options.size} bytes) exceeds maximum allowed size (${options.maxSize || this.maxFileSize} bytes)`\n );\n }\n\n // Validate MIME type\n if (this.allowedMimeTypes && !this.allowedMimeTypes.includes(options.mimeType)) {\n throw new Error(`File type ${options.mimeType} is not allowed`);\n }\n\n const fileId = `${user.id}_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n const key = `${user.id}/${fileId}/${options.fileName}`;\n const now = Date.now();\n\n // Upload to R2\n await this.bucket.put(key, file, {\n httpMetadata: {\n contentType: options.mimeType,\n contentDisposition: `attachment; filename=\"${options.fileName}\"`,\n },\n customMetadata: {\n userId: user.id,\n uploadedAt: now.toString(),\n ...(options.entityType ? { entityType: options.entityType } : {}),\n ...(options.entityId ? { entityId: options.entityId } : {}),\n },\n });\n\n // Save metadata to database\n const metadata: FileMetadata = {\n id: fileId,\n key,\n fileName: options.fileName,\n mimeType: options.mimeType,\n size: options.size,\n userId: user.id,\n bucket: 'default',\n entityType: options.entityType,\n entityId: options.entityId,\n isPublic: options.isPublic || false,\n uploadedAt: now,\n expiresAt: options.expiresIn ? now + options.expiresIn * 1000 : undefined,\n };\n\n await this.db.run(\n `INSERT INTO files (id, key, file_name, mime_type, size, user_id, bucket, entity_type, entity_id, is_public, uploaded_at, expires_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n metadata.id,\n metadata.key,\n metadata.fileName,\n metadata.mimeType,\n metadata.size,\n metadata.userId,\n metadata.bucket,\n metadata.entityType || null,\n metadata.entityId || null,\n metadata.isPublic ? 1 : 0,\n metadata.uploadedAt,\n metadata.expiresAt || null,\n ]\n );\n\n return metadata;\n }\n\n /**\n * Download a file from R2\n */\n async downloadFile(fileId: string, user: User): Promise<R2ObjectBody | null> {\n // Get file metadata\n const metadata = await this.getFileMetadata(fileId);\n if (!metadata) {\n return null;\n }\n\n // Check permissions\n if (!metadata.isPublic && metadata.userId !== user.id) {\n throw new Error('Access denied');\n }\n\n // Check if expired\n if (metadata.expiresAt && metadata.expiresAt < Date.now()) {\n throw new Error('File has expired');\n }\n\n // Download from R2\n return await this.bucket.get(metadata.key);\n }\n\n /**\n * Delete a file\n */\n async deleteFile(fileId: string, user: User): Promise<void> {\n // Get file metadata\n const metadata = await this.getFileMetadata(fileId);\n if (!metadata) {\n throw new Error('File not found');\n }\n\n // Check permissions\n if (metadata.userId !== user.id) {\n throw new Error('Access denied');\n }\n\n // Delete from R2\n await this.bucket.delete(metadata.key);\n\n // Delete metadata from database\n await this.db.run('DELETE FROM files WHERE id = ?', [fileId]);\n }\n\n /**\n * Get file metadata\n */\n async getFileMetadata(fileId: string): Promise<FileMetadata | null> {\n const row = await this.db.getOne('SELECT * FROM files WHERE id = ?', [fileId]);\n\n if (!row) {\n return null;\n }\n\n return {\n id: row.id,\n key: row.key,\n fileName: row.file_name,\n mimeType: row.mime_type,\n size: row.size,\n userId: row.user_id,\n bucket: row.bucket,\n entityType: row.entity_type,\n entityId: row.entity_id,\n isPublic: row.is_public === 1,\n uploadedAt: row.uploaded_at,\n expiresAt: row.expires_at,\n checksum: row.checksum,\n };\n }\n\n /**\n * List files for a user\n */\n async listFiles(\n user: User,\n options?: {\n entityType?: string;\n entityId?: string;\n limit?: number;\n offset?: number;\n }\n ): Promise<FileMetadata[]> {\n let query = 'SELECT * FROM files WHERE user_id = ?';\n const params: any[] = [user.id];\n\n if (options?.entityType) {\n query += ' AND entity_type = ?';\n params.push(options.entityType);\n }\n\n if (options?.entityId) {\n query += ' AND entity_id = ?';\n params.push(options.entityId);\n }\n\n query += ' ORDER BY uploaded_at DESC';\n\n if (options?.limit) {\n query += ' LIMIT ?';\n params.push(options.limit);\n }\n\n if (options?.offset) {\n query += ' OFFSET ?';\n params.push(options.offset);\n }\n\n const rows = await this.db.getAll(query, params);\n\n return rows.map((row) => ({\n id: row.id,\n key: row.key,\n fileName: row.file_name,\n mimeType: row.mime_type,\n size: row.size,\n userId: row.user_id,\n bucket: row.bucket,\n entityType: row.entity_type,\n entityId: row.entity_id,\n isPublic: row.is_public === 1,\n uploadedAt: row.uploaded_at,\n expiresAt: row.expires_at,\n checksum: row.checksum,\n }));\n }\n\n /**\n * Generate a signed URL for temporary access\n * Note: R2 doesn't support presigned URLs natively yet, so this returns a direct URL\n * In production, you'd implement token-based access or use Workers to proxy requests\n */\n async generateSignedUrl(fileId: string, user: User, expiresIn: number = 3600): Promise<string> {\n const metadata = await this.getFileMetadata(fileId);\n if (!metadata) {\n throw new Error('File not found');\n }\n\n // Check permissions\n if (!metadata.isPublic && metadata.userId !== user.id) {\n throw new Error('Access denied');\n }\n\n // Generate a temporary access token (stored in database)\n const token = `${fileId}_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;\n const expiresAt = Date.now() + expiresIn * 1000;\n\n await this.db.run(\n 'INSERT INTO file_access_tokens (token, file_id, user_id, expires_at, created_at) VALUES (?, ?, ?, ?, ?)',\n [token, fileId, user.id, expiresAt, Date.now()]\n );\n\n // Return URL with token\n return `/files/download/${fileId}?token=${token}`;\n }\n\n /**\n * Verify a signed URL token\n */\n async verifyToken(fileId: string, token: string): Promise<boolean> {\n const row = await this.db.getOne(\n 'SELECT * FROM file_access_tokens WHERE token = ? AND file_id = ? AND expires_at > ?',\n [token, fileId, Date.now()]\n );\n\n return !!row;\n }\n\n /**\n * Clean up expired files\n */\n async cleanupExpiredFiles(): Promise<number> {\n const expiredFiles = await this.db.getAll('SELECT * FROM files WHERE expires_at IS NOT NULL AND expires_at < ?', [\n Date.now(),\n ]);\n\n for (const file of expiredFiles) {\n try {\n await this.bucket.delete(file.key);\n await this.db.run('DELETE FROM files WHERE id = ?', [file.id]);\n } catch (error) {\n console.error(`Failed to delete expired file ${file.id}:`, error);\n }\n }\n\n return expiredFiles.length;\n }\n}\n", "/**\n * Webhook manager for event-driven integrations\n * Handles webhook registration, event triggering, and delivery with retry logic\n */\n\nimport type { User } from '@edgebasejs/types';\n\nexport interface Webhook {\n id: string;\n userId: string;\n url: string;\n events: string[]; // Array of event types to listen for (e.g., ['sync.create', 'sync.update'])\n secret: string; // Secret for signing webhook payloads\n isActive: boolean;\n description?: string;\n headers?: Record<string, string>; // Custom headers to include\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface WebhookEvent {\n id: string;\n webhookId: string;\n eventType: string;\n payload: Record<string, any>;\n signature: string;\n attempts: number;\n maxAttempts: number;\n nextRetryAt?: number;\n deliveredAt?: number;\n failedAt?: number;\n error?: string;\n createdAt: number;\n}\n\nexport interface WebhookDelivery {\n id: string;\n webhookId: string;\n eventId: string;\n url: string;\n eventType: string;\n statusCode?: number;\n responseBody?: string;\n error?: string;\n duration: number;\n createdAt: number;\n}\n\nexport interface RegisterWebhookOptions {\n url: string;\n events: string[];\n description?: string;\n headers?: Record<string, string>;\n}\n\nexport interface TriggerEventOptions {\n eventType: string;\n entity?: string;\n recordId?: string;\n operation?: 'create' | 'update' | 'delete';\n data?: Record<string, any>;\n userId?: string;\n}\n\nexport interface WebhookDatabase {\n run(sql: string, params: any[]): Promise<any>;\n getOne(sql: string, params: any[]): Promise<any>;\n getAll(sql: string, params: any[]): Promise<any[]>;\n}\n\n/**\n * Webhook manager\n */\nexport class WebhookManager {\n private db: WebhookDatabase;\n private maxRetries: number;\n private retryDelays: number[]; // Exponential backoff delays in seconds\n\n constructor(\n db: WebhookDatabase,\n options?: {\n maxRetries?: number; // Default: 5\n retryDelays?: number[]; // Default: [60, 300, 900, 3600, 7200] (1m, 5m, 15m, 1h, 2h)\n }\n ) {\n this.db = db;\n this.maxRetries = options?.maxRetries || 5;\n this.retryDelays = options?.retryDelays || [60, 300, 900, 3600, 7200];\n }\n\n /**\n * Register a new webhook\n */\n async registerWebhook(user: User, options: RegisterWebhookOptions): Promise<Webhook> {\n // Validate URL\n try {\n new URL(options.url);\n } catch {\n throw new Error('Invalid webhook URL');\n }\n\n // Validate events\n if (!options.events || options.events.length === 0) {\n throw new Error('At least one event type is required');\n }\n\n const now = Date.now();\n const webhookId = `wh_${now}_${Math.random().toString(36).substring(2, 15)}`;\n const secret = this.generateSecret();\n\n const webhook: Webhook = {\n id: webhookId,\n userId: user.id,\n url: options.url,\n events: options.events,\n secret,\n isActive: true,\n description: options.description,\n headers: options.headers,\n createdAt: now,\n updatedAt: now,\n };\n\n await this.db.run(\n `INSERT INTO webhooks (id, user_id, url, events, secret, is_active, description, headers, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n webhook.id,\n webhook.userId,\n webhook.url,\n JSON.stringify(webhook.events),\n webhook.secret,\n webhook.isActive ? 1 : 0,\n webhook.description || null,\n webhook.headers ? JSON.stringify(webhook.headers) : null,\n webhook.createdAt,\n webhook.updatedAt,\n ]\n );\n\n return webhook;\n }\n\n /**\n * Get a webhook by ID\n */\n async getWebhook(webhookId: string, userId?: string): Promise<Webhook | null> {\n let query = 'SELECT * FROM webhooks WHERE id = ?';\n const params: any[] = [webhookId];\n\n if (userId) {\n query += ' AND user_id = ?';\n params.push(userId);\n }\n\n const row = await this.db.getOne(query, params);\n if (!row) {\n return null;\n }\n\n return this.rowToWebhook(row);\n }\n\n /**\n * List webhooks for a user\n */\n async listWebhooks(userId: string): Promise<Webhook[]> {\n const rows = await this.db.getAll('SELECT * FROM webhooks WHERE user_id = ? ORDER BY created_at DESC', [userId]);\n return rows.map((row) => this.rowToWebhook(row));\n }\n\n /**\n * Update a webhook\n */\n async updateWebhook(\n webhookId: string,\n userId: string,\n updates: {\n url?: string;\n events?: string[];\n isActive?: boolean;\n description?: string;\n headers?: Record<string, string>;\n }\n ): Promise<Webhook> {\n const webhook = await this.getWebhook(webhookId, userId);\n if (!webhook) {\n throw new Error('Webhook not found');\n }\n\n const now = Date.now();\n const setClauses: string[] = [];\n const params: any[] = [];\n\n if (updates.url !== undefined) {\n try {\n new URL(updates.url);\n } catch {\n throw new Error('Invalid webhook URL');\n }\n setClauses.push('url = ?');\n params.push(updates.url);\n }\n\n if (updates.events !== undefined) {\n if (updates.events.length === 0) {\n throw new Error('At least one event type is required');\n }\n setClauses.push('events = ?');\n params.push(JSON.stringify(updates.events));\n }\n\n if (updates.isActive !== undefined) {\n setClauses.push('is_active = ?');\n params.push(updates.isActive ? 1 : 0);\n }\n\n if (updates.description !== undefined) {\n setClauses.push('description = ?');\n params.push(updates.description);\n }\n\n if (updates.headers !== undefined) {\n setClauses.push('headers = ?');\n params.push(JSON.stringify(updates.headers));\n }\n\n setClauses.push('updated_at = ?');\n params.push(now);\n\n params.push(webhookId, userId);\n\n await this.db.run(\n `UPDATE webhooks SET ${setClauses.join(', ')} WHERE id = ? AND user_id = ?`,\n params\n );\n\n return (await this.getWebhook(webhookId, userId))!;\n }\n\n /**\n * Delete a webhook\n */\n async deleteWebhook(webhookId: string, userId: string): Promise<void> {\n await this.db.run('DELETE FROM webhooks WHERE id = ? AND user_id = ?', [webhookId, userId]);\n }\n\n /**\n * Trigger an event and queue it for delivery\n */\n async triggerEvent(options: TriggerEventOptions): Promise<void> {\n // Find matching webhooks\n const webhooks = await this.findMatchingWebhooks(options.eventType, options.userId);\n\n if (webhooks.length === 0) {\n return; // No webhooks to trigger\n }\n\n const now = Date.now();\n\n // Create webhook events for each matching webhook\n for (const webhook of webhooks) {\n const eventId = `evt_${now}_${Math.random().toString(36).substring(2, 15)}`;\n\n const payload = {\n id: eventId,\n type: options.eventType,\n timestamp: now,\n data: {\n entity: options.entity,\n recordId: options.recordId,\n operation: options.operation,\n ...options.data,\n },\n };\n\n const signature = this.signPayload(payload, webhook.secret);\n\n await this.db.run(\n `INSERT INTO webhook_events (id, webhook_id, event_type, payload, signature, attempts, max_attempts, next_retry_at, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [eventId, webhook.id, options.eventType, JSON.stringify(payload), signature, 0, this.maxRetries, now, now]\n );\n }\n }\n\n /**\n * Process pending webhook events\n */\n async processPendingEvents(): Promise<number> {\n const now = Date.now();\n const events = await this.db.getAll(\n `SELECT e.*, w.url, w.headers\n FROM webhook_events e\n JOIN webhooks w ON e.webhook_id = w.id\n WHERE e.delivered_at IS NULL\n AND e.failed_at IS NULL\n AND (e.next_retry_at IS NULL OR e.next_retry_at <= ?)\n AND e.attempts < e.max_attempts\n AND w.is_active = 1\n ORDER BY e.created_at ASC\n LIMIT 100`,\n [now]\n );\n\n let processed = 0;\n\n for (const event of events) {\n try {\n await this.deliverEvent(event);\n processed++;\n } catch (error) {\n console.error(`Failed to deliver event ${event.id}:`, error);\n }\n }\n\n return processed;\n }\n\n /**\n * Deliver a webhook event\n */\n private async deliverEvent(event: any): Promise<void> {\n const startTime = Date.now();\n const deliveryId = `del_${startTime}_${Math.random().toString(36).substring(2, 15)}`;\n\n try {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-EdgeBase-Signature': event.signature,\n 'X-EdgeBase-Event-Type': event.event_type,\n 'X-EdgeBase-Event-Id': event.id,\n 'X-EdgeBase-Delivery-Id': deliveryId,\n };\n\n // Add custom headers\n if (event.headers) {\n const customHeaders = JSON.parse(event.headers);\n Object.assign(headers, customHeaders);\n }\n\n const response = await fetch(event.url, {\n method: 'POST',\n headers,\n body: event.payload,\n });\n\n const duration = Date.now() - startTime;\n const responseBody = await response.text().catch(() => '');\n\n // Log delivery\n await this.db.run(\n `INSERT INTO webhook_deliveries (id, webhook_id, event_id, url, event_type, status_code, response_body, duration, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [deliveryId, event.webhook_id, event.id, event.url, event.event_type, response.status, responseBody.substring(0, 1000), duration, Date.now()]\n );\n\n if (response.ok) {\n // Mark as delivered\n await this.db.run('UPDATE webhook_events SET delivered_at = ?, attempts = attempts + 1 WHERE id = ?', [Date.now(), event.id]);\n } else {\n // Schedule retry\n await this.scheduleRetry(event, `HTTP ${response.status}: ${responseBody.substring(0, 200)}`);\n }\n } catch (error) {\n const duration = Date.now() - startTime;\n const errorMsg = error instanceof Error ? error.message : 'Unknown error';\n\n // Log failed delivery\n await this.db.run(\n `INSERT INTO webhook_deliveries (id, webhook_id, event_id, url, event_type, error, duration, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\n [deliveryId, event.webhook_id, event.id, event.url, event.event_type, errorMsg.substring(0, 1000), duration, Date.now()]\n );\n\n // Schedule retry\n await this.scheduleRetry(event, errorMsg);\n }\n }\n\n /**\n * Schedule a retry for a failed event\n */\n private async scheduleRetry(event: any, error: string): Promise<void> {\n const attempts = event.attempts + 1;\n\n if (attempts >= event.max_attempts) {\n // Max retries reached - mark as failed\n await this.db.run('UPDATE webhook_events SET failed_at = ?, attempts = ?, error = ? WHERE id = ?', [\n Date.now(),\n attempts,\n error.substring(0, 1000),\n event.id,\n ]);\n } else {\n // Schedule next retry with exponential backoff\n const delayIndex = Math.min(attempts - 1, this.retryDelays.length - 1);\n const delay = this.retryDelays[delayIndex];\n const nextRetryAt = Date.now() + delay * 1000;\n\n await this.db.run('UPDATE webhook_events SET attempts = ?, next_retry_at = ?, error = ? WHERE id = ?', [\n attempts,\n nextRetryAt,\n error.substring(0, 1000),\n event.id,\n ]);\n }\n }\n\n /**\n * Find webhooks matching an event type\n */\n private async findMatchingWebhooks(eventType: string, userId?: string): Promise<Webhook[]> {\n let query = 'SELECT * FROM webhooks WHERE is_active = 1';\n const params: any[] = [];\n\n if (userId) {\n query += ' AND user_id = ?';\n params.push(userId);\n }\n\n const rows = await this.db.getAll(query, params);\n const webhooks = rows.map((row) => this.rowToWebhook(row));\n\n // Filter by event type\n return webhooks.filter((webhook) => {\n // Check if any event pattern matches\n return webhook.events.some((pattern) => this.matchEventPattern(eventType, pattern));\n });\n }\n\n /**\n * Match an event type against a pattern (supports wildcards)\n */\n private matchEventPattern(eventType: string, pattern: string): boolean {\n // Convert pattern to regex (support * wildcard)\n const regexPattern = pattern.replace(/\\*/g, '.*');\n const regex = new RegExp(`^${regexPattern}$`);\n return regex.test(eventType);\n }\n\n /**\n * Sign a payload with HMAC-SHA256\n */\n private signPayload(payload: any, secret: string): string {\n const payloadString = typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n // Simple signing - in production, use crypto.subtle for proper HMAC-SHA256\n // This is a placeholder using base64 encoding\n const combined = payloadString + secret;\n const encoder = new TextEncoder();\n const data = encoder.encode(combined);\n\n // Convert to base64\n let binary = '';\n for (let i = 0; i < data.length; i++) {\n binary += String.fromCharCode(data[i]);\n }\n const base64 = btoa(binary);\n\n return `sha256=${base64}`;\n }\n\n /**\n * Generate a random secret\n */\n private generateSecret(): string {\n return `whsec_${Array.from({ length: 32 }, () => Math.random().toString(36).charAt(2)).join('')}`;\n }\n\n /**\n * Convert database row to Webhook object\n */\n private rowToWebhook(row: any): Webhook {\n return {\n id: row.id,\n userId: row.user_id,\n url: row.url,\n events: JSON.parse(row.events),\n secret: row.secret,\n isActive: row.is_active === 1,\n description: row.description,\n headers: row.headers ? JSON.parse(row.headers) : undefined,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n };\n }\n}\n", "/**\n * Full-text search manager using SQLite FTS5\n * Handles search index creation, updating, and querying\n */\n\nexport interface SearchIndex {\n entity: string;\n columns: string[]; // Columns to index\n tokenize?: string; // Tokenizer: 'porter', 'unicode61', 'ascii'\n prefix?: number[]; // Prefix lengths for autocomplete (e.g., [2, 3])\n contentless?: boolean; // If true, don't store content (smaller index)\n}\n\nexport interface SearchQuery {\n entity: string;\n query: string;\n columns?: string[]; // Specific columns to search\n limit?: number;\n offset?: number;\n highlight?: boolean; // Return highlighted snippets\n rank?: boolean; // Use BM25 ranking\n}\n\nexport interface SearchResult {\n id: string;\n rank?: number; // BM25 rank score\n snippet?: string; // Highlighted snippet\n [key: string]: any; // Full record data\n}\n\nexport interface SearchResponse {\n results: SearchResult[];\n total: number;\n hasMore: boolean;\n}\n\nexport interface SearchDatabase {\n run(sql: string, params: any[]): Promise<any>;\n getOne(sql: string, params: any[]): Promise<any>;\n getAll(sql: string, params: any[]): Promise<any[]>;\n}\n\n/**\n * Search manager for full-text search\n */\nexport class SearchManager {\n private db: SearchDatabase;\n private indexes: Map<string, SearchIndex> = new Map();\n\n constructor(db: SearchDatabase) {\n this.db = db;\n }\n\n /**\n * Register a search index for an entity\n */\n registerIndex(index: SearchIndex): void {\n this.indexes.set(index.entity, index);\n }\n\n /**\n * Create FTS5 virtual table for an entity\n */\n async createSearchIndex(entity: string): Promise<void> {\n const index = this.indexes.get(entity);\n if (!index) {\n throw new Error(`No search index configured for entity: ${entity}`);\n }\n\n const ftsTableName = `${entity}_fts`;\n\n // Build FTS5 options\n const ftsOptions: string[] = [];\n\n // Add columns\n ftsOptions.push(...index.columns);\n\n // Add tokenizer\n if (index.tokenize) {\n ftsOptions.push(`tokenize='${index.tokenize}'`);\n } else {\n ftsOptions.push(`tokenize='porter unicode61'`); // Default: porter stemming + unicode\n }\n\n // Add prefix indexes for autocomplete\n if (index.prefix && index.prefix.length > 0) {\n ftsOptions.push(`prefix='${index.prefix.join(' ')}'`);\n }\n\n // Contentless option (smaller index, no snippet support)\n if (index.contentless) {\n ftsOptions.push(`content=''`);\n } else {\n ftsOptions.push(`content='${entity}'`);\n }\n\n // Create FTS5 virtual table\n const createSQL = `CREATE VIRTUAL TABLE IF NOT EXISTS ${ftsTableName} USING fts5(${ftsOptions.join(', ')})`;\n await this.db.run(createSQL, []);\n\n // Create triggers to keep FTS index in sync with main table\n await this.createSyncTriggers(entity, index);\n }\n\n /**\n * Create triggers to automatically update FTS index\n */\n private async createSyncTriggers(entity: string, index: SearchIndex): Promise<void> {\n const ftsTableName = `${entity}_fts`;\n const columns = index.columns.join(', ');\n const columnValues = index.columns.map((col) => `NEW.${col}`).join(', ');\n\n // Insert trigger\n await this.db.run(\n `CREATE TRIGGER IF NOT EXISTS ${entity}_fts_insert\n AFTER INSERT ON ${entity}\n BEGIN\n INSERT INTO ${ftsTableName} (rowid, ${columns})\n VALUES (NEW.rowid, ${columnValues});\n END`,\n []\n );\n\n // Update trigger\n await this.db.run(\n `CREATE TRIGGER IF NOT EXISTS ${entity}_fts_update\n AFTER UPDATE ON ${entity}\n BEGIN\n UPDATE ${ftsTableName}\n SET ${index.columns.map((col) => `${col} = NEW.${col}`).join(', ')}\n WHERE rowid = NEW.rowid;\n END`,\n []\n );\n\n // Delete trigger\n await this.db.run(\n `CREATE TRIGGER IF NOT EXISTS ${entity}_fts_delete\n AFTER DELETE ON ${entity}\n BEGIN\n DELETE FROM ${ftsTableName} WHERE rowid = OLD.rowid;\n END`,\n []\n );\n }\n\n /**\n * Rebuild search index from scratch\n */\n async rebuildIndex(entity: string): Promise<number> {\n const index = this.indexes.get(entity);\n if (!index) {\n throw new Error(`No search index configured for entity: ${entity}`);\n }\n\n const ftsTableName = `${entity}_fts`;\n\n // Clear existing FTS data\n await this.db.run(`DELETE FROM ${ftsTableName}`, []);\n\n // Rebuild from main table\n const columns = index.columns.join(', ');\n const insertSQL = `\n INSERT INTO ${ftsTableName} (rowid, ${columns})\n SELECT rowid, ${columns} FROM ${entity}\n `;\n await this.db.run(insertSQL, []);\n\n // Get count\n const result = await this.db.getOne(`SELECT COUNT(*) as count FROM ${ftsTableName}`, []);\n return result?.count || 0;\n }\n\n /**\n * Search for records\n */\n async search(query: SearchQuery): Promise<SearchResponse> {\n const index = this.indexes.get(query.entity);\n if (!index) {\n throw new Error(`No search index configured for entity: ${query.entity}`);\n }\n\n const ftsTableName = `${query.entity}_fts`;\n const limit = query.limit || 20;\n const offset = query.offset || 0;\n\n // Build FTS5 query\n const ftsQuery = this.buildFTSQuery(query.query, query.columns);\n\n // Build SQL with optional ranking and highlighting\n let sql = `\n SELECT\n ${query.entity}.id,\n ${query.entity}.*\n `;\n\n if (query.rank) {\n sql += `, ${ftsTableName}.rank as _rank`;\n }\n\n if (query.highlight) {\n // Use snippet function for highlighting\n const snippetColumns = (query.columns || index.columns).map((col) => {\n return `snippet(${ftsTableName}, ${index.columns.indexOf(col)}, '<mark>', '</mark>', '...', 32)`;\n });\n sql += `, ${snippetColumns[0]} as _snippet`;\n }\n\n sql += `\n FROM ${ftsTableName}\n JOIN ${query.entity} ON ${ftsTableName}.rowid = ${query.entity}.rowid\n WHERE ${ftsTableName} MATCH ?\n `;\n\n if (query.rank) {\n sql += ` ORDER BY ${ftsTableName}.rank`;\n }\n\n sql += ` LIMIT ? OFFSET ?`;\n\n const results = await this.db.getAll(sql, [ftsQuery, limit + 1, offset]);\n\n // Check if there are more results\n const hasMore = results.length > limit;\n const trimmedResults = hasMore ? results.slice(0, limit) : results;\n\n // Get total count\n const countSQL = `\n SELECT COUNT(*) as total\n FROM ${ftsTableName}\n WHERE ${ftsTableName} MATCH ?\n `;\n const countResult = await this.db.getOne(countSQL, [ftsQuery]);\n const total = countResult?.total || 0;\n\n // Format results\n const formattedResults: SearchResult[] = trimmedResults.map((row) => {\n const result: SearchResult = {\n id: row.id,\n };\n\n if (query.rank) {\n result.rank = row._rank;\n }\n\n if (query.highlight) {\n result.snippet = row._snippet;\n }\n\n // Add all other columns\n for (const key in row) {\n if (key !== '_rank' && key !== '_snippet' && key !== 'rowid') {\n result[key] = row[key];\n }\n }\n\n return result;\n });\n\n return {\n results: formattedResults,\n total,\n hasMore,\n };\n }\n\n /**\n * Build FTS5 query string from user query\n */\n private buildFTSQuery(query: string, columns?: string[]): string {\n // Escape special FTS5 characters\n let escapedQuery = query.replace(/[\"']/g, '');\n\n // If specific columns are specified, use column filter\n if (columns && columns.length > 0) {\n const columnQueries = columns.map((col) => `${col}:${escapedQuery}`);\n return columnQueries.join(' OR ');\n }\n\n // Support phrase queries (quoted strings)\n if (query.includes('\"')) {\n return query;\n }\n\n // Support prefix matching with *\n if (!query.endsWith('*')) {\n const words = escapedQuery.split(/\\s+/).filter((w) => w.length > 0);\n // Add prefix matching to last word for autocomplete\n if (words.length > 0) {\n words[words.length - 1] += '*';\n }\n return words.join(' ');\n }\n\n return escapedQuery;\n }\n\n /**\n * Delete search index\n */\n async deleteSearchIndex(entity: string): Promise<void> {\n const ftsTableName = `${entity}_fts`;\n\n // Drop triggers\n await this.db.run(`DROP TRIGGER IF EXISTS ${entity}_fts_insert`, []);\n await this.db.run(`DROP TRIGGER IF EXISTS ${entity}_fts_update`, []);\n await this.db.run(`DROP TRIGGER IF EXISTS ${entity}_fts_delete`, []);\n\n // Drop FTS table\n await this.db.run(`DROP TABLE IF EXISTS ${ftsTableName}`, []);\n\n // Remove from registered indexes\n this.indexes.delete(entity);\n }\n\n /**\n * Optimize search index (FTS5 optimize)\n */\n async optimizeIndex(entity: string): Promise<void> {\n const ftsTableName = `${entity}_fts`;\n await this.db.run(`INSERT INTO ${ftsTableName}(${ftsTableName}) VALUES('optimize')`, []);\n }\n\n /**\n * Get search index statistics\n */\n async getIndexStats(entity: string): Promise<{\n entity: string;\n documentCount: number;\n indexSize: number;\n }> {\n const ftsTableName = `${entity}_fts`;\n\n const countResult = await this.db.getOne(`SELECT COUNT(*) as count FROM ${ftsTableName}`, []);\n const documentCount = countResult?.count || 0;\n\n // Get index size (approximate)\n const sizeResult = await this.db.getOne(\n `SELECT page_count * page_size as size FROM pragma_page_count('${ftsTableName}'), pragma_page_size()`,\n []\n );\n const indexSize = sizeResult?.size || 0;\n\n return {\n entity,\n documentCount,\n indexSize,\n };\n }\n\n /**\n * Get all registered indexes\n */\n getRegisteredIndexes(): SearchIndex[] {\n return Array.from(this.indexes.values());\n }\n\n /**\n * Check if an entity has a search index\n */\n hasIndex(entity: string): boolean {\n return this.indexes.has(entity);\n }\n}\n", "/**\n * Audit trail manager for change tracking and compliance\n * Tracks all data changes with user attribution and timestamps\n */\n\nimport type { User } from '@edgebasejs/types';\n\nexport interface AuditLog {\n id: string;\n userId: string;\n entity: string;\n recordId: string;\n operation: 'create' | 'update' | 'delete';\n before?: Record<string, any>; // Data before change (for update/delete)\n after?: Record<string, any>; // Data after change (for create/update)\n changes?: Array<{\n field: string;\n before: any;\n after: any;\n }>; // Detailed field-level changes\n metadata?: Record<string, any>; // Additional context (IP, user agent, etc.)\n createdAt: number;\n}\n\nexport interface AuditQuery {\n entity?: string;\n recordId?: string;\n userId?: string;\n operation?: 'create' | 'update' | 'delete';\n startDate?: number;\n endDate?: number;\n limit?: number;\n offset?: number;\n}\n\nexport interface AuditResponse {\n logs: AuditLog[];\n total: number;\n hasMore: boolean;\n}\n\nexport interface AuditDatabase {\n run(sql: string, params: any[]): Promise<any>;\n getOne(sql: string, params: any[]): Promise<any>;\n getAll(sql: string, params: any[]): Promise<any[]>;\n}\n\nexport interface AuditOptions {\n trackBefore?: boolean; // Store data before change (default: true for update/delete)\n trackAfter?: boolean; // Store data after change (default: true for create/update)\n trackChanges?: boolean; // Calculate field-level changes (default: true)\n excludeFields?: string[]; // Fields to exclude from audit (e.g., passwords)\n maxRetentionDays?: number; // Auto-delete logs older than this (default: 90 days)\n}\n\n/**\n * Audit manager for tracking data changes\n */\nexport class AuditManager {\n private db: AuditDatabase;\n private options: Required<AuditOptions>;\n\n constructor(db: AuditDatabase, options?: AuditOptions) {\n this.db = db;\n this.options = {\n trackBefore: options?.trackBefore !== false,\n trackAfter: options?.trackAfter !== false,\n trackChanges: options?.trackChanges !== false,\n excludeFields: options?.excludeFields || ['password', 'password_hash', 'secret', 'token'],\n maxRetentionDays: options?.maxRetentionDays || 90,\n };\n }\n\n /**\n * Log a data change\n */\n async logChange(\n user: User,\n entity: string,\n recordId: string,\n operation: 'create' | 'update' | 'delete',\n before?: Record<string, any>,\n after?: Record<string, any>,\n metadata?: Record<string, any>\n ): Promise<AuditLog> {\n const now = Date.now();\n const auditId = `aud_${now}_${Math.random().toString(36).substring(2, 15)}`;\n\n // Filter sensitive fields\n const filteredBefore = before ? this.filterSensitiveFields(before) : undefined;\n const filteredAfter = after ? this.filterSensitiveFields(after) : undefined;\n\n // Calculate field-level changes for updates\n let changes: Array<{ field: string; before: any; after: any }> | undefined;\n if (this.options.trackChanges && operation === 'update' && filteredBefore && filteredAfter) {\n changes = this.calculateChanges(filteredBefore, filteredAfter);\n }\n\n const auditLog: AuditLog = {\n id: auditId,\n userId: user.id,\n entity,\n recordId,\n operation,\n before: this.options.trackBefore && (operation === 'update' || operation === 'delete') ? filteredBefore : undefined,\n after: this.options.trackAfter && (operation === 'create' || operation === 'update') ? filteredAfter : undefined,\n changes,\n metadata,\n createdAt: now,\n };\n\n // Store in database\n await this.db.run(\n `INSERT INTO audit_logs (id, user_id, entity, record_id, operation, before_data, after_data, changes, metadata, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n auditLog.id,\n auditLog.userId,\n auditLog.entity,\n auditLog.recordId,\n auditLog.operation,\n auditLog.before ? JSON.stringify(auditLog.before) : null,\n auditLog.after ? JSON.stringify(auditLog.after) : null,\n auditLog.changes ? JSON.stringify(auditLog.changes) : null,\n auditLog.metadata ? JSON.stringify(auditLog.metadata) : null,\n auditLog.createdAt,\n ]\n );\n\n return auditLog;\n }\n\n /**\n * Query audit logs\n */\n async queryLogs(query: AuditQuery): Promise<AuditResponse> {\n const limit = query.limit || 50;\n const offset = query.offset || 0;\n\n // Build WHERE clause\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (query.entity) {\n conditions.push('entity = ?');\n params.push(query.entity);\n }\n\n if (query.recordId) {\n conditions.push('record_id = ?');\n params.push(query.recordId);\n }\n\n if (query.userId) {\n conditions.push('user_id = ?');\n params.push(query.userId);\n }\n\n if (query.operation) {\n conditions.push('operation = ?');\n params.push(query.operation);\n }\n\n if (query.startDate) {\n conditions.push('created_at >= ?');\n params.push(query.startDate);\n }\n\n if (query.endDate) {\n conditions.push('created_at <= ?');\n params.push(query.endDate);\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Get logs\n const sql = `\n SELECT * FROM audit_logs\n ${whereClause}\n ORDER BY created_at DESC\n LIMIT ? OFFSET ?\n `;\n const rows = await this.db.getAll(sql, [...params, limit + 1, offset]);\n\n // Check if there are more results\n const hasMore = rows.length > limit;\n const trimmedRows = hasMore ? rows.slice(0, limit) : rows;\n\n // Get total count\n const countSql = `SELECT COUNT(*) as total FROM audit_logs ${whereClause}`;\n const countResult = await this.db.getOne(countSql, params);\n const total = countResult?.total || 0;\n\n // Parse JSON fields\n const logs: AuditLog[] = trimmedRows.map((row) => ({\n id: row.id,\n userId: row.user_id,\n entity: row.entity,\n recordId: row.record_id,\n operation: row.operation,\n before: row.before_data ? JSON.parse(row.before_data) : undefined,\n after: row.after_data ? JSON.parse(row.after_data) : undefined,\n changes: row.changes ? JSON.parse(row.changes) : undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: row.created_at,\n }));\n\n return {\n logs,\n total,\n hasMore,\n };\n }\n\n /**\n * Get audit log by ID\n */\n async getLog(auditId: string): Promise<AuditLog | null> {\n const row = await this.db.getOne('SELECT * FROM audit_logs WHERE id = ?', [auditId]);\n\n if (!row) {\n return null;\n }\n\n return {\n id: row.id,\n userId: row.user_id,\n entity: row.entity,\n recordId: row.record_id,\n operation: row.operation,\n before: row.before_data ? JSON.parse(row.before_data) : undefined,\n after: row.after_data ? JSON.parse(row.after_data) : undefined,\n changes: row.changes ? JSON.parse(row.changes) : undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: row.created_at,\n };\n }\n\n /**\n * Get audit history for a specific record\n */\n async getRecordHistory(entity: string, recordId: string): Promise<AuditLog[]> {\n const rows = await this.db.getAll(\n 'SELECT * FROM audit_logs WHERE entity = ? AND record_id = ? ORDER BY created_at DESC',\n [entity, recordId]\n );\n\n return rows.map((row) => ({\n id: row.id,\n userId: row.user_id,\n entity: row.entity,\n recordId: row.record_id,\n operation: row.operation,\n before: row.before_data ? JSON.parse(row.before_data) : undefined,\n after: row.after_data ? JSON.parse(row.after_data) : undefined,\n changes: row.changes ? JSON.parse(row.changes) : undefined,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n createdAt: row.created_at,\n }));\n }\n\n /**\n * Get summary statistics for audit logs\n */\n async getStatistics(options?: {\n entity?: string;\n userId?: string;\n startDate?: number;\n endDate?: number;\n }): Promise<{\n totalChanges: number;\n changesByOperation: { operation: string; count: number }[];\n changesByEntity: { entity: string; count: number }[];\n changesByUser: { userId: string; count: number }[];\n }> {\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (options?.entity) {\n conditions.push('entity = ?');\n params.push(options.entity);\n }\n\n if (options?.userId) {\n conditions.push('user_id = ?');\n params.push(options.userId);\n }\n\n if (options?.startDate) {\n conditions.push('created_at >= ?');\n params.push(options.startDate);\n }\n\n if (options?.endDate) {\n conditions.push('created_at <= ?');\n params.push(options.endDate);\n }\n\n const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n\n // Total changes\n const totalResult = await this.db.getOne(`SELECT COUNT(*) as total FROM audit_logs ${whereClause}`, params);\n const totalChanges = totalResult?.total || 0;\n\n // Changes by operation\n const operationRows = await this.db.getAll(\n `SELECT operation, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY operation`,\n params\n );\n const changesByOperation = operationRows.map((row) => ({\n operation: row.operation,\n count: row.count,\n }));\n\n // Changes by entity\n const entityRows = await this.db.getAll(\n `SELECT entity, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY entity ORDER BY count DESC LIMIT 10`,\n params\n );\n const changesByEntity = entityRows.map((row) => ({\n entity: row.entity,\n count: row.count,\n }));\n\n // Changes by user\n const userRows = await this.db.getAll(\n `SELECT user_id, COUNT(*) as count FROM audit_logs ${whereClause} GROUP BY user_id ORDER BY count DESC LIMIT 10`,\n params\n );\n const changesByUser = userRows.map((row) => ({\n userId: row.user_id,\n count: row.count,\n }));\n\n return {\n totalChanges,\n changesByOperation,\n changesByEntity,\n changesByUser,\n };\n }\n\n /**\n * Clean up old audit logs based on retention policy\n */\n async cleanupOldLogs(): Promise<number> {\n const cutoffDate = Date.now() - this.options.maxRetentionDays * 24 * 60 * 60 * 1000;\n\n const result = await this.db.getOne('SELECT COUNT(*) as count FROM audit_logs WHERE created_at < ?', [cutoffDate]);\n const count = result?.count || 0;\n\n if (count > 0) {\n await this.db.run('DELETE FROM audit_logs WHERE created_at < ?', [cutoffDate]);\n }\n\n return count;\n }\n\n /**\n * Filter sensitive fields from data\n */\n private filterSensitiveFields(data: Record<string, any>): Record<string, any> {\n const filtered: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(data)) {\n if (!this.options.excludeFields.includes(key.toLowerCase())) {\n filtered[key] = value;\n }\n }\n\n return filtered;\n }\n\n /**\n * Calculate field-level changes between before and after states\n */\n private calculateChanges(\n before: Record<string, any>,\n after: Record<string, any>\n ): Array<{ field: string; before: any; after: any }> {\n const changes: Array<{ field: string; before: any; after: any }> = [];\n\n // Check for changed and new fields\n for (const [field, afterValue] of Object.entries(after)) {\n const beforeValue = before[field];\n\n // Compare values (handle different types)\n if (JSON.stringify(beforeValue) !== JSON.stringify(afterValue)) {\n changes.push({ field, before: beforeValue, after: afterValue });\n }\n }\n\n // Check for deleted fields\n for (const field of Object.keys(before)) {\n if (!(field in after)) {\n changes.push({ field, before: before[field], after: undefined });\n }\n }\n\n return changes;\n }\n}\n", "/**\n * Encryption manager for field-level data encryption\n * Handles encryption/decryption of sensitive fields at rest\n */\n\nexport interface EncryptionConfig {\n entity: string;\n fields: string[]; // Fields to encrypt\n algorithm?: 'AES-GCM' | 'AES-CBC'; // Default: AES-GCM\n keyRotation?: boolean; // Support key rotation\n}\n\nexport interface EncryptedValue {\n ciphertext: string; // Base64 encoded encrypted data\n iv: string; // Base64 encoded initialization vector\n algorithm: string;\n keyVersion?: number; // For key rotation\n}\n\nexport interface EncryptionKey {\n id: string;\n key: CryptoKey;\n version: number;\n algorithm: string;\n createdAt: number;\n}\n\n/**\n * Encryption manager for field-level encryption\n */\nexport class EncryptionManager {\n private configs: Map<string, EncryptionConfig> = new Map();\n private currentKey: EncryptionKey | null = null;\n private keyHistory: Map<number, EncryptionKey> = new Map();\n\n constructor() {}\n\n /**\n * Register encryption configuration for an entity\n */\n registerConfig(config: EncryptionConfig): void {\n this.configs.set(config.entity, config);\n }\n\n /**\n * Get encryption configuration for an entity\n */\n getConfig(entity: string): EncryptionConfig | undefined {\n return this.configs.get(entity);\n }\n\n /**\n * Initialize encryption key from master key\n */\n async initializeKey(masterKey: string, version: number = 1): Promise<void> {\n const algorithm = 'AES-GCM';\n\n // Derive key from master key using PBKDF2\n const keyMaterial = await this.deriveKeyMaterial(masterKey);\n const cryptoKey = await crypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: new TextEncoder().encode('edgebase-salt-v1'), // In production, use unique salt\n iterations: 100000,\n hash: 'SHA-256',\n },\n keyMaterial,\n { name: 'AES-GCM', length: 256 },\n false, // Not extractable\n ['encrypt', 'decrypt']\n );\n\n const encryptionKey: EncryptionKey = {\n id: `key_${version}_${Date.now()}`,\n key: cryptoKey,\n version,\n algorithm,\n createdAt: Date.now(),\n };\n\n this.currentKey = encryptionKey;\n this.keyHistory.set(version, encryptionKey);\n }\n\n /**\n * Rotate encryption key (for key rotation support)\n */\n async rotateKey(newMasterKey: string): Promise<void> {\n const newVersion = this.currentKey ? this.currentKey.version + 1 : 1;\n await this.initializeKey(newMasterKey, newVersion);\n }\n\n /**\n * Encrypt a value\n */\n async encrypt(value: any): Promise<EncryptedValue> {\n if (!this.currentKey) {\n throw new Error('Encryption key not initialized');\n }\n\n // Convert value to string\n const plaintext = typeof value === 'string' ? value : JSON.stringify(value);\n const plaintextBytes = new TextEncoder().encode(plaintext);\n\n // Generate random IV\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 12 bytes for GCM\n\n // Encrypt\n const ciphertextBuffer = await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n this.currentKey.key,\n plaintextBytes\n );\n\n const ciphertext = this.arrayBufferToBase64(ciphertextBuffer);\n const ivBase64 = this.arrayBufferToBase64(iv);\n\n return {\n ciphertext,\n iv: ivBase64,\n algorithm: this.currentKey.algorithm,\n keyVersion: this.currentKey.version,\n };\n }\n\n /**\n * Decrypt a value\n */\n async decrypt(encrypted: EncryptedValue): Promise<any> {\n // Get appropriate key for decryption (supports key rotation)\n const key = encrypted.keyVersion\n ? this.keyHistory.get(encrypted.keyVersion)\n : this.currentKey;\n\n if (!key) {\n throw new Error(`Encryption key for version ${encrypted.keyVersion} not found`);\n }\n\n // Decode base64\n const ciphertextBuffer = this.base64ToArrayBuffer(encrypted.ciphertext);\n const iv = this.base64ToArrayBuffer(encrypted.iv);\n\n // Decrypt\n const plaintextBuffer = await crypto.subtle.decrypt(\n {\n name: encrypted.algorithm,\n iv: iv as BufferSource,\n },\n key.key,\n ciphertextBuffer as BufferSource\n );\n\n const plaintext = new TextDecoder().decode(plaintextBuffer);\n\n // Try to parse as JSON (for objects/arrays)\n try {\n return JSON.parse(plaintext);\n } catch {\n return plaintext;\n }\n }\n\n /**\n * Encrypt fields in a record based on entity configuration\n */\n async encryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>> {\n const config = this.configs.get(entity);\n if (!config) {\n return record; // No encryption config\n }\n\n const encrypted: Record<string, any> = { ...record };\n\n for (const field of config.fields) {\n if (field in record && record[field] !== null && record[field] !== undefined) {\n // Encrypt the field\n const encryptedValue = await this.encrypt(record[field]);\n\n // Store as JSON string\n encrypted[field] = JSON.stringify(encryptedValue);\n }\n }\n\n return encrypted;\n }\n\n /**\n * Decrypt fields in a record based on entity configuration\n */\n async decryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>> {\n const config = this.configs.get(entity);\n if (!config) {\n return record; // No encryption config\n }\n\n const decrypted: Record<string, any> = { ...record };\n\n for (const field of config.fields) {\n if (field in record && record[field] !== null && record[field] !== undefined) {\n try {\n // Parse encrypted value\n const encryptedValue: EncryptedValue = typeof record[field] === 'string'\n ? JSON.parse(record[field])\n : record[field];\n\n // Check if it's actually encrypted (has ciphertext and iv)\n if (encryptedValue.ciphertext && encryptedValue.iv) {\n // Decrypt the field\n decrypted[field] = await this.decrypt(encryptedValue);\n }\n } catch (error) {\n console.error(`Failed to decrypt field ${field}:`, error);\n // Keep original value if decryption fails\n }\n }\n }\n\n return decrypted;\n }\n\n /**\n * Check if a field should be encrypted\n */\n shouldEncrypt(entity: string, field: string): boolean {\n const config = this.configs.get(entity);\n return config ? config.fields.includes(field) : false;\n }\n\n /**\n * Get all encrypted fields for an entity\n */\n getEncryptedFields(entity: string): string[] {\n const config = this.configs.get(entity);\n return config ? config.fields : [];\n }\n\n /**\n * Re-encrypt a record with a new key (for key rotation)\n */\n async reencryptRecord(entity: string, record: Record<string, any>): Promise<Record<string, any>> {\n // First decrypt with old keys\n const decrypted = await this.decryptRecord(entity, record);\n\n // Then encrypt with current key\n return await this.encryptRecord(entity, decrypted);\n }\n\n /**\n * Derive key material from master key\n */\n private async deriveKeyMaterial(masterKey: string): Promise<CryptoKey> {\n const keyBytes = new TextEncoder().encode(masterKey);\n return await crypto.subtle.importKey(\n 'raw',\n keyBytes,\n 'PBKDF2',\n false,\n ['deriveKey']\n );\n }\n\n /**\n * Convert ArrayBuffer to Base64\n */\n private arrayBufferToBase64(buffer: ArrayBuffer | Uint8Array): string {\n const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n /**\n * Convert Base64 to ArrayBuffer\n */\n private base64ToArrayBuffer(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n\n /**\n * Clear all encryption keys (security)\n */\n clear(): void {\n this.currentKey = null;\n this.keyHistory.clear();\n }\n}\n\n/**\n * Global encryption manager instance\n */\nexport const encryptionManager = new EncryptionManager();\n", "/**\n * Push notification manager for sending notifications to users\n * Supports Web Push and mobile push notifications\n */\n\nimport type { SyncDatabase } from '../sync/sync-engine';\nimport type { User } from '@edgebasejs/types';\n\nexport interface PushToken {\n id: string;\n userId: string;\n token: string;\n platform: 'web' | 'ios' | 'android' | 'expo';\n endpoint?: string; // For web push\n keys?: {\n p256dh?: string;\n auth?: string;\n };\n deviceName?: string;\n createdAt: number;\n lastUsedAt: number;\n}\n\nexport interface PushNotification {\n id: string;\n userId: string;\n title: string;\n body: string;\n data?: Record<string, any>;\n icon?: string;\n badge?: string;\n image?: string;\n tag?: string;\n requireInteraction?: boolean;\n actions?: Array<{\n action: string;\n title: string;\n icon?: string;\n }>;\n status: 'pending' | 'sent' | 'failed';\n sentAt?: number;\n failedReason?: string;\n createdAt: number;\n}\n\nexport interface SendNotificationOptions {\n userId: string;\n title: string;\n body: string;\n data?: Record<string, any>;\n icon?: string;\n badge?: string;\n image?: string;\n tag?: string;\n requireInteraction?: boolean;\n actions?: Array<{\n action: string;\n title: string;\n icon?: string;\n }>;\n targetPlatforms?: Array<'web' | 'ios' | 'android' | 'expo'>;\n}\n\nexport interface BroadcastNotificationOptions {\n title: string;\n body: string;\n data?: Record<string, any>;\n icon?: string;\n badge?: string;\n image?: string;\n userIds?: string[]; // If specified, only send to these users\n targetPlatforms?: Array<'web' | 'ios' | 'android' | 'expo'>;\n}\n\n/**\n * Push Notification Manager\n */\nexport class PushNotificationManager {\n private db: SyncDatabase;\n private vapidPublicKey?: string;\n private vapidPrivateKey?: string;\n private fcmServerKey?: string; // For Android/iOS via FCM\n\n constructor(\n db: SyncDatabase,\n options?: {\n vapidPublicKey?: string;\n vapidPrivateKey?: string;\n fcmServerKey?: string;\n }\n ) {\n this.db = db;\n this.vapidPublicKey = options?.vapidPublicKey;\n this.vapidPrivateKey = options?.vapidPrivateKey;\n this.fcmServerKey = options?.fcmServerKey;\n }\n\n /**\n * Register a push token for a user\n */\n async registerToken(\n userId: string,\n token: string,\n platform: 'web' | 'ios' | 'android' | 'expo',\n options?: {\n endpoint?: string;\n keys?: { p256dh?: string; auth?: string };\n deviceName?: string;\n }\n ): Promise<PushToken> {\n const now = Date.now();\n const tokenId = `token_${userId}_${platform}_${now}_${Math.random().toString(36).substring(2, 9)}`;\n\n // Check if token already exists\n const existing = await this.db.getOne(\n 'SELECT id FROM push_tokens WHERE user_id = ? AND token = ? AND platform = ?',\n [userId, token, platform]\n );\n\n if (existing) {\n // Update last used timestamp\n await this.db.run('UPDATE push_tokens SET last_used_at = ? WHERE id = ?', [now, existing.id]);\n\n return {\n id: existing.id as string,\n userId,\n token,\n platform,\n endpoint: options?.endpoint,\n keys: options?.keys,\n deviceName: options?.deviceName,\n createdAt: (existing as any).created_at,\n lastUsedAt: now,\n };\n }\n\n // Insert new token\n await this.db.run(\n `INSERT INTO push_tokens (id, user_id, token, platform, endpoint, keys, device_name, created_at, last_used_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n tokenId,\n userId,\n token,\n platform,\n options?.endpoint || null,\n options?.keys ? JSON.stringify(options.keys) : null,\n options?.deviceName || null,\n now,\n now,\n ]\n );\n\n return {\n id: tokenId,\n userId,\n token,\n platform,\n endpoint: options?.endpoint,\n keys: options?.keys,\n deviceName: options?.deviceName,\n createdAt: now,\n lastUsedAt: now,\n };\n }\n\n /**\n * Unregister a push token\n */\n async unregisterToken(tokenId: string, userId: string): Promise<void> {\n await this.db.run('DELETE FROM push_tokens WHERE id = ? AND user_id = ?', [tokenId, userId]);\n }\n\n /**\n * Get all tokens for a user\n */\n async getUserTokens(userId: string): Promise<PushToken[]> {\n const rows = await this.db.getAll('SELECT * FROM push_tokens WHERE user_id = ?', [userId]);\n\n return rows.map((row: any) => ({\n id: row.id,\n userId: row.user_id,\n token: row.token,\n platform: row.platform,\n endpoint: row.endpoint,\n keys: row.keys ? JSON.parse(row.keys) : undefined,\n deviceName: row.device_name,\n createdAt: row.created_at,\n lastUsedAt: row.last_used_at,\n }));\n }\n\n /**\n * Send a push notification to a user\n */\n async sendNotification(options: SendNotificationOptions): Promise<PushNotification> {\n const now = Date.now();\n const notificationId = `notif_${options.userId}_${now}_${Math.random().toString(36).substring(2, 9)}`;\n\n // Get user's push tokens\n let tokens = await this.getUserTokens(options.userId);\n\n // Filter by target platforms if specified\n if (options.targetPlatforms && options.targetPlatforms.length > 0) {\n tokens = tokens.filter((token) => options.targetPlatforms!.includes(token.platform));\n }\n\n if (tokens.length === 0) {\n // No tokens available\n const notification: PushNotification = {\n id: notificationId,\n userId: options.userId,\n title: options.title,\n body: options.body,\n data: options.data,\n icon: options.icon,\n badge: options.badge,\n image: options.image,\n tag: options.tag,\n requireInteraction: options.requireInteraction,\n actions: options.actions,\n status: 'failed',\n failedReason: 'No push tokens registered for user',\n createdAt: now,\n };\n\n await this.saveNotification(notification);\n return notification;\n }\n\n // Store notification\n const notification: PushNotification = {\n id: notificationId,\n userId: options.userId,\n title: options.title,\n body: options.body,\n data: options.data,\n icon: options.icon,\n badge: options.badge,\n image: options.image,\n tag: options.tag,\n requireInteraction: options.requireInteraction,\n actions: options.actions,\n status: 'pending',\n createdAt: now,\n };\n\n await this.saveNotification(notification);\n\n // Send to all tokens\n let sentCount = 0;\n const errors: string[] = [];\n\n for (const token of tokens) {\n try {\n if (token.platform === 'web') {\n await this.sendWebPush(token, notification);\n } else if (token.platform === 'expo') {\n await this.sendExpoPush(token, notification);\n } else {\n await this.sendMobilePush(token, notification);\n }\n sentCount++;\n } catch (error) {\n console.error(`Failed to send push to token ${token.id}:`, error);\n errors.push(error instanceof Error ? error.message : 'Unknown error');\n }\n }\n\n // Update notification status\n if (sentCount > 0) {\n notification.status = 'sent';\n notification.sentAt = Date.now();\n } else {\n notification.status = 'failed';\n notification.failedReason = errors.join('; ');\n }\n\n await this.updateNotificationStatus(notification);\n\n return notification;\n }\n\n /**\n * Broadcast notification to multiple users\n */\n async broadcastNotification(options: BroadcastNotificationOptions): Promise<{\n sent: number;\n failed: number;\n notificationIds: string[];\n }> {\n let userIds: string[] = [];\n\n if (options.userIds && options.userIds.length > 0) {\n userIds = options.userIds;\n } else {\n // Get all users\n const users = await this.db.getAll('SELECT id FROM users', []);\n userIds = users.map((u: any) => u.id);\n }\n\n const results = {\n sent: 0,\n failed: 0,\n notificationIds: [] as string[],\n };\n\n for (const userId of userIds) {\n try {\n const notification = await this.sendNotification({\n userId,\n title: options.title,\n body: options.body,\n data: options.data,\n icon: options.icon,\n badge: options.badge,\n image: options.image,\n targetPlatforms: options.targetPlatforms,\n });\n\n results.notificationIds.push(notification.id);\n\n if (notification.status === 'sent') {\n results.sent++;\n } else {\n results.failed++;\n }\n } catch (error) {\n console.error(`Failed to send notification to user ${userId}:`, error);\n results.failed++;\n }\n }\n\n return results;\n }\n\n /**\n * Get notification history for a user\n */\n async getUserNotifications(userId: string, limit: number = 50): Promise<PushNotification[]> {\n const rows = await this.db.getAll(\n 'SELECT * FROM push_notifications WHERE user_id = ? ORDER BY created_at DESC LIMIT ?',\n [userId, limit]\n );\n\n return rows.map((row: any) => ({\n id: row.id,\n userId: row.user_id,\n title: row.title,\n body: row.body,\n data: row.data ? JSON.parse(row.data) : undefined,\n icon: row.icon,\n badge: row.badge,\n image: row.image,\n tag: row.tag,\n requireInteraction: row.require_interaction === 1,\n actions: row.actions ? JSON.parse(row.actions) : undefined,\n status: row.status,\n sentAt: row.sent_at,\n failedReason: row.failed_reason,\n createdAt: row.created_at,\n }));\n }\n\n /**\n * Send web push notification\n */\n private async sendWebPush(token: PushToken, notification: PushNotification): Promise<void> {\n if (!this.vapidPublicKey || !this.vapidPrivateKey) {\n throw new Error('VAPID keys not configured for web push');\n }\n\n if (!token.endpoint || !token.keys) {\n throw new Error('Invalid web push token - missing endpoint or keys');\n }\n\n // Note: In production, you would use the web-push library or similar\n // For now, this is a placeholder that would need actual implementation\n console.log('Would send web push to:', token.endpoint);\n console.log('Notification:', notification);\n\n // TODO: Implement actual web push using web-push library or Cloudflare's built-in features\n }\n\n /**\n * Send mobile push notification via FCM\n */\n private async sendMobilePush(token: PushToken, notification: PushNotification): Promise<void> {\n if (!this.fcmServerKey) {\n throw new Error('FCM server key not configured for mobile push');\n }\n\n const payload = {\n to: token.token,\n notification: {\n title: notification.title,\n body: notification.body,\n icon: notification.icon,\n badge: notification.badge,\n image: notification.image,\n tag: notification.tag,\n },\n data: notification.data,\n };\n\n // Send to FCM\n const response = await fetch('https://fcm.googleapis.com/fcm/send', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `key=${this.fcmServerKey}`,\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.text();\n throw new Error(`FCM request failed: ${errorData}`);\n }\n }\n\n /**\n * Send Expo push notification\n */\n private async sendExpoPush(token: PushToken, notification: PushNotification): Promise<void> {\n const payload = {\n to: token.token,\n title: notification.title,\n body: notification.body,\n data: notification.data,\n sound: 'default',\n };\n\n const response = await fetch('https://exp.host/--/api/v2/push/send', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorData = await response.text();\n throw new Error(`Expo push request failed: ${errorData}`);\n }\n\n const result = (await response.json()) as {\n data?: { status?: string; message?: string } | Array<{ status?: string; message?: string }>;\n };\n const data = Array.isArray(result.data) ? result.data[0] : result.data;\n if (data?.status && data.status !== 'ok') {\n throw new Error(data?.message || 'Expo push request failed');\n }\n }\n\n /**\n * Save notification to database\n */\n private async saveNotification(notification: PushNotification): Promise<void> {\n await this.db.run(\n `INSERT INTO push_notifications (id, user_id, title, body, data, icon, badge, image, tag, require_interaction, actions, status, sent_at, failed_reason, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n notification.id,\n notification.userId,\n notification.title,\n notification.body,\n notification.data ? JSON.stringify(notification.data) : null,\n notification.icon || null,\n notification.badge || null,\n notification.image || null,\n notification.tag || null,\n notification.requireInteraction ? 1 : 0,\n notification.actions ? JSON.stringify(notification.actions) : null,\n notification.status,\n notification.sentAt || null,\n notification.failedReason || null,\n notification.createdAt,\n ]\n );\n }\n\n /**\n * Update notification status\n */\n private async updateNotificationStatus(notification: PushNotification): Promise<void> {\n await this.db.run(\n 'UPDATE push_notifications SET status = ?, sent_at = ?, failed_reason = ? WHERE id = ?',\n [notification.status, notification.sentAt || null, notification.failedReason || null, notification.id]\n );\n }\n\n /**\n * Get notification statistics\n */\n async getStatistics(userId?: string): Promise<{\n total: number;\n sent: number;\n failed: number;\n pending: number;\n }> {\n let query = 'SELECT status, COUNT(*) as count FROM push_notifications';\n const params: any[] = [];\n\n if (userId) {\n query += ' WHERE user_id = ?';\n params.push(userId);\n }\n\n query += ' GROUP BY status';\n\n const rows = await this.db.getAll(query, params);\n\n const stats = {\n total: 0,\n sent: 0,\n failed: 0,\n pending: 0,\n };\n\n for (const row of rows) {\n const status = (row as any).status;\n const count = (row as any).count;\n stats.total += count;\n\n if (status === 'sent') stats.sent = count;\n else if (status === 'failed') stats.failed = count;\n else if (status === 'pending') stats.pending = count;\n }\n\n return stats;\n }\n}\n", "/**\n * Analytics manager for tracking usage metrics and statistics\n */\n\nimport type { SyncDatabase } from '../sync/sync-engine';\nimport type { User } from '@edgebasejs/types';\n\nexport type MetricType =\n | 'api_call'\n | 'sync_operation'\n | 'entity_access'\n | 'user_action'\n | 'error'\n | 'performance';\n\nexport interface AnalyticsMetric {\n id: string;\n metricType: MetricType;\n metricName: string;\n value: number;\n userId?: string;\n entity?: string;\n metadata?: Record<string, any>;\n timestamp: number;\n date: string; // YYYY-MM-DD for easy aggregation\n}\n\nexport interface TrackMetricOptions {\n metricType: MetricType;\n metricName: string;\n value?: number;\n userId?: string;\n entity?: string;\n metadata?: Record<string, any>;\n}\n\nexport interface AnalyticsQuery {\n metricType?: MetricType;\n metricName?: string;\n userId?: string;\n entity?: string;\n startDate?: string; // YYYY-MM-DD\n endDate?: string; // YYYY-MM-DD\n groupBy?: 'day' | 'hour' | 'metricName' | 'userId' | 'entity';\n limit?: number;\n}\n\nexport interface AggregatedMetric {\n key: string;\n count: number;\n total: number;\n average: number;\n min: number;\n max: number;\n}\n\nexport interface UsageStats {\n totalApiCalls: number;\n totalUsers: number;\n activeUsers: number;\n totalSyncOperations: number;\n totalErrors: number;\n avgResponseTime: number;\n topEntities: Array<{ entity: string; accessCount: number }>;\n topUsers: Array<{ userId: string; actionCount: number }>;\n dailyActiveUsers: Array<{ date: string; count: number }>;\n errorRate: number;\n}\n\n/**\n * Analytics Manager\n */\nexport class AnalyticsManager {\n private db: SyncDatabase;\n\n constructor(db: SyncDatabase) {\n this.db = db;\n }\n\n /**\n * Track a metric\n */\n async trackMetric(options: TrackMetricOptions): Promise<AnalyticsMetric> {\n const now = Date.now();\n const metricId = `metric_${options.metricType}_${now}_${Math.random().toString(36).substring(2, 9)}`;\n const date = new Date(now).toISOString().split('T')[0]; // YYYY-MM-DD\n\n const metric: AnalyticsMetric = {\n id: metricId,\n metricType: options.metricType,\n metricName: options.metricName,\n value: options.value || 1,\n userId: options.userId,\n entity: options.entity,\n metadata: options.metadata,\n timestamp: now,\n date,\n };\n\n await this.db.run(\n `INSERT INTO usage_analytics (id, metric_type, metric_name, value, user_id, entity, metadata, timestamp, date)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n [\n metric.id,\n metric.metricType,\n metric.metricName,\n metric.value,\n metric.userId || null,\n metric.entity || null,\n metric.metadata ? JSON.stringify(metric.metadata) : null,\n metric.timestamp,\n metric.date,\n ]\n );\n\n return metric;\n }\n\n /**\n * Track an API call\n */\n async trackApiCall(\n endpoint: string,\n method: string,\n statusCode: number,\n responseTime: number,\n userId?: string\n ): Promise<void> {\n await this.trackMetric({\n metricType: 'api_call',\n metricName: `${method} ${endpoint}`,\n value: responseTime,\n userId,\n metadata: {\n endpoint,\n method,\n statusCode,\n responseTime,\n },\n });\n }\n\n /**\n * Track a sync operation\n */\n async trackSyncOperation(\n operation: 'sync' | 'batch' | 'transaction',\n changeCount: number,\n userId: string,\n entity?: string\n ): Promise<void> {\n await this.trackMetric({\n metricType: 'sync_operation',\n metricName: operation,\n value: changeCount,\n userId,\n entity,\n metadata: {\n operation,\n changeCount,\n },\n });\n }\n\n /**\n * Track entity access\n */\n async trackEntityAccess(entity: string, operation: string, userId: string): Promise<void> {\n await this.trackMetric({\n metricType: 'entity_access',\n metricName: `${entity}.${operation}`,\n userId,\n entity,\n metadata: {\n entity,\n operation,\n },\n });\n }\n\n /**\n * Track user action\n */\n async trackUserAction(action: string, userId: string, metadata?: Record<string, any>): Promise<void> {\n await this.trackMetric({\n metricType: 'user_action',\n metricName: action,\n userId,\n metadata,\n });\n }\n\n /**\n * Track error\n */\n async trackError(error: string, code: string, userId?: string, entity?: string): Promise<void> {\n await this.trackMetric({\n metricType: 'error',\n metricName: code,\n userId,\n entity,\n metadata: {\n error,\n code,\n },\n });\n }\n\n /**\n * Track performance metric\n */\n async trackPerformance(\n metricName: string,\n value: number,\n userId?: string,\n metadata?: Record<string, any>\n ): Promise<void> {\n await this.trackMetric({\n metricType: 'performance',\n metricName,\n value,\n userId,\n metadata,\n });\n }\n\n /**\n * Query metrics\n */\n async queryMetrics(query: AnalyticsQuery): Promise<AnalyticsMetric[]> {\n const whereClauses: string[] = [];\n const params: any[] = [];\n\n if (query.metricType) {\n whereClauses.push('metric_type = ?');\n params.push(query.metricType);\n }\n\n if (query.metricName) {\n whereClauses.push('metric_name = ?');\n params.push(query.metricName);\n }\n\n if (query.userId) {\n whereClauses.push('user_id = ?');\n params.push(query.userId);\n }\n\n if (query.entity) {\n whereClauses.push('entity = ?');\n params.push(query.entity);\n }\n\n if (query.startDate) {\n whereClauses.push('date >= ?');\n params.push(query.startDate);\n }\n\n if (query.endDate) {\n whereClauses.push('date <= ?');\n params.push(query.endDate);\n }\n\n let sql = 'SELECT * FROM usage_analytics';\n\n if (whereClauses.length > 0) {\n sql += ' WHERE ' + whereClauses.join(' AND ');\n }\n\n sql += ' ORDER BY timestamp DESC';\n\n if (query.limit) {\n sql += ' LIMIT ?';\n params.push(query.limit);\n }\n\n const rows = await this.db.getAll(sql, params);\n\n return rows.map((row: any) => ({\n id: row.id,\n metricType: row.metric_type,\n metricName: row.metric_name,\n value: row.value,\n userId: row.user_id,\n entity: row.entity,\n metadata: row.metadata ? JSON.parse(row.metadata) : undefined,\n timestamp: row.timestamp,\n date: row.date,\n }));\n }\n\n /**\n * Get aggregated metrics\n */\n async getAggregatedMetrics(query: AnalyticsQuery): Promise<AggregatedMetric[]> {\n const whereClauses: string[] = [];\n const params: any[] = [];\n\n if (query.metricType) {\n whereClauses.push('metric_type = ?');\n params.push(query.metricType);\n }\n\n if (query.metricName) {\n whereClauses.push('metric_name = ?');\n params.push(query.metricName);\n }\n\n if (query.userId) {\n whereClauses.push('user_id = ?');\n params.push(query.userId);\n }\n\n if (query.entity) {\n whereClauses.push('entity = ?');\n params.push(query.entity);\n }\n\n if (query.startDate) {\n whereClauses.push('date >= ?');\n params.push(query.startDate);\n }\n\n if (query.endDate) {\n whereClauses.push('date <= ?');\n params.push(query.endDate);\n }\n\n let groupByField = 'metric_name';\n if (query.groupBy === 'day') groupByField = 'date';\n else if (query.groupBy === 'userId') groupByField = 'user_id';\n else if (query.groupBy === 'entity') groupByField = 'entity';\n\n let sql = `SELECT\n ${groupByField} as key,\n COUNT(*) as count,\n SUM(value) as total,\n AVG(value) as average,\n MIN(value) as min,\n MAX(value) as max\n FROM usage_analytics`;\n\n if (whereClauses.length > 0) {\n sql += ' WHERE ' + whereClauses.join(' AND ');\n }\n\n sql += ` GROUP BY ${groupByField} ORDER BY count DESC`;\n\n if (query.limit) {\n sql += ' LIMIT ?';\n params.push(query.limit);\n }\n\n const rows = await this.db.getAll(sql, params);\n\n return rows.map((row: any) => ({\n key: row.key || 'unknown',\n count: row.count,\n total: row.total,\n average: row.average,\n min: row.min,\n max: row.max,\n }));\n }\n\n /**\n * Get comprehensive usage statistics\n */\n async getUsageStats(startDate?: string, endDate?: string): Promise<UsageStats> {\n const whereClauses: string[] = [];\n const params: any[] = [];\n\n if (startDate) {\n whereClauses.push('date >= ?');\n params.push(startDate);\n }\n\n if (endDate) {\n whereClauses.push('date <= ?');\n params.push(endDate);\n }\n\n const whereClause = whereClauses.length > 0 ? ' WHERE ' + whereClauses.join(' AND ') : '';\n\n // Total API calls\n const apiCallsResult = await this.db.getOne(\n `SELECT COUNT(*) as count FROM usage_analytics ${whereClause} AND metric_type = 'api_call'`,\n params\n );\n const totalApiCalls = (apiCallsResult as any)?.count || 0;\n\n // Total users\n const totalUsersResult = await this.db.getOne('SELECT COUNT(*) as count FROM users', []);\n const totalUsers = (totalUsersResult as any)?.count || 0;\n\n // Active users (users who made an API call in the time range)\n const activeUsersResult = await this.db.getOne(\n `SELECT COUNT(DISTINCT user_id) as count FROM usage_analytics ${whereClause}`,\n params\n );\n const activeUsers = (activeUsersResult as any)?.count || 0;\n\n // Total sync operations\n const syncOpsResult = await this.db.getOne(\n `SELECT COUNT(*) as count FROM usage_analytics ${whereClause} AND metric_type = 'sync_operation'`,\n params\n );\n const totalSyncOperations = (syncOpsResult as any)?.count || 0;\n\n // Total errors\n const errorsResult = await this.db.getOne(\n `SELECT COUNT(*) as count FROM usage_analytics ${whereClause} AND metric_type = 'error'`,\n params\n );\n const totalErrors = (errorsResult as any)?.count || 0;\n\n // Average response time\n const avgResponseTimeResult = await this.db.getOne(\n `SELECT AVG(value) as avg FROM usage_analytics ${whereClause} AND metric_type = 'api_call'`,\n params\n );\n const avgResponseTime = (avgResponseTimeResult as any)?.avg || 0;\n\n // Top entities\n const topEntitiesRows = await this.db.getAll(\n `SELECT entity, COUNT(*) as count FROM usage_analytics ${whereClause} AND entity IS NOT NULL GROUP BY entity ORDER BY count DESC LIMIT 10`,\n params\n );\n const topEntities = topEntitiesRows.map((row: any) => ({\n entity: row.entity,\n accessCount: row.count,\n }));\n\n // Top users\n const topUsersRows = await this.db.getAll(\n `SELECT user_id, COUNT(*) as count FROM usage_analytics ${whereClause} AND user_id IS NOT NULL GROUP BY user_id ORDER BY count DESC LIMIT 10`,\n params\n );\n const topUsers = topUsersRows.map((row: any) => ({\n userId: row.user_id,\n actionCount: row.count,\n }));\n\n // Daily active users\n const dauRows = await this.db.getAll(\n `SELECT date, COUNT(DISTINCT user_id) as count FROM usage_analytics ${whereClause} GROUP BY date ORDER BY date DESC LIMIT 30`,\n params\n );\n const dailyActiveUsers = dauRows.map((row: any) => ({\n date: row.date,\n count: row.count,\n }));\n\n // Error rate\n const errorRate = totalApiCalls > 0 ? (totalErrors / totalApiCalls) * 100 : 0;\n\n return {\n totalApiCalls,\n totalUsers,\n activeUsers,\n totalSyncOperations,\n totalErrors,\n avgResponseTime,\n topEntities,\n topUsers,\n dailyActiveUsers,\n errorRate,\n };\n }\n\n /**\n * Clean up old analytics data\n */\n async cleanup(daysToKeep: number = 90): Promise<number> {\n const cutoffDate = new Date();\n cutoffDate.setDate(cutoffDate.getDate() - daysToKeep);\n const cutoffDateStr = cutoffDate.toISOString().split('T')[0];\n\n const result = await this.db.run('DELETE FROM usage_analytics WHERE date < ?', [cutoffDateStr]);\n\n return (result as any).changes || 0;\n }\n}\n", "import type { SyncDatabase } from '@edgebasejs/core';\n\n/**\n * D1 database adapter that implements the SyncDatabase interface\n * for use with Cloudflare Workers D1 database\n */\nexport class D1SyncDatabase implements SyncDatabase {\n constructor(private db: D1Database) {}\n\n /**\n * Get a single row from the database\n */\n async getOne(sql: string, params: any[]): Promise<any> {\n return this.db.prepare(sql).bind(...params).first();\n }\n\n /**\n * Get all matching rows from the database\n */\n async getAll(sql: string, params: any[]): Promise<any[]> {\n const result = await this.db.prepare(sql).bind(...params).all();\n return result.results || [];\n }\n\n /**\n * Execute a SQL statement that doesn't return rows\n */\n async run(sql: string, params: any[]): Promise<any> {\n return this.db.prepare(sql).bind(...params).run();\n }\n\n /**\n * Execute multiple SQL statements in a batch transaction\n */\n async batch(statements: Array<{ sql: string; params?: any[] }>): Promise<any[]> {\n const prepared = statements.map(stmt =>\n this.db.prepare(stmt.sql).bind(...(stmt.params || []))\n );\n return this.db.batch(prepared);\n }\n}\n", "import type { DatabaseSchema, EntitySchema, FieldType } from '@edgebasejs/types';\n\n/**\n * Generate SQL for system tables (users, refresh_tokens, sync_metadata, subscriptions, subscription_filters)\n */\nexport function generateSystemTables(): string[] {\n return [\n `CREATE TABLE IF NOT EXISTS admins (\n id TEXT PRIMARY KEY,\n email TEXT NOT NULL UNIQUE,\n password_hash TEXT NOT NULL,\n role TEXT NOT NULL,\n is_active INTEGER NOT NULL DEFAULT 1,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n )`,\n `CREATE TABLE IF NOT EXISTS admin_refresh_tokens (\n id TEXT PRIMARY KEY,\n admin_id TEXT NOT NULL,\n token TEXT NOT NULL UNIQUE,\n expires_at INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (admin_id) REFERENCES admins(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n email TEXT NOT NULL UNIQUE,\n password_hash TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n )`,\n `CREATE TABLE IF NOT EXISTS refresh_tokens (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n token TEXT NOT NULL UNIQUE,\n expires_at INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS sync_metadata (\n entity TEXT NOT NULL,\n record_id TEXT NOT NULL,\n version INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n deleted_at INTEGER,\n PRIMARY KEY (entity, record_id)\n )`,\n `CREATE TABLE IF NOT EXISTS subscriptions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n entity TEXT NOT NULL,\n connection_id TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n last_heartbeat INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS subscription_filters (\n id TEXT PRIMARY KEY,\n subscription_id TEXT NOT NULL,\n filter_key TEXT NOT NULL,\n filter_value TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (subscription_id) REFERENCES subscriptions(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS transactions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n status TEXT NOT NULL,\n isolation_level TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n expires_at INTEGER NOT NULL,\n completed_at INTEGER,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS transaction_changes (\n id TEXT PRIMARY KEY,\n transaction_id TEXT NOT NULL,\n entity TEXT NOT NULL,\n record_id TEXT NOT NULL,\n operation TEXT NOT NULL,\n data TEXT NOT NULL,\n version INTEGER,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS column_permissions (\n id TEXT PRIMARY KEY,\n entity TEXT NOT NULL,\n column_name TEXT NOT NULL,\n role TEXT,\n visible INTEGER DEFAULT 1,\n readable INTEGER DEFAULT 1,\n writable INTEGER DEFAULT 1,\n encrypted INTEGER DEFAULT 0,\n mask_value TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n UNIQUE(entity, column_name, role)\n )`,\n `CREATE TABLE IF NOT EXISTS files (\n id TEXT PRIMARY KEY,\n key TEXT NOT NULL UNIQUE,\n file_name TEXT NOT NULL,\n mime_type TEXT NOT NULL,\n size INTEGER NOT NULL,\n user_id TEXT NOT NULL,\n bucket TEXT NOT NULL,\n entity_type TEXT,\n entity_id TEXT,\n is_public INTEGER DEFAULT 0,\n uploaded_at INTEGER NOT NULL,\n expires_at INTEGER,\n checksum TEXT\n )`,\n `CREATE TABLE IF NOT EXISTS file_access_tokens (\n token TEXT PRIMARY KEY,\n file_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n expires_at INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS webhooks (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n url TEXT NOT NULL,\n events TEXT NOT NULL,\n secret TEXT NOT NULL,\n is_active INTEGER DEFAULT 1,\n description TEXT,\n headers TEXT,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS webhook_events (\n id TEXT PRIMARY KEY,\n webhook_id TEXT NOT NULL,\n event_type TEXT NOT NULL,\n payload TEXT NOT NULL,\n signature TEXT NOT NULL,\n attempts INTEGER DEFAULT 0,\n max_attempts INTEGER DEFAULT 5,\n next_retry_at INTEGER,\n delivered_at INTEGER,\n failed_at INTEGER,\n error TEXT,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (webhook_id) REFERENCES webhooks(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS webhook_deliveries (\n id TEXT PRIMARY KEY,\n webhook_id TEXT NOT NULL,\n event_id TEXT NOT NULL,\n url TEXT NOT NULL,\n event_type TEXT NOT NULL,\n status_code INTEGER,\n response_body TEXT,\n error TEXT,\n duration INTEGER NOT NULL,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (webhook_id) REFERENCES webhooks(id) ON DELETE CASCADE,\n FOREIGN KEY (event_id) REFERENCES webhook_events(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS audit_logs (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n entity TEXT NOT NULL,\n record_id TEXT NOT NULL,\n operation TEXT NOT NULL,\n before_data TEXT,\n after_data TEXT,\n changes TEXT,\n metadata TEXT,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE INDEX IF NOT EXISTS idx_sync_metadata_updated ON sync_metadata(entity, updated_at)`,\n `CREATE INDEX IF NOT EXISTS idx_admin_refresh_tokens_admin ON admin_refresh_tokens(admin_id)`,\n `CREATE INDEX IF NOT EXISTS idx_admin_refresh_tokens_token ON admin_refresh_tokens(token)`,\n `CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user ON refresh_tokens(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token ON refresh_tokens(token)`,\n `CREATE INDEX IF NOT EXISTS idx_subscriptions_user ON subscriptions(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_subscriptions_entity ON subscriptions(entity)`,\n `CREATE INDEX IF NOT EXISTS idx_subscriptions_connection ON subscriptions(connection_id)`,\n `CREATE INDEX IF NOT EXISTS idx_subscription_filters_subscription ON subscription_filters(subscription_id)`,\n `CREATE INDEX IF NOT EXISTS idx_transactions_user ON transactions(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_transactions_status ON transactions(status)`,\n `CREATE INDEX IF NOT EXISTS idx_transaction_changes_transaction ON transaction_changes(transaction_id)`,\n `CREATE INDEX IF NOT EXISTS idx_transaction_changes_entity ON transaction_changes(entity, record_id)`,\n `CREATE INDEX IF NOT EXISTS idx_column_permissions_entity ON column_permissions(entity)`,\n `CREATE INDEX IF NOT EXISTS idx_column_permissions_entity_column ON column_permissions(entity, column_name)`,\n `CREATE INDEX IF NOT EXISTS idx_files_user ON files(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_files_entity ON files(entity_type, entity_id)`,\n `CREATE INDEX IF NOT EXISTS idx_files_expires ON files(expires_at)`,\n `CREATE INDEX IF NOT EXISTS idx_file_access_tokens_file ON file_access_tokens(file_id)`,\n `CREATE INDEX IF NOT EXISTS idx_file_access_tokens_expires ON file_access_tokens(expires_at)`,\n `CREATE INDEX IF NOT EXISTS idx_webhooks_user ON webhooks(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_webhooks_active ON webhooks(is_active)`,\n `CREATE INDEX IF NOT EXISTS idx_webhook_events_webhook ON webhook_events(webhook_id)`,\n `CREATE INDEX IF NOT EXISTS idx_webhook_events_status ON webhook_events(delivered_at, failed_at, next_retry_at)`,\n `CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_webhook ON webhook_deliveries(webhook_id)`,\n `CREATE INDEX IF NOT EXISTS idx_webhook_deliveries_event ON webhook_deliveries(event_id)`,\n `CREATE INDEX IF NOT EXISTS idx_audit_logs_user ON audit_logs(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_audit_logs_entity ON audit_logs(entity)`,\n `CREATE INDEX IF NOT EXISTS idx_audit_logs_record ON audit_logs(entity, record_id)`,\n `CREATE INDEX IF NOT EXISTS idx_audit_logs_created ON audit_logs(created_at)`,\n `CREATE INDEX IF NOT EXISTS idx_audit_logs_operation ON audit_logs(operation)`,\n `CREATE TABLE IF NOT EXISTS push_tokens (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n token TEXT NOT NULL,\n platform TEXT NOT NULL,\n endpoint TEXT,\n keys TEXT,\n device_name TEXT,\n created_at INTEGER NOT NULL,\n last_used_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,\n UNIQUE(user_id, token, platform)\n )`,\n `CREATE TABLE IF NOT EXISTS push_notifications (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n title TEXT NOT NULL,\n body TEXT NOT NULL,\n data TEXT,\n icon TEXT,\n badge TEXT,\n image TEXT,\n tag TEXT,\n require_interaction INTEGER DEFAULT 0,\n actions TEXT,\n status TEXT NOT NULL,\n sent_at INTEGER,\n failed_reason TEXT,\n created_at INTEGER NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n )`,\n `CREATE TABLE IF NOT EXISTS usage_analytics (\n id TEXT PRIMARY KEY,\n metric_type TEXT NOT NULL,\n metric_name TEXT NOT NULL,\n value INTEGER NOT NULL,\n user_id TEXT,\n entity TEXT,\n metadata TEXT,\n timestamp INTEGER NOT NULL,\n date TEXT NOT NULL\n )`,\n `CREATE INDEX IF NOT EXISTS idx_push_tokens_user ON push_tokens(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_push_tokens_platform ON push_tokens(platform)`,\n `CREATE INDEX IF NOT EXISTS idx_push_notifications_user ON push_notifications(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_push_notifications_status ON push_notifications(status)`,\n `CREATE INDEX IF NOT EXISTS idx_push_notifications_created ON push_notifications(created_at)`,\n `CREATE INDEX IF NOT EXISTS idx_usage_analytics_metric ON usage_analytics(metric_type, metric_name)`,\n `CREATE INDEX IF NOT EXISTS idx_usage_analytics_date ON usage_analytics(date)`,\n `CREATE INDEX IF NOT EXISTS idx_usage_analytics_user ON usage_analytics(user_id)`,\n `CREATE INDEX IF NOT EXISTS idx_usage_analytics_entity ON usage_analytics(entity)`,\n `CREATE INDEX IF NOT EXISTS idx_usage_analytics_timestamp ON usage_analytics(timestamp)`\n ];\n}\n\n/**\n * Map EdgeBase field types to SQLite types\n */\nfunction mapFieldTypeToSQL(fieldType: FieldType): string {\n switch (fieldType.type) {\n case 'string':\n case 'text':\n return 'TEXT';\n case 'integer':\n case 'timestamp':\n return 'INTEGER';\n case 'number':\n return 'REAL';\n case 'boolean':\n return 'INTEGER'; // SQLite uses 0/1 for boolean\n case 'json':\n return 'TEXT'; // Store JSON as text\n case 'reference':\n return 'TEXT'; // Store references as text IDs\n default:\n return 'TEXT';\n }\n}\n\n/**\n * Generate CREATE TABLE SQL for an entity\n */\nexport function generateEntityTable(entityName: string, entitySchema: EntitySchema): string {\n const columns: string[] = [];\n const constraints: string[] = [];\n\n // Add fields from schema\n for (const [fieldName, fieldType] of Object.entries(entitySchema.fields)) {\n const sqlType = mapFieldTypeToSQL(fieldType);\n const parts: string[] = [fieldName, sqlType];\n\n // Primary key\n if (fieldType.primary) {\n parts.push('PRIMARY KEY');\n }\n\n // Required fields\n if (fieldType.required && !fieldType.primary) {\n parts.push('NOT NULL');\n }\n\n // Default values\n if (fieldType.default !== undefined) {\n if (typeof fieldType.default === 'string') {\n parts.push(`DEFAULT '${fieldType.default}'`);\n } else {\n parts.push(`DEFAULT ${fieldType.default}`);\n }\n }\n\n columns.push(parts.join(' '));\n\n // Foreign key constraints\n if (fieldType.type === 'reference' && fieldType.reference) {\n constraints.push(\n `FOREIGN KEY (${fieldName}) REFERENCES ${fieldType.reference}(id) ON DELETE CASCADE`\n );\n }\n }\n\n // Combine columns and constraints\n const allColumns = [...columns, ...constraints].join(',\\n ');\n\n return `CREATE TABLE IF NOT EXISTS ${entityName} (\n ${allColumns}\n )`;\n}\n\n/**\n * Generate CREATE INDEX statements for an entity\n */\nexport function generateEntityIndexes(entityName: string, entitySchema: EntitySchema): string[] {\n if (!entitySchema.indexes || entitySchema.indexes.length === 0) {\n return [];\n }\n\n return entitySchema.indexes.map((index, i) => {\n const indexName = `idx_${entityName}_${index.fields.join('_')}`;\n const unique = index.unique ? 'UNIQUE ' : '';\n const fields = index.fields.join(', ');\n return `CREATE ${unique}INDEX IF NOT EXISTS ${indexName} ON ${entityName}(${fields})`;\n });\n}\n\n/**\n * Initialize database with system tables and entity tables\n */\nexport async function initializeDatabase(\n db: D1Database,\n schema: DatabaseSchema\n): Promise<void> {\n const statements: string[] = [];\n\n // Add system tables\n statements.push(...generateSystemTables());\n\n // Add entity tables\n for (const [entityName, entitySchema] of Object.entries(schema.entities)) {\n statements.push(generateEntityTable(entityName, entitySchema));\n statements.push(...generateEntityIndexes(entityName, entitySchema));\n }\n\n // Execute all statements\n for (const sql of statements) {\n await db.prepare(sql).run();\n }\n}\n", "import { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport {\n ServerSyncEngine,\n hashPassword,\n verifyPassword,\n createJWT,\n parseJWT,\n SubscriptionManager,\n ChangeNotifier,\n TransactionManager,\n BatchProcessor,\n CSVProcessor,\n FileStorageManager,\n WebhookManager,\n SearchManager,\n AuditManager,\n EncryptionManager,\n PushNotificationManager,\n AnalyticsManager,\n type JWTPayload,\n} from '@edgebasejs/core';\nimport { D1SyncDatabase, initializeDatabase } from '@edgebasejs/adapter-d1';\nimport type {\n Admin,\n AdminAuthResponse,\n AdminCreateRequest,\n AdminLoginRequest,\n AuthResponse,\n RefreshTokenRequest,\n SyncRequest,\n User,\n DatabaseSchema,\n EntitySchema,\n} from '@edgebasejs/types';\n\ntype D1DatabaseLike = any;\n\nexport interface EdgeBaseWorkerOptions {\n schema: DatabaseSchema;\n getDb: (c: any) => D1DatabaseLike;\n getJwtSecret: (c: any) => string;\n getR2Bucket?: (c: any) => any; // R2 bucket for file storage\n getEncryptionKey?: (c: any) => string; // Encryption key for field-level encryption\n getEnvironment?: (c: any) => string | undefined;\n cors?: Parameters<typeof cors>[0];\n apiVersion?: string;\n autoInitialize?: boolean | ((c: any) => boolean);\n adminConsole?:\n | boolean\n | {\n enabled: boolean;\n path?: string; // Default: '/admin'\n url?: string; // External admin console URL (for proxying)\n }\n | ((c: any) => {\n enabled: boolean;\n path?: string;\n url?: string;\n });\n}\n\nfunction jsonError(c: any, status: number, error: string, code?: string) {\n return c.json({ error, ...(code ? { code } : {}) }, status);\n}\n\nfunction getBearerToken(c: any): string | null {\n const auth = c.req.header('Authorization');\n if (!auth) {\n return null;\n }\n return auth.replace(/^Bearer\\s+/i, '').trim() || null;\n}\n\nexport function createEdgeBaseWorker(options: EdgeBaseWorkerOptions) {\n const {\n schema,\n getDb,\n getJwtSecret,\n getEnvironment,\n cors: corsOptions,\n apiVersion = '0.1.0',\n autoInitialize = false,\n adminConsole,\n } = options;\n\n const app = new Hono();\n\n app.use('*', cors(corsOptions));\n\n let dbInitialized = false;\n let subscriptionManager: SubscriptionManager | null = null;\n let changeNotifier: ChangeNotifier | null = null;\n let transactionManager: TransactionManager | null = null;\n let webhookManager: WebhookManager | null = null;\n let searchManager: SearchManager | null = null;\n let auditManager: AuditManager | null = null;\n let encryptionManager: EncryptionManager | null = null;\n let pushNotificationManager: PushNotificationManager | null = null;\n let analyticsManager: AnalyticsManager | null = null;\n\n app.use('*', async (c, next) => {\n const shouldAutoInit =\n typeof autoInitialize === 'function' ? autoInitialize(c) : autoInitialize;\n\n if (shouldAutoInit && !dbInitialized) {\n try {\n await initializeDatabase(getDb(c), schema);\n dbInitialized = true;\n\n // Initialize managers\n const db = new D1SyncDatabase(getDb(c));\n subscriptionManager = new SubscriptionManager(db);\n changeNotifier = new ChangeNotifier(subscriptionManager);\n transactionManager = new TransactionManager(db);\n webhookManager = new WebhookManager(db);\n searchManager = new SearchManager(db);\n auditManager = new AuditManager(db);\n encryptionManager = new EncryptionManager();\n pushNotificationManager = new PushNotificationManager(db);\n analyticsManager = new AnalyticsManager(db);\n\n // Initialize encryption key if provided\n const getEncryptionKey = options.getEncryptionKey;\n if (getEncryptionKey) {\n const encryptionKey = getEncryptionKey(c);\n if (encryptionKey) {\n await encryptionManager.initializeKey(encryptionKey);\n }\n }\n\n // Load existing subscriptions from database\n await subscriptionManager.loadFromDatabase();\n } catch (error) {\n console.error('Database initialization error:', error);\n }\n }\n\n await next();\n });\n\n async function requireAccessUser(\n c: any\n ): Promise<{ user: User; payload: JWTPayload } | Response> {\n const token = getBearerToken(c);\n if (!token) {\n return jsonError(c, 401, 'Unauthorized', 'UNAUTHORIZED');\n }\n\n const payload = parseJWT(token);\n if (!payload || payload.type !== 'access') {\n return jsonError(c, 401, 'Invalid token', 'UNAUTHORIZED');\n }\n\n const db = getDb(c);\n const userRow = await db\n .prepare('SELECT id, email, created_at, updated_at FROM users WHERE id = ?')\n .bind(payload.userId)\n .first();\n\n if (!userRow) {\n return jsonError(c, 401, 'User not found', 'UNAUTHORIZED');\n }\n\n const user: User = {\n id: userRow.id as string,\n email: userRow.email as string,\n createdAt: userRow.created_at as number,\n updatedAt: userRow.updated_at as number,\n };\n\n return { user, payload };\n }\n\n async function requireAccessAdmin(\n c: any\n ): Promise<{ admin: Admin; payload: JWTPayload } | Response> {\n const token = getBearerToken(c);\n if (!token) {\n return jsonError(c, 401, 'Unauthorized', 'UNAUTHORIZED');\n }\n\n const payload = parseJWT(token);\n if (!payload || payload.type !== 'access') {\n return jsonError(c, 401, 'Invalid token', 'UNAUTHORIZED');\n }\n\n const db = getDb(c);\n const adminRow = await db\n .prepare('SELECT id, email, role, is_active, created_at, updated_at FROM admins WHERE id = ?')\n .bind(payload.userId)\n .first();\n\n if (!adminRow || !(adminRow.is_active as number)) {\n return jsonError(c, 401, 'Admin not found', 'UNAUTHORIZED');\n }\n\n const admin: Admin = {\n id: adminRow.id as string,\n email: adminRow.email as string,\n role: adminRow.role as Admin['role'],\n isActive: (adminRow.is_active as number) === 1,\n createdAt: adminRow.created_at as number,\n updatedAt: adminRow.updated_at as number,\n };\n\n return { admin, payload };\n }\n\n async function hasAnyAdmin(db: D1DatabaseLike): Promise<boolean> {\n const row = await db.prepare('SELECT id FROM admins LIMIT 1').first();\n return !!row;\n }\n\n async function hasUserId(db: D1DatabaseLike, userId: string): Promise<boolean> {\n const row = await db.prepare('SELECT id FROM users WHERE id = ?').bind(userId).first();\n return !!row;\n }\n\n async function listTables(db: D1DatabaseLike): Promise<string[]> {\n // D1 in production blocks sqlite_master queries with SQLITE_AUTH error\n // Instead, we use the schema information we already have + known system tables\n const entityTables = Object.keys(schema.entities);\n const systemTables = [\n 'admins',\n 'admin_refresh_tokens',\n 'users',\n 'refresh_tokens',\n 'sync_metadata',\n '_cf_KV', // Cloudflare internal table\n ];\n\n // Combine and deduplicate\n const allTables = [...new Set([...entityTables, ...systemTables])];\n\n // Verify which tables actually exist by trying a simple query on each\n const existingTables: string[] = [];\n for (const tableName of allTables) {\n try {\n // Quick check if table exists without querying sqlite_master\n await db.prepare(`SELECT 1 FROM \"${tableName}\" LIMIT 0`).run();\n existingTables.push(tableName);\n } catch (error) {\n // Table doesn't exist or can't be accessed, skip it\n continue;\n }\n }\n\n return existingTables.sort();\n }\n\n function requireValidTableName(tableName: string, allowed: string[]): string | null {\n if (!allowed.includes(tableName)) {\n return null;\n }\n return tableName.replace(/\"/g, '\"\"');\n }\n\n function isEntityTable(tableName: string): boolean {\n return !!schema.entities[tableName];\n }\n\n function getEntityPrimaryKey(tableName: string): string | null {\n const entity = schema.entities[tableName];\n if (!entity) return null;\n const primary = Object.entries(entity.fields).find(([, field]) => field.primary);\n return primary ? primary[0] : 'id';\n }\n\n async function updateSyncMetadata(\n db: D1DatabaseLike,\n entity: string,\n recordId: string,\n deletedAt?: number\n ): Promise<number> {\n const now = Date.now();\n const existing = await db\n .prepare('SELECT version FROM sync_metadata WHERE entity = ? AND record_id = ?')\n .bind(entity, recordId)\n .first();\n const currentVersion = (existing?.version as number) || 0;\n const nextVersion = currentVersion + 1;\n\n if (deletedAt) {\n await db\n .prepare(\n 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at, deleted_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(entity, recordId, nextVersion, now, deletedAt)\n .run();\n } else {\n await db\n .prepare(\n 'INSERT OR REPLACE INTO sync_metadata (entity, record_id, version, updated_at) VALUES (?, ?, ?, ?)'\n )\n .bind(entity, recordId, nextVersion, now)\n .run();\n }\n\n return nextVersion;\n }\n\n async function notifyAdminChange(\n entity: string,\n operation: 'create' | 'update' | 'delete',\n record: Record<string, unknown>,\n recordId: string,\n version?: number\n ): Promise<void> {\n if (!subscriptionManager || !changeNotifier) {\n return;\n }\n\n const subscriptions = subscriptionManager.getSubscriptionsForEntity(entity);\n if (subscriptions.length === 0) {\n return;\n }\n\n const message = {\n type: 'change',\n entity,\n operation,\n record: operation !== 'delete' ? record : undefined,\n recordId,\n timestamp: Date.now(),\n version,\n };\n\n changeNotifier.broadcastToAll(\n message as any,\n subscriptions.map((sub) => sub.subscriptionId)\n );\n }\n\n async function sendTestWebhook(\n db: D1DatabaseLike,\n webhook: {\n id: string;\n url: string;\n events: string[];\n headers?: Record<string, string>;\n },\n payload: Record<string, any>,\n eventType: string\n ): Promise<{ deliveryId: string; statusCode?: number; error?: string }> {\n const now = Date.now();\n const eventId = `evt_${now}_${Math.random().toString(36).substring(2, 9)}`;\n const deliveryId = `del_${now}_${Math.random().toString(36).substring(2, 9)}`;\n\n await db\n .prepare(\n `INSERT INTO webhook_events (id, webhook_id, event_type, payload, signature, attempts, max_attempts, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .bind(eventId, webhook.id, eventType, JSON.stringify(payload), 'test', 0, 1, now)\n .run();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'X-Webhook-Test': 'true',\n ...webhook.headers,\n };\n\n let statusCode: number | undefined;\n let responseBody: string | undefined;\n let errorMessage: string | undefined;\n const startedAt = Date.now();\n\n try {\n const response = await fetch(webhook.url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n event: eventType,\n payload,\n timestamp: now,\n }),\n });\n statusCode = response.status;\n responseBody = await response.text();\n } catch (error) {\n errorMessage = error instanceof Error ? error.message : 'Webhook request failed';\n }\n\n const duration = Date.now() - startedAt;\n\n await db\n .prepare(\n `INSERT INTO webhook_deliveries (id, webhook_id, event_id, url, event_type, status_code, response_body, error, duration, created_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`\n )\n .bind(\n deliveryId,\n webhook.id,\n eventId,\n webhook.url,\n eventType,\n statusCode ?? null,\n responseBody ? responseBody.substring(0, 1000) : null,\n errorMessage || null,\n duration,\n Date.now()\n )\n .run();\n\n if (!statusCode || statusCode >= 400 || errorMessage) {\n await db\n .prepare('UPDATE webhook_events SET failed_at = ?, error = ? WHERE id = ?')\n .bind(Date.now(), errorMessage || `HTTP ${statusCode}`, eventId)\n .run();\n } else {\n await db\n .prepare('UPDATE webhook_events SET delivered_at = ?, attempts = ? WHERE id = ?')\n .bind(Date.now(), 1, eventId)\n .run();\n }\n\n return { deliveryId, statusCode, error: errorMessage };\n }\n\n /**\n * GET /health\n */\n app.get('/health', (c) => {\n return c.json({ status: 'ok', version: apiVersion });\n });\n\n /**\n * GET /info\n */\n app.get('/info', (c) => {\n return c.json({\n name: 'EdgeBase Worker',\n version: apiVersion,\n environment: getEnvironment ? getEnvironment(c) || 'unknown' : 'unknown',\n });\n });\n\n /**\n * POST /auth/register\n */\n app.post('/auth/register', async (c) => {\n try {\n const { email, password } = await c.req.json();\n\n if (!email || !password) {\n return jsonError(c, 400, 'Email and password are required', 'VALIDATION_ERROR');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n // Check if user already exists\n const existing = await db.prepare('SELECT id FROM users WHERE email = ?').bind(email).first();\n\n if (existing) {\n return jsonError(c, 409, 'User already exists', 'CONFLICT');\n }\n\n // Hash password\n const passwordHash = await hashPassword(password);\n\n // Create user\n const userId = `user_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n\n await db\n .prepare(\n 'INSERT INTO users (id, email, password_hash, created_at, updated_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(userId, email, passwordHash, now, now)\n .run();\n\n // Generate tokens\n const accessToken = createJWT({ userId, email, type: 'access' }, jwtSecret, 3600);\n\n const refreshToken = createJWT({ userId, email, type: 'refresh' }, jwtSecret, 604800);\n\n // Store refresh token\n const refreshTokenId = `rt_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n await db\n .prepare(\n 'INSERT INTO refresh_tokens (id, user_id, token, expires_at, created_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(refreshTokenId, userId, refreshToken, now + 604800000, now)\n .run();\n\n const user: User = {\n id: userId,\n email,\n createdAt: now,\n updatedAt: now,\n };\n\n const response: AuthResponse = {\n user,\n tokens: {\n accessToken,\n refreshToken,\n expiresIn: 3600,\n },\n };\n\n return c.json(response, 201);\n } catch (error) {\n console.error('Register error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Registration failed',\n 'VALIDATION_ERROR'\n );\n }\n });\n\n /**\n * POST /auth/login\n */\n app.post('/auth/login', async (c) => {\n try {\n const { email, password } = await c.req.json();\n\n if (!email || !password) {\n return jsonError(c, 400, 'Email and password are required', 'VALIDATION_ERROR');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n // Get user from DB\n const userRow = await db\n .prepare(\n 'SELECT id, email, password_hash, created_at, updated_at FROM users WHERE email = ?'\n )\n .bind(email)\n .first();\n\n if (!userRow) {\n return jsonError(c, 401, 'Invalid credentials', 'UNAUTHORIZED');\n }\n\n // Verify password\n const passwordValid = await verifyPassword(password, userRow.password_hash as string);\n if (!passwordValid) {\n return jsonError(c, 401, 'Invalid credentials', 'UNAUTHORIZED');\n }\n\n // Generate tokens\n const accessToken = createJWT(\n { userId: userRow.id as string, email: userRow.email as string, type: 'access' },\n jwtSecret,\n 3600\n );\n\n const refreshToken = createJWT(\n { userId: userRow.id as string, email: userRow.email as string, type: 'refresh' },\n jwtSecret,\n 604800\n );\n\n // Store refresh token\n const now = Date.now();\n const refreshTokenId = `rt_${now}_${Math.random().toString(36).substr(2, 9)}`;\n await db\n .prepare(\n 'INSERT INTO refresh_tokens (id, user_id, token, expires_at, created_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(refreshTokenId, userRow.id, refreshToken, now + 604800000, now)\n .run();\n\n const user: User = {\n id: userRow.id as string,\n email: userRow.email as string,\n createdAt: userRow.created_at as number,\n updatedAt: userRow.updated_at as number,\n };\n\n const response: AuthResponse = {\n user,\n tokens: {\n accessToken,\n refreshToken,\n expiresIn: 3600,\n },\n };\n\n return c.json(response);\n } catch (error) {\n console.error('Login error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Login failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/auth/login\n */\n app.post('/admin/auth/login', async (c) => {\n try {\n const body: AdminLoginRequest = await c.req.json();\n const { email, password } = body || {};\n\n if (!email || !password) {\n return jsonError(c, 400, 'Email and password are required', 'VALIDATION_ERROR');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n const adminRow = await db\n .prepare(\n 'SELECT id, email, password_hash, role, is_active, created_at, updated_at FROM admins WHERE email = ?'\n )\n .bind(email)\n .first();\n\n if (!adminRow || !(adminRow.is_active as number)) {\n return jsonError(c, 401, 'Invalid credentials', 'UNAUTHORIZED');\n }\n\n const passwordValid = await verifyPassword(password, adminRow.password_hash as string);\n if (!passwordValid) {\n return jsonError(c, 401, 'Invalid credentials', 'UNAUTHORIZED');\n }\n\n const accessToken = createJWT(\n { userId: adminRow.id as string, email: adminRow.email as string, type: 'access' },\n jwtSecret,\n 3600\n );\n\n const refreshToken = createJWT(\n { userId: adminRow.id as string, email: adminRow.email as string, type: 'refresh' },\n jwtSecret,\n 604800\n );\n\n const now = Date.now();\n const refreshTokenId = `art_${now}_${Math.random().toString(36).substr(2, 9)}`;\n await db\n .prepare(\n 'INSERT INTO admin_refresh_tokens (id, admin_id, token, expires_at, created_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(refreshTokenId, adminRow.id, refreshToken, now + 604800000, now)\n .run();\n\n const admin: Admin = {\n id: adminRow.id as string,\n email: adminRow.email as string,\n role: adminRow.role as Admin['role'],\n isActive: (adminRow.is_active as number) === 1,\n createdAt: adminRow.created_at as number,\n updatedAt: adminRow.updated_at as number,\n };\n\n const response: AdminAuthResponse = {\n admin,\n accessToken,\n refreshToken,\n expiresIn: 3600,\n };\n\n return c.json(response);\n } catch (error) {\n console.error('Admin login error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Login failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/auth/register\n * Public route - only allowed when no admin exists yet\n */\n app.post('/admin/auth/register', async (c) => {\n try {\n const body = (await c.req.json()) as Partial<AdminCreateRequest>;\n const { email, password } = body || {};\n\n if (!email || !password) {\n return jsonError(c, 400, 'Email and password are required', 'VALIDATION_ERROR');\n }\n\n if (password.length < 8) {\n return jsonError(c, 400, 'Password must be at least 8 characters', 'VALIDATION_ERROR');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n // Check if any admins already exist to determine role\n const existingAdmins = (await db.prepare('SELECT COUNT(*) as count FROM admins').first()) as {\n count: number;\n } | null;\n\n const isFirstAdmin = !existingAdmins || existingAdmins.count === 0;\n\n if (!isFirstAdmin) {\n return jsonError(\n c,\n 403,\n 'Admin registration is closed. Please sign in with an existing admin.',\n 'FORBIDDEN'\n );\n }\n\n const adminRole: Admin['role'] = 'super_admin';\n\n // Check if email already exists\n const existingAdmin = await db\n .prepare('SELECT id FROM admins WHERE email = ?')\n .bind(email)\n .first();\n\n if (existingAdmin) {\n return jsonError(c, 400, 'Email already exists', 'VALIDATION_ERROR');\n }\n\n // Create new admin\n const now = Date.now();\n const adminId = `admin_${now}_${Math.random().toString(36).substr(2, 9)}`;\n const passwordHash = await hashPassword(password);\n\n await db\n .prepare(\n 'INSERT INTO admins (id, email, password_hash, role, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)'\n )\n .bind(adminId, email, passwordHash, adminRole, 1, now, now)\n .run();\n\n // Generate tokens\n const accessToken = createJWT({ userId: adminId, email, type: 'access' }, jwtSecret, 3600);\n\n const refreshToken = createJWT(\n { userId: adminId, email, type: 'refresh' },\n jwtSecret,\n 604800\n );\n\n const refreshTokenId = `art_${now}_${Math.random().toString(36).substr(2, 9)}`;\n await db\n .prepare(\n 'INSERT INTO admin_refresh_tokens (id, admin_id, token, expires_at, created_at) VALUES (?, ?, ?, ?, ?)'\n )\n .bind(refreshTokenId, adminId, refreshToken, now + 604800000, now)\n .run();\n\n const admin: Admin = {\n id: adminId,\n email,\n role: adminRole,\n isActive: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const response: AdminAuthResponse = {\n admin,\n accessToken,\n refreshToken,\n expiresIn: 3600,\n };\n\n return c.json(response);\n } catch (error) {\n console.error('Admin registration error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Registration failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/auth/refresh\n */\n app.post('/admin/auth/refresh', async (c) => {\n try {\n const body: RefreshTokenRequest = await c.req.json();\n const refreshToken = body?.refreshToken;\n\n if (!refreshToken) {\n return jsonError(c, 400, 'Refresh token is required', 'VALIDATION_ERROR');\n }\n\n const payload = parseJWT(refreshToken);\n if (!payload || payload.type !== 'refresh') {\n return jsonError(c, 401, 'Invalid refresh token', 'UNAUTHORIZED');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n const tokenRow = await db\n .prepare(\n `SELECT r.admin_id, r.expires_at, a.email\n FROM admin_refresh_tokens r\n JOIN admins a ON a.id = r.admin_id\n WHERE r.token = ?`\n )\n .bind(refreshToken)\n .first();\n\n if (!tokenRow) {\n return jsonError(c, 401, 'Invalid refresh token', 'UNAUTHORIZED');\n }\n\n if ((tokenRow.expires_at as number) < Date.now()) {\n await db\n .prepare('DELETE FROM admin_refresh_tokens WHERE token = ?')\n .bind(refreshToken)\n .run();\n return jsonError(c, 401, 'Refresh token expired', 'UNAUTHORIZED');\n }\n\n const accessToken = createJWT(\n { userId: tokenRow.admin_id as string, email: tokenRow.email as string, type: 'access' },\n jwtSecret,\n 3600\n );\n\n return c.json({ accessToken, expiresIn: 3600 });\n } catch (error) {\n console.error('Admin refresh token error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Token refresh failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/auth/logout\n */\n app.post('/admin/auth/logout', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n await db\n .prepare('DELETE FROM admin_refresh_tokens WHERE admin_id = ?')\n .bind(auth.admin.id)\n .run();\n\n return c.json({ message: 'Logged out successfully', adminId: auth.admin.id });\n } catch (error) {\n console.error('Admin logout error:', error);\n return jsonError(c, 500, 'Logout failed', 'API_ERROR');\n }\n });\n\n /**\n * GET /admin/setup-status\n * Public route - used by the admin console bootstrap flow\n */\n app.get('/admin/setup-status', async (c) => {\n try {\n const db = getDb(c);\n const hasAnyAdminAccount = await hasAnyAdmin(db);\n\n return c.json({\n hasAnyAdmin: hasAnyAdminAccount,\n canRegister: !hasAnyAdminAccount,\n });\n } catch (error) {\n console.error('Admin setup status error:', error);\n return jsonError(c, 500, 'Failed to read setup status', 'API_ERROR');\n }\n });\n\n /**\n * GET /admin/admins\n */\n app.get('/admin/admins', async (c) => {\n try {\n const db = getDb(c);\n const anyAdmin = await hasAnyAdmin(db);\n if (!anyAdmin) {\n return c.json([]);\n }\n\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const rows = await db\n .prepare('SELECT id, email, role, is_active, created_at, updated_at FROM admins')\n .all();\n\n const admins: Admin[] = (rows?.results || []).map((row: any) => ({\n id: row.id as string,\n email: row.email as string,\n role: row.role as Admin['role'],\n isActive: (row.is_active as number) === 1,\n createdAt: row.created_at as number,\n updatedAt: row.updated_at as number,\n }));\n\n return c.json(admins);\n } catch (error) {\n console.error('Admin list error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch admins',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/admins\n */\n app.post('/admin/admins', async (c) => {\n try {\n const db = getDb(c);\n const anyAdmin = await hasAnyAdmin(db);\n\n if (anyAdmin) {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n if (auth.admin.role !== 'super_admin') {\n return jsonError(c, 403, 'Insufficient permissions', 'FORBIDDEN');\n }\n }\n\n const body: AdminCreateRequest = await c.req.json();\n const { email, password, role } = body || {};\n\n if (!email || !password || !role) {\n return jsonError(c, 400, 'Email, password, and role are required', 'VALIDATION_ERROR');\n }\n\n const existing = await db\n .prepare('SELECT id FROM admins WHERE email = ?')\n .bind(email)\n .first();\n if (existing) {\n return jsonError(c, 409, 'Admin already exists', 'CONFLICT');\n }\n\n const passwordHash = await hashPassword(password);\n const adminId = `admin_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n\n await db\n .prepare(\n 'INSERT INTO admins (id, email, password_hash, role, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)'\n )\n .bind(adminId, email, passwordHash, role, 1, now, now)\n .run();\n\n const admin: Admin = {\n id: adminId,\n email,\n role,\n isActive: true,\n createdAt: now,\n updatedAt: now,\n };\n\n return c.json(admin, 201);\n } catch (error) {\n console.error('Admin create error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Admin creation failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/users\n */\n app.get('/admin/users', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const page = Math.max(parseInt(c.req.query('page') || '1', 10), 1);\n const pageSize = Math.min(Math.max(parseInt(c.req.query('pageSize') || '20', 10), 1), 100);\n const search = c.req.query('search');\n const offset = (page - 1) * pageSize;\n\n const params: any[] = [];\n let whereClause = '';\n if (search) {\n whereClause = 'WHERE email LIKE ?';\n params.push(`%${search}%`);\n }\n\n const countRow = await db\n .prepare(`SELECT COUNT(*) as total FROM users ${whereClause}`)\n .bind(...params)\n .first();\n const total = (countRow?.total as number) || 0;\n\n const usersResult = await db\n .prepare(\n `SELECT id, email, created_at, updated_at FROM users ${whereClause} ORDER BY created_at DESC LIMIT ? OFFSET ?`\n )\n .bind(...params, pageSize, offset)\n .all();\n\n const data: User[] = (usersResult?.results || []).map((row: any) => ({\n id: row.id as string,\n email: row.email as string,\n createdAt: row.created_at as number,\n updatedAt: row.updated_at as number,\n }));\n\n return c.json({\n data,\n pagination: {\n page,\n pageSize,\n total,\n totalPages: Math.ceil(total / pageSize) || 1,\n },\n });\n } catch (error) {\n console.error('Admin users list error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch users',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/users/:id\n */\n app.get('/admin/users/:id', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n const row = await db\n .prepare('SELECT id, email, created_at, updated_at FROM users WHERE id = ?')\n .bind(userId)\n .first();\n\n if (!row) {\n return jsonError(c, 404, 'User not found', 'NOT_FOUND');\n }\n\n return c.json({\n id: row.id as string,\n email: row.email as string,\n createdAt: row.created_at as number,\n updatedAt: row.updated_at as number,\n });\n } catch (error) {\n console.error('Admin get user error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch user',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * PATCH /admin/users/:id\n */\n app.patch('/admin/users/:id', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n const updates = await c.req.json();\n\n const fields: string[] = [];\n const values: any[] = [];\n\n if (typeof updates.email === 'string' && updates.email.trim()) {\n fields.push('email = ?');\n values.push(updates.email.trim());\n }\n\n if (fields.length === 0) {\n return jsonError(c, 400, 'No valid fields to update', 'VALIDATION_ERROR');\n }\n\n fields.push('updated_at = ?');\n values.push(Date.now());\n\n await db\n .prepare(`UPDATE users SET ${fields.join(', ')} WHERE id = ?`)\n .bind(...values, userId)\n .run();\n\n const row = await db\n .prepare('SELECT id, email, created_at, updated_at FROM users WHERE id = ?')\n .bind(userId)\n .first();\n\n if (!row) {\n return jsonError(c, 404, 'User not found', 'NOT_FOUND');\n }\n\n return c.json({\n id: row.id as string,\n email: row.email as string,\n createdAt: row.created_at as number,\n updatedAt: row.updated_at as number,\n });\n } catch (error) {\n console.error('Admin update user error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to update user',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/users/:id\n */\n app.delete('/admin/users/:id', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n\n const existing = await db.prepare('SELECT id FROM users WHERE id = ?').bind(userId).first();\n if (!existing) {\n return jsonError(c, 404, 'User not found', 'NOT_FOUND');\n }\n\n await db.prepare('DELETE FROM users WHERE id = ?').bind(userId).run();\n\n return c.json({ success: true, message: 'User deleted' });\n } catch (error) {\n console.error('Admin delete user error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to delete user',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/users/:id/sessions\n */\n app.get('/admin/users/:id/sessions', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n const rows = await db\n .prepare(\n 'SELECT id, user_id, expires_at, created_at FROM refresh_tokens WHERE user_id = ? ORDER BY created_at DESC'\n )\n .bind(userId)\n .all();\n\n const sessions = (rows?.results || []).map((row: any) => ({\n id: row.id as string,\n userId: row.user_id as string,\n expiresAt: row.expires_at as number,\n createdAt: row.created_at as number,\n }));\n\n return c.json({ sessions });\n } catch (error) {\n console.error('Admin sessions list error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to fetch sessions',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/users/:id/sessions\n */\n app.delete('/admin/users/:id/sessions', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n await db.prepare('DELETE FROM refresh_tokens WHERE user_id = ?').bind(userId).run();\n return c.json({ success: true });\n } catch (error) {\n console.error('Admin revoke sessions error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to revoke sessions',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/sessions/:sessionId\n */\n app.delete('/admin/sessions/:sessionId', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const sessionId = c.req.param('sessionId');\n await db.prepare('DELETE FROM refresh_tokens WHERE id = ?').bind(sessionId).run();\n return c.json({ success: true });\n } catch (error) {\n console.error('Admin revoke session error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to revoke session',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/users/:id/push-tokens\n */\n app.get('/admin/users/:id/push-tokens', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const userId = c.req.param('id');\n const rows = await db\n .prepare(\n 'SELECT id, user_id, token, platform, endpoint, keys, device_name, created_at, last_used_at FROM push_tokens WHERE user_id = ? ORDER BY created_at DESC'\n )\n .bind(userId)\n .all();\n\n const tokens = (rows?.results || []).map((row: any) => ({\n id: row.id as string,\n userId: row.user_id as string,\n token: row.token as string,\n platform: row.platform as string,\n endpoint: row.endpoint ?? undefined,\n keys: row.keys ? JSON.parse(row.keys) : undefined,\n deviceName: row.device_name ?? undefined,\n createdAt: row.created_at as number,\n lastUsedAt: row.last_used_at as number,\n }));\n\n return c.json({ tokens });\n } catch (error) {\n console.error('Admin push tokens list error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to fetch push tokens',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/database/tables\n */\n app.get('/admin/database/tables', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const tableNames = await listTables(db);\n const tables = [];\n\n for (const name of tableNames) {\n const safeName = requireValidTableName(name, tableNames);\n if (!safeName) continue;\n const countRow = await db.prepare(`SELECT COUNT(*) as count FROM \"${safeName}\"`).first();\n tables.push({ name, rowCount: (countRow?.count as number) || 0 });\n }\n\n return c.json(tables);\n } catch (error) {\n console.error('Admin tables error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch tables',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/database/tables/:name/schema\n */\n app.get('/admin/database/tables/:name/schema', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const tableName = c.req.param('name');\n const tableNames = await listTables(db);\n const safeName = requireValidTableName(tableName, tableNames);\n if (!safeName) {\n return jsonError(c, 404, 'Table not found', 'NOT_FOUND');\n }\n\n const columnsResult = await db.prepare(`PRAGMA table_info(\"${safeName}\")`).all();\n const columns: Array<{\n name: string;\n type: string;\n nullable: boolean;\n primaryKey: boolean;\n defaultValue: any;\n }> = (columnsResult?.results || []).map((row: any) => ({\n name: row.name,\n type: row.type,\n nullable: row.notnull === 0,\n primaryKey: row.pk === 1,\n defaultValue: row.dflt_value,\n }));\n const primaryKey = columns.filter((col) => col.primaryKey).map((col) => col.name);\n\n return c.json({\n name: tableName,\n columns,\n primaryKey,\n });\n } catch (error) {\n console.error('Admin table schema error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch schema',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/database/tables/:name/data\n */\n app.get('/admin/database/tables/:name/data', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const tableName = c.req.param('name');\n const tableNames = await listTables(db);\n const safeName = requireValidTableName(tableName, tableNames);\n if (!safeName) {\n return jsonError(c, 404, 'Table not found', 'NOT_FOUND');\n }\n\n const page = Math.max(parseInt(c.req.query('page') || '1', 10), 1);\n const pageSize = Math.min(Math.max(parseInt(c.req.query('pageSize') || '20', 10), 1), 200);\n const offset = (page - 1) * pageSize;\n\n const columnsResult = await db.prepare(`PRAGMA table_info(\"${safeName}\")`).all();\n const columns: Array<{\n name: string;\n type: string;\n nullable: boolean;\n primaryKey: boolean;\n defaultValue: any;\n }> = (columnsResult?.results || []).map((row: any) => ({\n name: row.name,\n type: row.type,\n nullable: row.notnull === 0,\n primaryKey: row.pk === 1,\n defaultValue: row.dflt_value,\n }));\n\n const countRow = await db.prepare(`SELECT COUNT(*) as count FROM \"${safeName}\"`).first();\n const total = (countRow?.count as number) || 0;\n\n const dataResult = await db\n .prepare(`SELECT * FROM \"${safeName}\" LIMIT ? OFFSET ?`)\n .bind(pageSize, offset)\n .all();\n\n return c.json({\n tableName,\n data: dataResult?.results || [],\n columns,\n pagination: {\n page,\n pageSize,\n total,\n totalPages: Math.ceil(total / pageSize) || 1,\n },\n });\n } catch (error) {\n console.error('Admin table data error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch table data',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/database/tables/:name/rows\n */\n app.post('/admin/database/tables/:name/rows', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const tableName = c.req.param('name');\n if (!isEntityTable(tableName)) {\n return jsonError(c, 403, 'Table is not editable via admin API', 'FORBIDDEN');\n }\n\n const primaryKey = getEntityPrimaryKey(tableName);\n if (!primaryKey || primaryKey !== 'id') {\n return jsonError(c, 400, 'Unsupported primary key for sync', 'VALIDATION_ERROR');\n }\n\n try {\n const db = getDb(c);\n const tableNames = await listTables(db);\n const safeName = requireValidTableName(tableName, tableNames);\n if (!safeName) {\n return jsonError(c, 404, 'Table not found', 'NOT_FOUND');\n }\n\n const data = (await c.req.json()) as Record<string, any>;\n const columnsResult = await db.prepare(`PRAGMA table_info(\"${safeName}\")`).all();\n const columns = (columnsResult?.results || []).map((row: any) => row.name as string);\n\n if (!data.id) {\n data.id = `${tableName}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n }\n\n if (columns.includes('createdAt') && data.createdAt == null) data.createdAt = Date.now();\n if (columns.includes('updatedAt') && data.updatedAt == null) data.updatedAt = Date.now();\n if (columns.includes('created_at') && data.created_at == null) data.created_at = Date.now();\n if (columns.includes('updated_at') && data.updated_at == null) data.updated_at = Date.now();\n\n const insertColumns = Object.keys(data).filter((key) => columns.includes(key));\n if (!insertColumns.includes('id')) {\n insertColumns.unshift('id');\n data.id = data.id || `${tableName}_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;\n }\n\n const placeholders = insertColumns.map(() => '?').join(', ');\n const values = insertColumns.map((key) => data[key]);\n\n await db\n .prepare(`INSERT INTO \"${safeName}\" (${insertColumns.join(', ')}) VALUES (${placeholders})`)\n .bind(...values)\n .run();\n\n const version = await updateSyncMetadata(db, tableName, data.id);\n\n const row = await db\n .prepare(`SELECT * FROM \"${safeName}\" WHERE id = ?`)\n .bind(data.id)\n .first();\n\n await notifyAdminChange(tableName, 'create', (row as any) || data, data.id, version);\n\n if (webhookManager) {\n await webhookManager.triggerEvent({\n eventType: 'sync.create',\n entity: tableName,\n recordId: data.id,\n operation: 'create',\n data: row || data,\n userId: auth.admin.id,\n });\n }\n\n if (auditManager && (await hasUserId(db, auth.admin.id))) {\n await auditManager.logChange(\n {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n },\n tableName,\n data.id,\n 'create',\n undefined,\n row || data\n );\n }\n\n return c.json(row || data, 201);\n } catch (error) {\n console.error('Admin create row error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to create row',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * PATCH /admin/database/tables/:name/rows/:id\n */\n app.patch('/admin/database/tables/:name/rows/:id', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const tableName = c.req.param('name');\n if (!isEntityTable(tableName)) {\n return jsonError(c, 403, 'Table is not editable via admin API', 'FORBIDDEN');\n }\n\n const primaryKey = getEntityPrimaryKey(tableName);\n if (!primaryKey || primaryKey !== 'id') {\n return jsonError(c, 400, 'Unsupported primary key for sync', 'VALIDATION_ERROR');\n }\n\n try {\n const db = getDb(c);\n const tableNames = await listTables(db);\n const safeName = requireValidTableName(tableName, tableNames);\n if (!safeName) {\n return jsonError(c, 404, 'Table not found', 'NOT_FOUND');\n }\n\n const recordId = c.req.param('id');\n const updates = (await c.req.json()) as Record<string, any>;\n\n const existing = await db\n .prepare(`SELECT * FROM \"${safeName}\" WHERE id = ?`)\n .bind(recordId)\n .first();\n if (!existing) {\n return jsonError(c, 404, 'Record not found', 'NOT_FOUND');\n }\n\n const columnsResult = await db.prepare(`PRAGMA table_info(\"${safeName}\")`).all();\n const columns = (columnsResult?.results || []).map((row: any) => row.name as string);\n\n if (columns.includes('updatedAt') && updates.updatedAt == null)\n updates.updatedAt = Date.now();\n if (columns.includes('updated_at') && updates.updated_at == null)\n updates.updated_at = Date.now();\n\n const updateColumns = Object.keys(updates).filter(\n (key) => key !== 'id' && columns.includes(key)\n );\n if (updateColumns.length === 0) {\n return jsonError(c, 400, 'No valid fields to update', 'VALIDATION_ERROR');\n }\n\n const assignments = updateColumns.map((key) => `${key} = ?`).join(', ');\n const values = updateColumns.map((key) => updates[key]);\n\n await db\n .prepare(`UPDATE \"${safeName}\" SET ${assignments} WHERE id = ?`)\n .bind(...values, recordId)\n .run();\n\n const version = await updateSyncMetadata(db, tableName, recordId);\n const row = await db\n .prepare(`SELECT * FROM \"${safeName}\" WHERE id = ?`)\n .bind(recordId)\n .first();\n\n await notifyAdminChange(tableName, 'update', (row as any) || updates, recordId, version);\n\n if (webhookManager) {\n await webhookManager.triggerEvent({\n eventType: 'sync.update',\n entity: tableName,\n recordId,\n operation: 'update',\n data: row || updates,\n userId: auth.admin.id,\n });\n }\n\n if (auditManager && (await hasUserId(db, auth.admin.id))) {\n await auditManager.logChange(\n {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n },\n tableName,\n recordId,\n 'update',\n existing as any,\n row || updates\n );\n }\n\n return c.json(row || updates);\n } catch (error) {\n console.error('Admin update row error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to update row',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/database/tables/:name/rows/:id\n */\n app.delete('/admin/database/tables/:name/rows/:id', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const tableName = c.req.param('name');\n if (!isEntityTable(tableName)) {\n return jsonError(c, 403, 'Table is not editable via admin API', 'FORBIDDEN');\n }\n\n const primaryKey = getEntityPrimaryKey(tableName);\n if (!primaryKey || primaryKey !== 'id') {\n return jsonError(c, 400, 'Unsupported primary key for sync', 'VALIDATION_ERROR');\n }\n\n try {\n const db = getDb(c);\n const tableNames = await listTables(db);\n const safeName = requireValidTableName(tableName, tableNames);\n if (!safeName) {\n return jsonError(c, 404, 'Table not found', 'NOT_FOUND');\n }\n\n const recordId = c.req.param('id');\n const existing = await db\n .prepare(`SELECT * FROM \"${safeName}\" WHERE id = ?`)\n .bind(recordId)\n .first();\n if (!existing) {\n return jsonError(c, 404, 'Record not found', 'NOT_FOUND');\n }\n\n await db.prepare(`DELETE FROM \"${safeName}\" WHERE id = ?`).bind(recordId).run();\n\n const version = await updateSyncMetadata(db, tableName, recordId, Date.now());\n\n await notifyAdminChange(tableName, 'delete', {}, recordId, version);\n\n if (webhookManager) {\n await webhookManager.triggerEvent({\n eventType: 'sync.delete',\n entity: tableName,\n recordId,\n operation: 'delete',\n data: {},\n userId: auth.admin.id,\n });\n }\n\n if (auditManager && (await hasUserId(db, auth.admin.id))) {\n await auditManager.logChange(\n {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n },\n tableName,\n recordId,\n 'delete',\n existing as any,\n undefined\n );\n }\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Admin delete row error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to delete row',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/schemas\n */\n app.get('/admin/schemas', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n return c.json({\n version: 1,\n timestamp: Date.now(),\n schemas: schema.entities,\n });\n });\n\n /**\n * GET /introspection/schema\n * Public endpoint for schema introspection (used by CLI codegen)\n */\n app.get('/introspection/schema', async (c) => {\n return c.json({\n version: 1,\n timestamp: Date.now(),\n schema: {\n entities: schema.entities,\n },\n });\n });\n\n /**\n * GET /admin/activity\n */\n app.get('/admin/activity', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const page = Math.max(parseInt(c.req.query('page') || '1', 10), 1);\n const pageSize = Math.min(Math.max(parseInt(c.req.query('pageSize') || '20', 10), 1), 100);\n const offset = (page - 1) * pageSize;\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n const adminId = c.req.query('adminId');\n if (adminId) {\n conditions.push('user_id = ?');\n params.push(adminId);\n }\n\n const entityType = c.req.query('entityType');\n if (entityType) {\n conditions.push('entity = ?');\n params.push(entityType);\n }\n\n const action = c.req.query('action');\n if (action) {\n conditions.push('operation = ?');\n params.push(action);\n }\n\n const dateFrom = c.req.query('dateFrom');\n if (dateFrom) {\n conditions.push('created_at >= ?');\n params.push(Number(dateFrom));\n }\n\n const dateTo = c.req.query('dateTo');\n if (dateTo) {\n conditions.push('created_at <= ?');\n params.push(Number(dateTo));\n }\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const countRow = await db\n .prepare(`SELECT COUNT(*) as total FROM audit_logs ${whereClause}`)\n .bind(...params)\n .first();\n const total = (countRow?.total as number) || 0;\n\n const rows = await db\n .prepare(\n `SELECT * FROM audit_logs ${whereClause} ORDER BY created_at DESC LIMIT ? OFFSET ?`\n )\n .bind(...params, pageSize, offset)\n .all();\n\n const entries = [];\n for (const row of rows?.results || []) {\n const entity = (row as any).entity as string;\n const entityTypeValue =\n entity === 'admins' ? 'admin' : entity === 'users' ? 'user' : 'database';\n entries.push({\n id: (row as any).id as string,\n adminId: (row as any).user_id as string,\n adminEmail: undefined,\n action: (row as any).operation as string,\n entityType: entityTypeValue,\n entityId: (row as any).record_id as string,\n details: (row as any).changes ? JSON.parse((row as any).changes) : {},\n ipAddress: '',\n createdAt: (row as any).created_at as number,\n });\n }\n\n return c.json({\n data: entries,\n pagination: {\n page,\n pageSize,\n total,\n totalPages: Math.ceil(total / pageSize) || 1,\n },\n });\n } catch (error) {\n console.error('Admin activity error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to fetch activity log',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/webhooks\n * List all webhooks (admin view)\n */\n app.get('/admin/webhooks', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const db = getDb(c);\n const rows = await db.prepare('SELECT * FROM webhooks ORDER BY created_at DESC').all();\n\n const webhooks = (rows?.results || []).map((row: any) => ({\n id: row.id,\n userId: row.user_id,\n url: row.url,\n events: JSON.parse(row.events),\n isActive: row.is_active === 1,\n description: row.description ?? undefined,\n headers: row.headers ? JSON.parse(row.headers) : undefined,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n }));\n\n return c.json({ webhooks });\n } catch (error) {\n console.error('Admin webhooks list error:', error);\n return jsonError(c, 500, 'Failed to list webhooks', 'API_ERROR');\n }\n });\n\n /**\n * POST /admin/webhooks\n * Create webhook for a user (admin)\n */\n app.post('/admin/webhooks', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const db = getDb(c);\n const { userId, url, events, description, headers } = await c.req.json();\n\n if (!userId || !url || !Array.isArray(events) || events.length === 0) {\n return jsonError(c, 400, 'Missing userId, url, or events', 'VALIDATION_ERROR');\n }\n\n const userRow = await db\n .prepare('SELECT id, email, created_at, updated_at FROM users WHERE id = ?')\n .bind(userId)\n .first();\n\n if (!userRow) {\n return jsonError(c, 404, 'User not found', 'NOT_FOUND');\n }\n\n const webhook = await webhookManager.registerWebhook(\n {\n id: userRow.id as string,\n email: userRow.email as string,\n createdAt: userRow.created_at as number,\n updatedAt: userRow.updated_at as number,\n },\n {\n url,\n events,\n description,\n headers,\n }\n );\n\n return c.json({ ...webhook, secret: undefined });\n } catch (error) {\n console.error('Admin webhooks create error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to create webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/webhooks/:webhookId/deliveries\n * Get webhook delivery history\n */\n app.get('/admin/webhooks/:webhookId/deliveries', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const webhookId = c.req.param('webhookId');\n\n const rows = await db\n .prepare(\n 'SELECT * FROM webhook_deliveries WHERE webhook_id = ? ORDER BY created_at DESC LIMIT 100'\n )\n .bind(webhookId)\n .all();\n\n const deliveries = (rows?.results || []).map((row: any) => ({\n id: row.id,\n webhookId: row.webhook_id,\n eventId: row.event_id,\n statusCode: row.status_code,\n response: row.response_body ?? undefined,\n error: row.error ?? undefined,\n duration: row.duration ?? 0,\n createdAt: row.created_at,\n }));\n\n return c.json({ deliveries });\n } catch (error) {\n console.error('Webhook deliveries error:', error);\n return jsonError(c, 500, 'Failed to fetch deliveries', 'API_ERROR');\n }\n });\n\n /**\n * PATCH /admin/webhooks/:webhookId\n * Update webhook (admin)\n */\n app.patch('/admin/webhooks/:webhookId', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhookId = c.req.param('webhookId');\n const updates = await c.req.json();\n\n const existing = await webhookManager.getWebhook(webhookId);\n if (!existing) {\n return jsonError(c, 404, 'Webhook not found', 'NOT_FOUND');\n }\n\n const webhook = await webhookManager.updateWebhook(webhookId, existing.userId, {\n url: updates.url,\n events: updates.events,\n isActive: updates.isActive,\n description: updates.description,\n headers: updates.headers,\n });\n\n return c.json({ ...webhook, secret: undefined });\n } catch (error) {\n console.error('Admin webhook update error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to update webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/webhooks/:webhookId\n * Delete webhook (admin)\n */\n app.delete('/admin/webhooks/:webhookId', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhookId = c.req.param('webhookId');\n const existing = await webhookManager.getWebhook(webhookId);\n if (!existing) {\n return jsonError(c, 404, 'Webhook not found', 'NOT_FOUND');\n }\n\n await webhookManager.deleteWebhook(webhookId, existing.userId);\n return c.json({ success: true });\n } catch (error) {\n console.error('Admin webhook delete error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to delete webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /admin/webhooks/:webhookId/test\n * Send a test payload to a webhook (admin)\n */\n app.post('/admin/webhooks/:webhookId/test', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const db = getDb(c);\n const webhookId = c.req.param('webhookId');\n const { payload = {}, eventType } = await c.req.json();\n\n const webhook = await webhookManager.getWebhook(webhookId);\n if (!webhook) {\n return jsonError(c, 404, 'Webhook not found', 'NOT_FOUND');\n }\n\n const selectedEventType = eventType || webhook.events?.[0] || 'test';\n\n const result = await sendTestWebhook(\n db,\n {\n id: webhook.id,\n url: webhook.url,\n events: webhook.events,\n headers: webhook.headers,\n },\n payload,\n selectedEventType\n );\n\n return c.json({ success: true, ...result });\n } catch (error) {\n console.error('Admin webhook test error:', error);\n return jsonError(\n c,\n 500,\n error instanceof Error ? error.message : 'Failed to test webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/files\n * List all files (admin view)\n */\n app.get('/admin/files', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const page = Math.max(parseInt(c.req.query('page') || '1', 10), 1);\n const pageSize = Math.min(Math.max(parseInt(c.req.query('pageSize') || '50', 10), 1), 100);\n const offset = (page - 1) * pageSize;\n\n const countRow = await db.prepare('SELECT COUNT(*) as total FROM files').first();\n const total = (countRow?.total as number) || 0;\n\n const rows = await db\n .prepare('SELECT * FROM files ORDER BY uploaded_at DESC LIMIT ? OFFSET ?')\n .bind(pageSize, offset)\n .all();\n\n const files = (rows?.results || []).map((row: any) => ({\n id: row.id,\n userId: row.user_id,\n fileName: row.file_name,\n mimeType: row.mime_type,\n size: row.size,\n key: row.key,\n uploadedAt: row.uploaded_at,\n bucket: row.bucket,\n isPublic: row.is_public === 1,\n }));\n\n return c.json({\n files,\n pagination: {\n page,\n pageSize,\n total,\n totalPages: Math.ceil(total / pageSize) || 1,\n },\n });\n } catch (error) {\n console.error('Admin files list error:', error);\n return jsonError(c, 500, 'Failed to list files', 'API_ERROR');\n }\n });\n\n /**\n * POST /admin/files/upload\n * Upload a file (admin)\n */\n app.post('/admin/files/upload', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const formData = await c.req.formData();\n const file = formData.get('file') as unknown;\n const entityType = formData.get('entityType') as string | null;\n const entityId = formData.get('entityId') as string | null;\n const isPublic = formData.get('isPublic') === 'true';\n\n if (!file || !(file instanceof Blob)) {\n return jsonError(c, 400, 'Missing or invalid file', 'VALIDATION_ERROR');\n }\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db, {\n maxFileSize: 100 * 1024 * 1024, // 100MB\n });\n\n // Create a user object for the admin\n const adminUser = {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n\n const arrayBuffer = await file.arrayBuffer();\n const metadata = await fileManager.uploadFile(adminUser, arrayBuffer, {\n fileName: (file as any).name || 'unnamed',\n mimeType: file.type || 'application/octet-stream',\n size: file.size,\n entityType: entityType || undefined,\n entityId: entityId || undefined,\n isPublic,\n });\n\n return c.json(metadata);\n } catch (error) {\n console.error('Admin file upload error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Upload failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /admin/files/:fileId\n * Delete a file (admin)\n */\n app.delete('/admin/files/:fileId', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const fileId = c.req.param('fileId');\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n // Create a user object for the admin\n const adminUser = {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n\n await fileManager.deleteFile(fileId, adminUser);\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Admin file delete error:', error);\n return jsonError(c, 500, 'Failed to delete file', 'API_ERROR');\n }\n });\n\n /**\n * POST /admin/files/:fileId/signed-url\n * Generate a signed URL for temporary access (admin)\n */\n app.post('/admin/files/:fileId/signed-url', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const fileId = c.req.param('fileId');\n const { expiresIn } = await c.req.json();\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n // Create a user object for the admin\n const adminUser = {\n id: auth.admin.id,\n email: auth.admin.email,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n\n const relativePath = await fileManager.generateSignedUrl(\n fileId,\n adminUser,\n expiresIn || 3600\n );\n\n // Convert relative path to full URL\n const requestUrl = new URL(c.req.url);\n const fullUrl = `${requestUrl.protocol}//${requestUrl.host}${relativePath}`;\n\n return c.json({ url: fullUrl, expiresIn: expiresIn || 3600 });\n } catch (error) {\n console.error('Admin signed URL generation error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to generate signed URL',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /admin/analytics/stats\n * Get comprehensive usage statistics (admin view)\n */\n app.get('/admin/analytics/stats', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!analyticsManager) {\n return jsonError(c, 501, 'Analytics not configured', 'NOT_CONFIGURED');\n }\n\n const startDate = c.req.query('startDate');\n const endDate = c.req.query('endDate');\n\n const stats = await analyticsManager.getUsageStats(\n startDate || undefined,\n endDate || undefined\n );\n\n return c.json(stats);\n } catch (error) {\n console.error('Admin analytics stats error:', error);\n return jsonError(c, 500, 'Failed to fetch analytics stats', 'API_ERROR');\n }\n });\n\n /**\n * POST /admin/analytics/query\n * Query analytics metrics (admin view)\n */\n app.post('/admin/analytics/query', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n if (!analyticsManager) {\n return jsonError(c, 501, 'Analytics not configured', 'NOT_CONFIGURED');\n }\n\n const query = await c.req.json();\n const metrics = await analyticsManager.queryMetrics(query);\n\n return c.json({ metrics });\n } catch (error) {\n console.error('Admin analytics query error:', error);\n return jsonError(c, 500, 'Failed to query analytics', 'API_ERROR');\n }\n });\n\n /**\n * POST /admin/audit/query\n * Query audit logs with filters (admin view)\n */\n app.post('/admin/audit/query', async (c) => {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n const { userId, entity, operation, limit = 100, offset = 0 } = await c.req.json();\n\n const conditions: string[] = [];\n const params: any[] = [];\n\n if (userId) {\n conditions.push('user_id = ?');\n params.push(userId);\n }\n\n if (entity) {\n conditions.push('entity = ?');\n params.push(entity);\n }\n\n if (operation) {\n conditions.push('operation = ?');\n params.push(operation);\n }\n\n const whereClause = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';\n\n const rows = await db\n .prepare(\n `SELECT * FROM audit_logs ${whereClause} ORDER BY created_at DESC LIMIT ? OFFSET ?`\n )\n .bind(...params, limit, offset)\n .all();\n\n const logs = (rows?.results || []).map((row: any) => ({\n id: row.id,\n userId: row.user_id,\n entity: row.entity,\n recordId: row.record_id,\n operation: row.operation,\n changes: row.changes ? JSON.parse(row.changes) : null,\n beforeData: row.before_data ? JSON.parse(row.before_data) : null,\n afterData: row.after_data ? JSON.parse(row.after_data) : null,\n createdAt: row.created_at,\n }));\n\n return c.json({ logs });\n } catch (error) {\n console.error('Admin audit query error:', error);\n return jsonError(c, 500, 'Failed to query audit logs', 'API_ERROR');\n }\n });\n\n /**\n * POST /auth/refresh\n */\n app.post('/auth/refresh', async (c) => {\n try {\n const body: RefreshTokenRequest = await c.req.json();\n const refreshToken = body?.refreshToken;\n\n if (!refreshToken) {\n return jsonError(c, 400, 'Refresh token is required', 'VALIDATION_ERROR');\n }\n\n const payload = parseJWT(refreshToken);\n if (!payload || payload.type !== 'refresh') {\n return jsonError(c, 401, 'Invalid refresh token', 'UNAUTHORIZED');\n }\n\n const db = getDb(c);\n const jwtSecret = getJwtSecret(c);\n\n const tokenRow = await db\n .prepare(\n `SELECT r.user_id, r.expires_at, u.email\n FROM refresh_tokens r\n JOIN users u ON u.id = r.user_id\n WHERE r.token = ?`\n )\n .bind(refreshToken)\n .first();\n\n if (!tokenRow) {\n return jsonError(c, 401, 'Invalid refresh token', 'UNAUTHORIZED');\n }\n\n if ((tokenRow.expires_at as number) < Date.now()) {\n await db.prepare('DELETE FROM refresh_tokens WHERE token = ?').bind(refreshToken).run();\n return jsonError(c, 401, 'Refresh token expired', 'UNAUTHORIZED');\n }\n\n const accessToken = createJWT(\n { userId: tokenRow.user_id as string, email: tokenRow.email as string, type: 'access' },\n jwtSecret,\n 3600\n );\n\n return c.json({ accessToken, expiresIn: 3600 });\n } catch (error) {\n console.error('Refresh token error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Token refresh failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /auth/logout\n */\n app.post('/auth/logout', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n try {\n const db = getDb(c);\n await db.prepare('DELETE FROM refresh_tokens WHERE user_id = ?').bind(auth.user.id).run();\n\n return c.json({ message: 'Logged out successfully', userId: auth.user.id });\n } catch (error) {\n console.error('Logout error:', error);\n return jsonError(c, 500, 'Logout failed', 'API_ERROR');\n }\n });\n\n /**\n * POST /sync\n */\n app.post('/sync', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n // Create sync database adapter\n const db = new D1SyncDatabase(getDb(c));\n\n // Create schemas map for ServerSyncEngine\n const schemas = new Map<string, EntitySchema>();\n for (const [entityName, entitySchema] of Object.entries(schema.entities)) {\n schemas.set(entityName, entitySchema);\n }\n\n // Create sync engine\n const syncEngine = new ServerSyncEngine({\n schemas,\n db,\n user: auth.user,\n encryption: encryptionManager || undefined,\n onChangeApplied: async ({ entity, id, operation, before, after }) => {\n if (!auditManager) {\n return;\n }\n await auditManager.logChange(auth.user, entity, id, operation, before, after);\n },\n });\n\n // Process sync request\n const request: SyncRequest = await c.req.json();\n const response = await syncEngine.sync(request);\n\n // Broadcast changes to subscribed clients in real-time\n if (changeNotifier && subscriptionManager) {\n for (const change of response.changes) {\n // For each applied change, notify subscribed clients\n if (change.operation !== 'delete') {\n // For create/update, we have the full record\n await changeNotifier.notifyChange(\n change.entity,\n change.operation,\n change.data || {},\n change.id,\n auth.user,\n change.version\n );\n } else {\n // For delete, notify with just the ID\n await changeNotifier.notifyChange(\n change.entity,\n 'delete',\n {},\n change.id,\n auth.user,\n change.version\n );\n }\n }\n }\n\n // Trigger webhooks for applied changes\n if (webhookManager) {\n for (const change of response.changes) {\n await webhookManager.triggerEvent({\n eventType: `sync.${change.operation}`,\n entity: change.entity,\n recordId: change.id,\n operation: change.operation,\n data: change.data,\n userId: auth.user.id,\n });\n }\n }\n\n return c.json(response);\n } catch (error) {\n console.error('Sync error:', error);\n return jsonError(c, 400, error instanceof Error ? error.message : 'Sync failed', 'API_ERROR');\n }\n });\n\n /**\n * GET /sync/:entity\n */\n app.get('/sync/:entity', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const entity = c.req.param('entity');\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n try {\n const db = getDb(c);\n const result = await db\n .prepare(\n 'SELECT entity, record_id, version, updated_at, deleted_at FROM sync_metadata WHERE entity = ?'\n )\n .bind(entity)\n .all();\n\n return c.json({\n entity,\n metadata: result.results || [],\n timestamp: Date.now(),\n });\n } catch (error) {\n console.error('Sync metadata error:', error);\n return jsonError(c, 500, 'Failed to load sync metadata', 'API_ERROR');\n }\n });\n\n /**\n * POST /sync/batch\n * Batch process multiple CRUD operations\n */\n app.post('/sync/batch', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n // Create sync database adapter\n const db = new D1SyncDatabase(getDb(c));\n\n // Create schemas map for BatchProcessor\n const schemas = new Map<string, EntitySchema>();\n for (const [entityName, entitySchema] of Object.entries(schema.entities)) {\n schemas.set(entityName, entitySchema);\n }\n\n // Create batch processor\n const batchProcessor = new BatchProcessor({\n schemas,\n db,\n user: auth.user,\n maxBatchSize: 1000,\n encryption: encryptionManager || undefined,\n });\n\n // Process batch request\n const request = await c.req.json();\n const response = await batchProcessor.processBatch(request);\n\n // Broadcast changes to subscribed clients in real-time\n if (changeNotifier && subscriptionManager) {\n for (const change of response.applied) {\n // For each applied change, notify subscribed clients\n if (change.operation !== 'delete') {\n // For create/update, we have the full record\n await changeNotifier.notifyChange(\n change.entity,\n change.operation,\n change.data || {},\n change.id,\n auth.user,\n change.version\n );\n } else {\n // For delete, notify with just the ID\n await changeNotifier.notifyChange(\n change.entity,\n 'delete',\n {},\n change.id,\n auth.user,\n change.version\n );\n }\n }\n }\n\n // Trigger webhooks for applied changes\n if (webhookManager) {\n for (const change of response.applied) {\n await webhookManager.triggerEvent({\n eventType: `sync.${change.operation}`,\n entity: change.entity,\n recordId: change.id,\n operation: change.operation,\n data: change.data,\n userId: auth.user.id,\n });\n }\n }\n\n // Log changes for audit trail\n if (auditManager) {\n for (const change of response.applied) {\n const before =\n change.operation === 'update' || change.operation === 'delete'\n ? change.data\n : undefined;\n const after =\n change.operation === 'create' || change.operation === 'update'\n ? change.data\n : undefined;\n\n await auditManager.logChange(\n auth.user,\n change.entity,\n change.id,\n change.operation,\n before,\n after\n );\n }\n }\n\n return c.json(response);\n } catch (error) {\n console.error('Batch error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Batch processing failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /import/csv\n * Import data from CSV file\n */\n app.post('/import/csv', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const formData = await c.req.formData();\n const entity = formData.get('entity') as string;\n const file = formData.get('file') as unknown;\n\n if (!entity) {\n return jsonError(c, 400, 'Missing entity parameter', 'VALIDATION_ERROR');\n }\n\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n if (!file || !(file instanceof Blob)) {\n return jsonError(c, 400, 'Missing or invalid file', 'VALIDATION_ERROR');\n }\n\n // Read CSV file\n const csvContent = await file.text();\n\n // Parse CSV\n const importResult = await CSVProcessor.importFromCSV({\n entity,\n data: csvContent,\n hasHeader: true,\n });\n\n return c.json(importResult);\n } catch (error) {\n console.error('CSV import error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'CSV import failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /export/csv\n * Export data to CSV format\n */\n app.post('/export/csv', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const { entity, filter, columns } = await c.req.json();\n\n if (!entity) {\n return jsonError(c, 400, 'Missing entity parameter', 'VALIDATION_ERROR');\n }\n\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n try {\n const db = getDb(c);\n let query = `SELECT * FROM ${entity}`;\n\n // Apply filter if provided\n if (filter && typeof filter === 'object') {\n const whereConditions: string[] = [];\n const params: any[] = [];\n\n for (const [key, value] of Object.entries(filter)) {\n whereConditions.push(`${key} = ?`);\n params.push(value);\n }\n\n if (whereConditions.length > 0) {\n query += ` WHERE ${whereConditions.join(' AND ')}`;\n }\n\n // Execute with parameters\n const result = await db\n .prepare(query)\n .bind(...params)\n .all();\n const data = result.results || [];\n\n // Export to CSV\n const exportResult = CSVProcessor.exportToCSV({\n entity,\n data,\n columns,\n includeMetadata: false,\n });\n\n // Return as downloadable CSV\n return new Response(exportResult.csv, {\n headers: {\n 'Content-Type': 'text/csv',\n 'Content-Disposition': `attachment; filename=\"${entity}.csv\"`,\n },\n });\n } else {\n // No filter, get all records\n const result = await db.prepare(query).all();\n const data = result.results || [];\n\n // Export to CSV\n const exportResult = CSVProcessor.exportToCSV({\n entity,\n data,\n columns,\n includeMetadata: false,\n });\n\n // Return as downloadable CSV\n return new Response(exportResult.csv, {\n headers: {\n 'Content-Type': 'text/csv',\n 'Content-Disposition': `attachment; filename=\"${entity}.csv\"`,\n },\n });\n }\n } catch (error) {\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Export failed',\n 'API_ERROR'\n );\n }\n } catch (error) {\n console.error('CSV export error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'CSV export failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /column-permissions/:entity\n * Get column permissions for an entity\n */\n app.get('/column-permissions/:entity', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const entity = c.req.param('entity');\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n const db = getDb(c);\n const result = await db\n .prepare('SELECT * FROM column_permissions WHERE entity = ? ORDER BY column_name')\n .bind(entity)\n .all();\n\n return c.json({\n entity,\n permissions: result.results || [],\n });\n } catch (error) {\n console.error('Column permissions fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch column permissions', 'API_ERROR');\n }\n });\n\n /**\n * POST /column-permissions\n * Create or update column permission\n */\n app.post('/column-permissions', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const { entity, columnName, role, visible, readable, writable, encrypted, maskValue } =\n await c.req.json();\n\n if (!entity || !columnName) {\n return jsonError(c, 400, 'Missing entity or columnName', 'VALIDATION_ERROR');\n }\n\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n const db = getDb(c);\n const now = Date.now();\n const permissionId = `${entity}_${columnName}_${role || 'default'}_${now}`;\n\n // Check if permission already exists\n const existing = await db\n .prepare(\n 'SELECT id FROM column_permissions WHERE entity = ? AND column_name = ? AND role IS ?'\n )\n .bind(entity, columnName, role || null)\n .first();\n\n if (existing) {\n // Update existing permission\n await db\n .prepare(\n `\n UPDATE column_permissions\n SET visible = ?, readable = ?, writable = ?, encrypted = ?, mask_value = ?, updated_at = ?\n WHERE entity = ? AND column_name = ? AND role IS ?\n `\n )\n .bind(\n visible ? 1 : 0,\n readable ? 1 : 0,\n writable ? 1 : 0,\n encrypted ? 1 : 0,\n maskValue || null,\n now,\n entity,\n columnName,\n role || null\n )\n .run();\n } else {\n // Create new permission\n await db\n .prepare(\n `\n INSERT INTO column_permissions (id, entity, column_name, role, visible, readable, writable, encrypted, mask_value, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n )\n .bind(\n permissionId,\n entity,\n columnName,\n role || null,\n visible ? 1 : 0,\n readable ? 1 : 0,\n writable ? 1 : 0,\n encrypted ? 1 : 0,\n maskValue || null,\n now,\n now\n )\n .run();\n }\n\n return c.json({ success: true, id: existing?.id || permissionId });\n } catch (error) {\n console.error('Column permission update error:', error);\n return jsonError(c, 500, 'Failed to update column permission', 'API_ERROR');\n }\n });\n\n /**\n * DELETE /column-permissions/:id\n * Delete a column permission\n */\n app.delete('/column-permissions/:id', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const id = c.req.param('id');\n const db = getDb(c);\n\n await db.prepare('DELETE FROM column_permissions WHERE id = ?').bind(id).run();\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Column permission delete error:', error);\n return jsonError(c, 500, 'Failed to delete column permission', 'API_ERROR');\n }\n });\n\n /**\n * POST /files/upload\n * Upload a file to R2 storage\n */\n app.post('/files/upload', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const formData = await c.req.formData();\n const file = formData.get('file') as unknown;\n const entityType = formData.get('entityType') as string | null;\n const entityId = formData.get('entityId') as string | null;\n const isPublic = formData.get('isPublic') === 'true';\n\n if (!file || !(file instanceof Blob)) {\n return jsonError(c, 400, 'Missing or invalid file', 'VALIDATION_ERROR');\n }\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db, {\n maxFileSize: 100 * 1024 * 1024, // 100MB\n });\n\n const arrayBuffer = await file.arrayBuffer();\n const metadata = await fileManager.uploadFile(auth.user, arrayBuffer, {\n fileName: (file as any).name || 'unnamed',\n mimeType: file.type || 'application/octet-stream',\n size: file.size,\n entityType: entityType || undefined,\n entityId: entityId || undefined,\n isPublic,\n });\n\n return c.json(metadata);\n } catch (error) {\n console.error('File upload error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Upload failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /files/download/:fileId\n * Download a file from R2 storage\n */\n app.get('/files/download/:fileId', async (c) => {\n try {\n const fileId = c.req.param('fileId');\n const token = c.req.query('token');\n\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n // If token is provided, verify it\n if (token) {\n const isValid = await fileManager.verifyToken(fileId, token);\n if (!isValid) {\n return jsonError(c, 401, 'Invalid or expired token', 'UNAUTHORIZED');\n }\n\n // Get file and return\n const metadata = await fileManager.getFileMetadata(fileId);\n if (!metadata) {\n return jsonError(c, 404, 'File not found', 'NOT_FOUND');\n }\n\n const file = await bucket.get(metadata.key);\n if (!file) {\n return jsonError(c, 404, 'File not found in storage', 'NOT_FOUND');\n }\n\n return new Response(file.body, {\n headers: {\n 'Content-Type': metadata.mimeType,\n 'Content-Disposition': `attachment; filename=\"${metadata.fileName}\"`,\n 'Content-Length': metadata.size.toString(),\n },\n });\n }\n\n // Otherwise, require authentication\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const file = await fileManager.downloadFile(fileId, auth.user);\n if (!file) {\n return jsonError(c, 404, 'File not found', 'NOT_FOUND');\n }\n\n const metadata = await fileManager.getFileMetadata(fileId);\n if (!metadata) {\n return jsonError(c, 404, 'File metadata not found', 'NOT_FOUND');\n }\n\n return new Response(file.body, {\n headers: {\n 'Content-Type': metadata.mimeType,\n 'Content-Disposition': `attachment; filename=\"${metadata.fileName}\"`,\n 'Content-Length': metadata.size.toString(),\n },\n });\n } catch (error) {\n console.error('File download error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Download failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /files/:fileId\n * Delete a file from R2 storage\n */\n app.delete('/files/:fileId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const fileId = c.req.param('fileId');\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n await fileManager.deleteFile(fileId, auth.user);\n\n return c.json({ success: true });\n } catch (error) {\n console.error('File delete error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Delete failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /files\n * List files for the authenticated user\n */\n app.get('/files', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const entityType = c.req.query('entityType');\n const entityId = c.req.query('entityId');\n const limit = c.req.query('limit') ? parseInt(c.req.query('limit')!) : undefined;\n const offset = c.req.query('offset') ? parseInt(c.req.query('offset')!) : undefined;\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n const files = await fileManager.listFiles(auth.user, {\n entityType: entityType || undefined,\n entityId: entityId || undefined,\n limit,\n offset,\n });\n\n return c.json({ files });\n } catch (error) {\n console.error('File list error:', error);\n return jsonError(c, 500, 'Failed to list files', 'API_ERROR');\n }\n });\n\n /**\n * POST /files/:fileId/signed-url\n * Generate a signed URL for temporary access to a file\n */\n app.post('/files/:fileId/signed-url', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n const getR2Bucket = options.getR2Bucket;\n if (!getR2Bucket) {\n return jsonError(c, 501, 'File storage not configured', 'NOT_CONFIGURED');\n }\n\n const fileId = c.req.param('fileId');\n const { expiresIn } = await c.req.json();\n\n const bucket = getR2Bucket(c);\n const db = new D1SyncDatabase(getDb(c));\n const fileManager = new FileStorageManager(bucket, db);\n\n const url = await fileManager.generateSignedUrl(fileId, auth.user, expiresIn || 3600);\n\n return c.json({ url, expiresIn: expiresIn || 3600 });\n } catch (error) {\n console.error('Signed URL generation error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to generate signed URL',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /webhooks\n * Register a new webhook\n */\n app.post('/webhooks', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const { url, events, description, headers } = await c.req.json();\n\n const webhook = await webhookManager.registerWebhook(auth.user, {\n url,\n events,\n description,\n headers,\n });\n\n // Don't expose the secret in the response for security\n return c.json({ ...webhook, secret: undefined });\n } catch (error) {\n console.error('Webhook registration error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to register webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /webhooks\n * List user's webhooks\n */\n app.get('/webhooks', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhooks = await webhookManager.listWebhooks(auth.user.id);\n\n // Don't expose secrets\n const safeWebhooks = webhooks.map((wh) => ({ ...wh, secret: undefined }));\n\n return c.json({ webhooks: safeWebhooks });\n } catch (error) {\n console.error('Webhook list error:', error);\n return jsonError(c, 500, 'Failed to list webhooks', 'API_ERROR');\n }\n });\n\n /**\n * GET /webhooks/:webhookId\n * Get a specific webhook\n */\n app.get('/webhooks/:webhookId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhookId = c.req.param('webhookId');\n const webhook = await webhookManager.getWebhook(webhookId, auth.user.id);\n\n if (!webhook) {\n return jsonError(c, 404, 'Webhook not found', 'NOT_FOUND');\n }\n\n return c.json({ ...webhook, secret: undefined });\n } catch (error) {\n console.error('Webhook fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch webhook', 'API_ERROR');\n }\n });\n\n /**\n * PATCH /webhooks/:webhookId\n * Update a webhook\n */\n app.patch('/webhooks/:webhookId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhookId = c.req.param('webhookId');\n const updates = await c.req.json();\n\n const webhook = await webhookManager.updateWebhook(webhookId, auth.user.id, updates);\n\n return c.json({ ...webhook, secret: undefined });\n } catch (error) {\n console.error('Webhook update error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to update webhook',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /webhooks/:webhookId\n * Delete a webhook\n */\n app.delete('/webhooks/:webhookId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!webhookManager) {\n return jsonError(c, 501, 'Webhooks not configured', 'NOT_CONFIGURED');\n }\n\n const webhookId = c.req.param('webhookId');\n await webhookManager.deleteWebhook(webhookId, auth.user.id);\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Webhook delete error:', error);\n return jsonError(c, 500, 'Failed to delete webhook', 'API_ERROR');\n }\n });\n\n /**\n * POST /search/:entity\n * Full-text search for an entity\n */\n app.post('/search/:entity', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!searchManager) {\n return jsonError(c, 501, 'Search not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n if (!searchManager.hasIndex(entity)) {\n return jsonError(c, 404, `No search index for entity: ${entity}`, 'NOT_FOUND');\n }\n\n const { query, columns, limit, offset, highlight, rank } = await c.req.json();\n\n if (!query || typeof query !== 'string') {\n return jsonError(c, 400, 'Missing or invalid query', 'VALIDATION_ERROR');\n }\n\n const results = await searchManager.search({\n entity,\n query,\n columns,\n limit,\n offset,\n highlight: highlight !== false, // Default true\n rank: rank !== false, // Default true\n });\n\n return c.json(results);\n } catch (error) {\n console.error('Search error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Search failed',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /search/:entity/index\n * Create or rebuild search index for an entity\n */\n app.post('/search/:entity/index', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!searchManager) {\n return jsonError(c, 501, 'Search not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n const { columns, tokenize, prefix, rebuild } = await c.req.json();\n\n if (!columns || !Array.isArray(columns) || columns.length === 0) {\n return jsonError(c, 400, 'Missing or invalid columns', 'VALIDATION_ERROR');\n }\n\n // Register index configuration\n searchManager.registerIndex({\n entity,\n columns,\n tokenize,\n prefix,\n });\n\n // Create or rebuild index\n if (rebuild) {\n const count = await searchManager.rebuildIndex(entity);\n return c.json({ success: true, documentCount: count, rebuilt: true });\n } else {\n await searchManager.createSearchIndex(entity);\n return c.json({ success: true, created: true });\n }\n } catch (error) {\n console.error('Search index creation error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to create search index',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /search/:entity/index\n * Delete search index for an entity\n */\n app.delete('/search/:entity/index', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!searchManager) {\n return jsonError(c, 501, 'Search not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n await searchManager.deleteSearchIndex(entity);\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Search index deletion error:', error);\n return jsonError(c, 500, 'Failed to delete search index', 'API_ERROR');\n }\n });\n\n /**\n * GET /search/:entity/stats\n * Get search index statistics\n */\n app.get('/search/:entity/stats', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!searchManager) {\n return jsonError(c, 501, 'Search not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n const stats = await searchManager.getIndexStats(entity);\n\n return c.json(stats);\n } catch (error) {\n console.error('Search stats error:', error);\n return jsonError(c, 500, 'Failed to get search stats', 'API_ERROR');\n }\n });\n\n /**\n * POST /audit/query\n * Query audit logs with filters\n */\n app.post('/audit/query', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!auditManager) {\n return jsonError(c, 501, 'Audit not configured', 'NOT_CONFIGURED');\n }\n\n const query = await c.req.json();\n const result = await auditManager.queryLogs(query);\n\n return c.json(result);\n } catch (error) {\n console.error('Audit query error:', error);\n return jsonError(c, 500, 'Failed to query audit logs', 'API_ERROR');\n }\n });\n\n /**\n * GET /audit/:auditId\n * Get a specific audit log\n */\n app.get('/audit/:auditId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!auditManager) {\n return jsonError(c, 501, 'Audit not configured', 'NOT_CONFIGURED');\n }\n\n const auditId = c.req.param('auditId');\n const log = await auditManager.getLog(auditId);\n\n if (!log) {\n return jsonError(c, 404, 'Audit log not found', 'NOT_FOUND');\n }\n\n return c.json(log);\n } catch (error) {\n console.error('Audit log fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch audit log', 'API_ERROR');\n }\n });\n\n /**\n * GET /audit/record/:entity/:recordId\n * Get audit history for a specific record\n */\n app.get('/audit/record/:entity/:recordId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!auditManager) {\n return jsonError(c, 501, 'Audit not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n const recordId = c.req.param('recordId');\n const history = await auditManager.getRecordHistory(entity, recordId);\n\n return c.json({ history });\n } catch (error) {\n console.error('Record history error:', error);\n return jsonError(c, 500, 'Failed to get record history', 'API_ERROR');\n }\n });\n\n /**\n * GET /audit/stats\n * Get audit statistics\n */\n app.get('/audit/stats', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!auditManager) {\n return jsonError(c, 501, 'Audit not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.query('entity');\n const userId = c.req.query('userId');\n const startDate = c.req.query('startDate') ? parseInt(c.req.query('startDate')!) : undefined;\n const endDate = c.req.query('endDate') ? parseInt(c.req.query('endDate')!) : undefined;\n\n const stats = await auditManager.getStatistics({\n entity: entity || undefined,\n userId: userId || undefined,\n startDate,\n endDate,\n });\n\n return c.json(stats);\n } catch (error) {\n console.error('Audit stats error:', error);\n return jsonError(c, 500, 'Failed to get audit stats', 'API_ERROR');\n }\n });\n\n /**\n * POST /push/register\n * Register a push token for the authenticated user\n */\n app.post('/push/register', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const { token, platform, endpoint, keys, deviceName } = await c.req.json();\n\n if (!token || !platform) {\n return jsonError(c, 400, 'Missing token or platform', 'VALIDATION_ERROR');\n }\n\n if (!['web', 'ios', 'android', 'expo'].includes(platform)) {\n return jsonError(c, 400, 'Invalid platform', 'VALIDATION_ERROR');\n }\n\n const pushToken = await pushNotificationManager.registerToken(auth.user.id, token, platform, {\n endpoint,\n keys,\n deviceName,\n });\n\n return c.json(pushToken);\n } catch (error) {\n console.error('Push token registration error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to register token',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * DELETE /push/token/:tokenId\n * Unregister a push token\n */\n app.delete('/push/token/:tokenId', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const tokenId = c.req.param('tokenId');\n await pushNotificationManager.unregisterToken(tokenId, auth.user.id);\n\n return c.json({ success: true });\n } catch (error) {\n console.error('Push token unregistration error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to unregister token',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /push/tokens\n * Get all push tokens for the authenticated user\n */\n app.get('/push/tokens', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const tokens = await pushNotificationManager.getUserTokens(auth.user.id);\n\n return c.json({ tokens });\n } catch (error) {\n console.error('Push tokens fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch push tokens', 'API_ERROR');\n }\n });\n\n /**\n * POST /push/send\n * Send a push notification to a user (admin only)\n */\n app.post('/push/send', async (c) => {\n try {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const {\n userId,\n title,\n body,\n data,\n icon,\n badge,\n image,\n tag,\n requireInteraction,\n actions,\n targetPlatforms,\n } = await c.req.json();\n\n if (!userId || !title || !body) {\n return jsonError(c, 400, 'Missing userId, title, or body', 'VALIDATION_ERROR');\n }\n\n const notification = await pushNotificationManager.sendNotification({\n userId,\n title,\n body,\n data,\n icon,\n badge,\n image,\n tag,\n requireInteraction,\n actions,\n targetPlatforms,\n });\n\n return c.json(notification);\n } catch (error) {\n console.error('Push notification send error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to send notification',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * POST /push/broadcast\n * Broadcast a push notification to all users or specified users (admin only)\n */\n app.post('/push/broadcast', async (c) => {\n try {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const { title, body, data, icon, badge, image, userIds, targetPlatforms } =\n await c.req.json();\n\n if (!title || !body) {\n return jsonError(c, 400, 'Missing title or body', 'VALIDATION_ERROR');\n }\n\n const result = await pushNotificationManager.broadcastNotification({\n title,\n body,\n data,\n icon,\n badge,\n image,\n userIds,\n targetPlatforms,\n });\n\n return c.json(result);\n } catch (error) {\n console.error('Push notification broadcast error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to broadcast notification',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /push/notifications\n * Get notification history for the authenticated user\n */\n app.get('/push/notifications', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const limit = c.req.query('limit') ? parseInt(c.req.query('limit')!) : 50;\n const notifications = await pushNotificationManager.getUserNotifications(auth.user.id, limit);\n\n return c.json({ notifications });\n } catch (error) {\n console.error('Notification history fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch notification history', 'API_ERROR');\n }\n });\n\n /**\n * GET /push/stats\n * Get push notification statistics\n */\n app.get('/push/stats', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!pushNotificationManager) {\n return jsonError(c, 501, 'Push notifications not configured', 'NOT_CONFIGURED');\n }\n\n const userId = c.req.query('userId');\n const stats = await pushNotificationManager.getStatistics(userId || undefined);\n\n return c.json(stats);\n } catch (error) {\n console.error('Push notification stats error:', error);\n return jsonError(c, 500, 'Failed to fetch push notification stats', 'API_ERROR');\n }\n });\n\n /**\n * GET /analytics/stats\n * Get comprehensive usage statistics\n */\n app.get('/analytics/stats', async (c) => {\n try {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!analyticsManager) {\n return jsonError(c, 501, 'Analytics not configured', 'NOT_CONFIGURED');\n }\n\n const startDate = c.req.query('startDate');\n const endDate = c.req.query('endDate');\n\n const stats = await analyticsManager.getUsageStats(\n startDate || undefined,\n endDate || undefined\n );\n\n return c.json(stats);\n } catch (error) {\n console.error('Analytics stats error:', error);\n return jsonError(c, 500, 'Failed to fetch analytics stats', 'API_ERROR');\n }\n });\n\n /**\n * POST /analytics/query\n * Query analytics metrics\n */\n app.post('/analytics/query', async (c) => {\n try {\n const auth = await requireAccessAdmin(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!analyticsManager) {\n return jsonError(c, 501, 'Analytics not configured', 'NOT_CONFIGURED');\n }\n\n const query = await c.req.json();\n const metrics = await analyticsManager.queryMetrics(query);\n\n return c.json({ metrics });\n } catch (error) {\n console.error('Analytics query error:', error);\n return jsonError(c, 500, 'Failed to query analytics', 'API_ERROR');\n }\n });\n\n /**\n * POST /analytics/aggregate\n * Get aggregated metrics\n */\n app.post('/analytics/aggregate', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!analyticsManager) {\n return jsonError(c, 501, 'Analytics not configured', 'NOT_CONFIGURED');\n }\n\n const query = await c.req.json();\n const aggregated = await analyticsManager.getAggregatedMetrics(query);\n\n return c.json({ aggregated });\n } catch (error) {\n console.error('Analytics aggregation error:', error);\n return jsonError(c, 500, 'Failed to aggregate analytics', 'API_ERROR');\n }\n });\n\n /**\n * POST /encryption/config\n * Register encryption configuration for an entity\n */\n app.post('/encryption/config', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!encryptionManager) {\n return jsonError(c, 501, 'Encryption not configured', 'NOT_CONFIGURED');\n }\n\n const { entity, fields, algorithm, keyRotation } = await c.req.json();\n\n if (!entity || !fields || !Array.isArray(fields)) {\n return jsonError(c, 400, 'Missing or invalid entity or fields', 'VALIDATION_ERROR');\n }\n\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n encryptionManager.registerConfig({\n entity,\n fields,\n algorithm: algorithm || 'AES-GCM',\n keyRotation: keyRotation !== false,\n });\n\n return c.json({\n success: true,\n entity,\n fields,\n algorithm: algorithm || 'AES-GCM',\n keyRotation: keyRotation !== false,\n });\n } catch (error) {\n console.error('Encryption config error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to configure encryption',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * GET /encryption/config/:entity\n * Get encryption configuration for an entity\n */\n app.get('/encryption/config/:entity', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!encryptionManager) {\n return jsonError(c, 501, 'Encryption not configured', 'NOT_CONFIGURED');\n }\n\n const entity = c.req.param('entity');\n if (!schema.entities[entity]) {\n return jsonError(c, 404, `Entity not found: ${entity}`, 'NOT_FOUND');\n }\n\n const config = encryptionManager.getConfig(entity);\n\n if (!config) {\n return c.json({\n entity,\n enabled: false,\n fields: [],\n });\n }\n\n return c.json({\n entity,\n enabled: true,\n fields: config.fields,\n algorithm: config.algorithm || 'AES-GCM',\n keyRotation: config.keyRotation !== false,\n });\n } catch (error) {\n console.error('Encryption config fetch error:', error);\n return jsonError(c, 500, 'Failed to fetch encryption config', 'API_ERROR');\n }\n });\n\n /**\n * POST /encryption/rotate-key\n * Rotate encryption key (requires master key)\n */\n app.post('/encryption/rotate-key', async (c) => {\n try {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!encryptionManager) {\n return jsonError(c, 501, 'Encryption not configured', 'NOT_CONFIGURED');\n }\n\n const { newMasterKey } = await c.req.json();\n\n if (!newMasterKey || typeof newMasterKey !== 'string') {\n return jsonError(c, 400, 'Missing or invalid newMasterKey', 'VALIDATION_ERROR');\n }\n\n await encryptionManager.rotateKey(newMasterKey);\n\n return c.json({\n success: true,\n message: 'Encryption key rotated successfully',\n timestamp: Date.now(),\n });\n } catch (error) {\n console.error('Key rotation error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to rotate key',\n 'API_ERROR'\n );\n }\n });\n\n /**\n * WebSocket upgrade endpoint for real-time subscriptions\n * GET /realtime\n */\n app.get('/realtime', async (c) => {\n if (!c.req.header('upgrade')?.toLowerCase().includes('websocket')) {\n return jsonError(c, 400, 'WebSocket upgrade required', 'INVALID_UPGRADE');\n }\n\n // Authenticate the connection\n const token = getBearerToken(c);\n if (!token) {\n return jsonError(c, 401, 'Unauthorized', 'UNAUTHORIZED');\n }\n\n const payload = parseJWT(token);\n if (!payload || payload.type !== 'access') {\n return jsonError(c, 401, 'Invalid token', 'UNAUTHORIZED');\n }\n\n const db = getDb(c);\n const userRow = await db\n .prepare('SELECT id, email, created_at, updated_at FROM users WHERE id = ?')\n .bind(payload.userId)\n .first();\n\n if (!userRow) {\n return jsonError(c, 401, 'User not found', 'UNAUTHORIZED');\n }\n\n const user: User = {\n id: userRow.id as string,\n email: userRow.email as string,\n createdAt: userRow.created_at as number,\n updatedAt: userRow.updated_at as number,\n };\n\n // Initialize managers if not done yet (fallback for non-auto-init)\n if (!subscriptionManager) {\n const syncDb = new D1SyncDatabase(db);\n subscriptionManager = new SubscriptionManager(syncDb);\n changeNotifier = new ChangeNotifier(subscriptionManager);\n await subscriptionManager.loadFromDatabase();\n }\n\n const connectionId = `conn_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n try {\n // In Cloudflare Workers, WebSocketPair is available globally\n const upgradeHeader = c.req.header('upgrade');\n if (!upgradeHeader?.toLowerCase().includes('websocket')) {\n return jsonError(c, 400, 'WebSocket upgrade required', 'INVALID_UPGRADE');\n }\n\n // Create WebSocket pair (client/server)\n // @ts-ignore - WebSocketPair is available in Cloudflare Workers runtime\n const { 0: client, 1: server } = new WebSocketPair();\n\n // Register the WebSocket client\n const wsClient = {\n send(message: string) {\n server.send(message);\n },\n close() {\n server.close();\n },\n isOpen() {\n return server.readyState === 1; // OPEN\n },\n };\n\n changeNotifier!.registerClient(connectionId, wsClient);\n\n // Handle incoming messages using addEventListener (Cloudflare Workers API)\n server.addEventListener('message', async (event: any) => {\n try {\n const message = JSON.parse(event.data as string);\n\n switch (message.type) {\n case 'subscribe':\n await subscriptionManager!.subscribe(\n user.id,\n connectionId,\n message.entity,\n message.filters\n );\n server.send(\n JSON.stringify({\n type: 'subscribed',\n subscriptionId: `${message.entity}:${connectionId}`,\n entity: message.entity,\n timestamp: Date.now(),\n })\n );\n break;\n\n case 'unsubscribe':\n const subs = subscriptionManager!.getSubscriptionsForConnection(connectionId);\n for (const sub of subs) {\n if (sub.entity === message.entity && sub.userId === user.id) {\n await subscriptionManager!.unsubscribe(sub.subscriptionId);\n }\n }\n server.send(\n JSON.stringify({\n type: 'unsubscribed',\n entity: message.entity,\n timestamp: Date.now(),\n })\n );\n break;\n\n case 'heartbeat':\n const userSubs = subscriptionManager!.getSubscriptionsForConnection(connectionId);\n for (const sub of userSubs) {\n await subscriptionManager!.updateHeartbeat(sub.subscriptionId);\n }\n break;\n\n default:\n server.send(\n JSON.stringify({\n type: 'error',\n code: 'UNKNOWN_MESSAGE_TYPE',\n message: `Unknown message type: ${message.type}`,\n })\n );\n }\n } catch (error) {\n console.error('WebSocket message error:', error);\n server.send(\n JSON.stringify({\n type: 'error',\n code: 'MESSAGE_ERROR',\n message: 'Failed to process message',\n })\n );\n }\n });\n\n // Handle disconnect using addEventListener\n server.addEventListener('close', async () => {\n console.log(`Client ${connectionId} disconnected`);\n await subscriptionManager!.disconnectClient(connectionId);\n changeNotifier!.unregisterClient(connectionId);\n });\n\n // Handle errors using addEventListener\n server.addEventListener('error', (error: any) => {\n console.error(`WebSocket error for client ${connectionId}:`, error);\n changeNotifier!.unregisterClient(connectionId);\n });\n\n // Send initial greeting\n server.send(\n JSON.stringify({\n type: 'connected',\n connectionId,\n timestamp: Date.now(),\n })\n );\n\n return new Response(client as unknown as BodyInit, {\n status: 101,\n statusText: 'Switching Protocols',\n headers: {\n Upgrade: 'websocket',\n Connection: 'Upgrade',\n },\n });\n } catch (error) {\n console.error('WebSocket connection error:', error);\n return jsonError(c, 500, 'Failed to establish WebSocket connection', 'CONNECTION_ERROR');\n }\n });\n\n /**\n * Get real-time statistics\n * GET /realtime/stats\n */\n app.get('/realtime/stats', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!subscriptionManager || !changeNotifier) {\n return c.json({\n connectedClients: 0,\n subscriptions: {\n totalSubscriptions: 0,\n activeConnections: 0,\n entitiesWithSubscriptions: 0,\n },\n });\n }\n\n return c.json({\n connectedClients: changeNotifier.getConnectedClientsCount(),\n subscriptions: subscriptionManager.getStats(),\n timestamp: Date.now(),\n });\n });\n\n /**\n * POST /transactions/begin\n * Begin a new transaction\n */\n app.post('/transactions/begin', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!transactionManager) {\n return jsonError(c, 503, 'Transaction manager not available', 'SERVICE_UNAVAILABLE');\n }\n\n try {\n const body = await c.req.json();\n const isolationLevel = body.isolationLevel || 'READ_COMMITTED';\n\n const transactionId = await transactionManager.begin(auth.user, isolationLevel);\n\n return c.json({\n transactionId,\n userId: auth.user.id,\n isolationLevel,\n createdAt: Date.now(),\n });\n } catch (error) {\n console.error('Transaction begin error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to begin transaction',\n 'TRANSACTION_ERROR'\n );\n }\n });\n\n /**\n * POST /transactions/:txnId/commit\n * Commit a transaction\n */\n app.post('/transactions/:txnId/commit', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!transactionManager) {\n return jsonError(c, 503, 'Transaction manager not available', 'SERVICE_UNAVAILABLE');\n }\n\n try {\n const transactionId = c.req.param('txnId');\n const transaction = transactionManager.getTransaction(transactionId);\n\n if (!transaction) {\n return jsonError(c, 404, 'Transaction not found', 'NOT_FOUND');\n }\n\n if (transaction.userId !== auth.user.id) {\n return jsonError(c, 403, 'Cannot commit transaction of another user', 'FORBIDDEN');\n }\n\n const result = await transactionManager.commit(transactionId);\n\n return c.json({\n transactionId,\n status: 'committed',\n appliedCount: result.appliedCount,\n errors: result.errors,\n timestamp: Date.now(),\n });\n } catch (error) {\n console.error('Transaction commit error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to commit transaction',\n 'TRANSACTION_ERROR'\n );\n }\n });\n\n /**\n * POST /transactions/:txnId/rollback\n * Rollback a transaction\n */\n app.post('/transactions/:txnId/rollback', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!transactionManager) {\n return jsonError(c, 503, 'Transaction manager not available', 'SERVICE_UNAVAILABLE');\n }\n\n try {\n const transactionId = c.req.param('txnId');\n const transaction = transactionManager.getTransaction(transactionId);\n\n if (!transaction) {\n return jsonError(c, 404, 'Transaction not found', 'NOT_FOUND');\n }\n\n if (transaction.userId !== auth.user.id) {\n return jsonError(c, 403, 'Cannot rollback transaction of another user', 'FORBIDDEN');\n }\n\n await transactionManager.rollback(transactionId);\n\n return c.json({\n transactionId,\n status: 'rolled_back',\n timestamp: Date.now(),\n });\n } catch (error) {\n console.error('Transaction rollback error:', error);\n return jsonError(\n c,\n 400,\n error instanceof Error ? error.message : 'Failed to rollback transaction',\n 'TRANSACTION_ERROR'\n );\n }\n });\n\n /**\n * GET /transactions/:txnId\n * Get transaction status\n */\n app.get('/transactions/:txnId', async (c) => {\n const auth = await requireAccessUser(c);\n if (auth instanceof Response) {\n return auth;\n }\n\n if (!transactionManager) {\n return jsonError(c, 503, 'Transaction manager not available', 'SERVICE_UNAVAILABLE');\n }\n\n try {\n const transactionId = c.req.param('txnId');\n const transaction = transactionManager.getTransaction(transactionId);\n\n if (!transaction) {\n return jsonError(c, 404, 'Transaction not found', 'NOT_FOUND');\n }\n\n if (transaction.userId !== auth.user.id) {\n return jsonError(c, 403, 'Cannot access transaction of another user', 'FORBIDDEN');\n }\n\n return c.json({\n transactionId: transaction.id,\n status: transaction.status,\n isolationLevel: transaction.isolationLevel,\n changeCount: transaction.changes.length,\n createdAt: transaction.createdAt,\n expiresAt: transaction.expiresAt,\n completedAt: transaction.completedAt,\n });\n } catch (error) {\n console.error('Transaction status error:', error);\n return jsonError(c, 500, 'Failed to get transaction status', 'TRANSACTION_ERROR');\n }\n });\n\n // Admin Console integration (optional): external redirect only.\n // Embedded static hosting in the worker is intentionally not supported.\n if (adminConsole) {\n const resolveAdminConsoleConfig = (c: any) => {\n if (typeof adminConsole === 'boolean') {\n return { enabled: adminConsole, path: '/admin', url: undefined as string | undefined };\n }\n\n if (typeof adminConsole === 'function') {\n const config = adminConsole(c);\n return {\n enabled: config.enabled,\n path: config.path || '/admin',\n url: config.url,\n };\n }\n\n return {\n enabled: adminConsole.enabled,\n path: adminConsole.path || '/admin',\n url: adminConsole.url,\n };\n };\n\n const handleAdminConsoleRoute = (c: any) => {\n const config = resolveAdminConsoleConfig(c);\n if (!config.enabled) {\n return c.notFound();\n }\n\n const basePath = (config.path || '/admin').replace(/\\/+$/, '') || '/admin';\n const isAdminRoute = c.req.path === basePath || c.req.path.startsWith(`${basePath}/`);\n if (!isAdminRoute) {\n return c.notFound();\n }\n\n if (!config.url) {\n return c.text(\n 'Embedded admin console is no longer supported. Deploy @edgebasejs/admin-console separately and connect it to this worker URL.',\n 410\n );\n }\n\n const target = new URL(config.url);\n const targetBasePath = target.pathname.replace(/\\/+$/, '');\n const requestSuffix =\n c.req.path === basePath\n ? '/'\n : c.req.path.startsWith(`${basePath}/`)\n ? c.req.path.slice(basePath.length)\n : '/';\n\n target.pathname = `${targetBasePath}${requestSuffix}` || '/';\n target.search = new URL(c.req.url).search;\n\n return c.redirect(target.toString(), 302);\n };\n\n app.get('*', handleAdminConsoleRoute);\n }\n\n return app;\n}\n\nexport default createEdgeBaseWorker;\n", "// EdgeBase schema definition for worker\nimport type { DatabaseSchema } from '@edgebasejs/types';\n\nconst schema: DatabaseSchema = {\n entities: {\n todos: {\n fields: {\n id: {\n type: 'string',\n required: true,\n primary: true,\n },\n userId: {\n type: 'reference',\n reference: 'users',\n required: true,\n },\n title: {\n type: 'string',\n required: true,\n },\n completed: {\n type: 'boolean',\n required: true,\n default: false,\n },\n createdAt: {\n type: 'timestamp',\n required: true,\n },\n updatedAt: {\n type: 'timestamp',\n required: true,\n },\n },\n accessRules: {\n create: (user: any, data: any) => data.userId === user.id,\n read: (user: any, data: any) => data.userId === user.id,\n update: (user: any, existing: any, updates: any) =>\n existing.userId === user.id && (!updates.userId || updates.userId === existing.userId),\n delete: (user: any, existing: any) => existing.userId === user.id,\n },\n indexes: [{ fields: ['userId'] }],\n },\n },\n};\n\nexport default schema;\n", "import { createEdgeBaseWorker } from '@edgebasejs/worker';\nimport schema from '../edgebase.schema';\n\nconst app = createEdgeBaseWorker({\n schema,\n getDb: (c) => c.env.DB,\n getJwtSecret: (c) => c.env.JWT_SECRET,\n getEnvironment: (c) => c.env.ENVIRONMENT,\n getR2Bucket: (c) => c.env.FILES,\n apiVersion: '0.1.0',\n // Auto-initialize database on first request (safe with CREATE TABLE IF NOT EXISTS)\n autoInitialize: true,\n // Admin Console disabled - RSC rendering not supported on Edge Runtime\n // For admin features, deploy a separate instance or use external admin service\n adminConsole: false,\n});\n\nexport default app;\n", "import type { Middleware } from \"./common\";\n\nconst drainBody: Middleware = async (request, env, _ctx, middlewareCtx) => {\n\ttry {\n\t\treturn await middlewareCtx.next(request, env);\n\t} finally {\n\t\ttry {\n\t\t\tif (request.body !== null && !request.bodyUsed) {\n\t\t\t\tconst reader = request.body.getReader();\n\t\t\t\twhile (!(await reader.read()).done) {}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(\"Failed to drain the unused request body.\", e);\n\t\t}\n\t}\n};\n\nexport default drainBody;\n", "import type { Middleware } from \"./common\";\n\ninterface JsonError {\n\tmessage?: string;\n\tname?: string;\n\tstack?: string;\n\tcause?: JsonError;\n}\n\nfunction reduceError(e: any): JsonError {\n\treturn {\n\t\tname: e?.name,\n\t\tmessage: e?.message ?? String(e),\n\t\tstack: e?.stack,\n\t\tcause: e?.cause === undefined ? undefined : reduceError(e.cause),\n\t};\n}\n\n// See comment in `bundle.ts` for details on why this is needed\nconst jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {\n\ttry {\n\t\treturn await middlewareCtx.next(request, env);\n\t} catch (e: any) {\n\t\tconst error = reduceError(e);\n\t\treturn Response.json(error, {\n\t\t\tstatus: 500,\n\t\t\theaders: { \"MF-Experimental-Error-Stack\": \"true\" },\n\t\t});\n\t}\n};\n\nexport default jsonError;\n", "\t\t\t\timport worker, * as OTHER_EXPORTS from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/src/index.ts\";\n\t\t\t\timport * as __MIDDLEWARE_0__ from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/node_modules/wrangler/templates/middleware/middleware-ensure-req-body-drained.ts\";\nimport * as __MIDDLEWARE_1__ from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/node_modules/wrangler/templates/middleware/middleware-miniflare3-json-error.ts\";\n\n\t\t\t\texport * from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/src/index.ts\";\n\n\t\t\t\texport const __INTERNAL_WRANGLER_MIDDLEWARE__ = [\n\t\t\t\t\t\n\t\t\t\t\t__MIDDLEWARE_0__.default,__MIDDLEWARE_1__.default\n\t\t\t\t]\n\t\t\t\texport default worker;", "export type Awaitable<T> = T | Promise<T>;\n// TODO: allow dispatching more events?\nexport type Dispatcher = (\n\ttype: \"scheduled\",\n\tinit: { cron?: string }\n) => Awaitable<void>;\n\nexport type IncomingRequest = Request<\n\tunknown,\n\tIncomingRequestCfProperties<unknown>\n>;\n\nexport interface MiddlewareContext {\n\tdispatch: Dispatcher;\n\tnext(request: IncomingRequest, env: any): Awaitable<Response>;\n}\n\nexport type Middleware = (\n\trequest: IncomingRequest,\n\tenv: any,\n\tctx: ExecutionContext,\n\tmiddlewareCtx: MiddlewareContext\n) => Awaitable<Response>;\n\nconst __facade_middleware__: Middleware[] = [];\n\n// The register functions allow for the insertion of one or many middleware,\n// We register internal middleware first in the stack, but have no way of controlling\n// the order that addMiddleware is run in service workers so need an internal function.\nexport function __facade_register__(...args: (Middleware | Middleware[])[]) {\n\t__facade_middleware__.push(...args.flat());\n}\nexport function __facade_registerInternal__(\n\t...args: (Middleware | Middleware[])[]\n) {\n\t__facade_middleware__.unshift(...args.flat());\n}\n\nfunction __facade_invokeChain__(\n\trequest: IncomingRequest,\n\tenv: any,\n\tctx: ExecutionContext,\n\tdispatch: Dispatcher,\n\tmiddlewareChain: Middleware[]\n): Awaitable<Response> {\n\tconst [head, ...tail] = middlewareChain;\n\tconst middlewareCtx: MiddlewareContext = {\n\t\tdispatch,\n\t\tnext(newRequest, newEnv) {\n\t\t\treturn __facade_invokeChain__(newRequest, newEnv, ctx, dispatch, tail);\n\t\t},\n\t};\n\treturn head(request, env, ctx, middlewareCtx);\n}\n\nexport function __facade_invoke__(\n\trequest: IncomingRequest,\n\tenv: any,\n\tctx: ExecutionContext,\n\tdispatch: Dispatcher,\n\tfinalMiddleware: Middleware\n): Awaitable<Response> {\n\treturn __facade_invokeChain__(request, env, ctx, dispatch, [\n\t\t...__facade_middleware__,\n\t\tfinalMiddleware,\n\t]);\n}\n", "// This loads all middlewares exposed on the middleware object and then starts\n// the invocation chain. The big idea is that we can add these to the middleware\n// export dynamically through wrangler, or we can potentially let users directly\n// add them as a sort of \"plugin\" system.\n\nimport ENTRY, { __INTERNAL_WRANGLER_MIDDLEWARE__ } from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/.wrangler/tmp/bundle-k6w7ik/middleware-insertion-facade.js\";\nimport { __facade_invoke__, __facade_register__, Dispatcher } from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/node_modules/wrangler/templates/middleware/common.ts\";\nimport type { WorkerEntrypointConstructor } from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/.wrangler/tmp/bundle-k6w7ik/middleware-insertion-facade.js\";\n\n// Preserve all the exports from the worker\nexport * from \"/Users/tobikrain/workspace/edgebase/edgebasejs/apps/worker/.wrangler/tmp/bundle-k6w7ik/middleware-insertion-facade.js\";\n\nclass __Facade_ScheduledController__ implements ScheduledController {\n\treadonly #noRetry: ScheduledController[\"noRetry\"];\n\n\tconstructor(\n\t\treadonly scheduledTime: number,\n\t\treadonly cron: string,\n\t\tnoRetry: ScheduledController[\"noRetry\"]\n\t) {\n\t\tthis.#noRetry = noRetry;\n\t}\n\n\tnoRetry() {\n\t\tif (!(this instanceof __Facade_ScheduledController__)) {\n\t\t\tthrow new TypeError(\"Illegal invocation\");\n\t\t}\n\t\t// Need to call native method immediately in case uncaught error thrown\n\t\tthis.#noRetry();\n\t}\n}\n\nfunction wrapExportedHandler(worker: ExportedHandler): ExportedHandler {\n\t// If we don't have any middleware defined, just return the handler as is\n\tif (\n\t\t__INTERNAL_WRANGLER_MIDDLEWARE__ === undefined ||\n\t\t__INTERNAL_WRANGLER_MIDDLEWARE__.length === 0\n\t) {\n\t\treturn worker;\n\t}\n\t// Otherwise, register all middleware once\n\tfor (const middleware of __INTERNAL_WRANGLER_MIDDLEWARE__) {\n\t\t__facade_register__(middleware);\n\t}\n\n\tconst fetchDispatcher: ExportedHandlerFetchHandler = function (\n\t\trequest,\n\t\tenv,\n\t\tctx\n\t) {\n\t\tif (worker.fetch === undefined) {\n\t\t\tthrow new Error(\"Handler does not export a fetch() function.\");\n\t\t}\n\t\treturn worker.fetch(request, env, ctx);\n\t};\n\n\treturn {\n\t\t...worker,\n\t\tfetch(request, env, ctx) {\n\t\t\tconst dispatcher: Dispatcher = function (type, init) {\n\t\t\t\tif (type === \"scheduled\" && worker.scheduled !== undefined) {\n\t\t\t\t\tconst controller = new __Facade_ScheduledController__(\n\t\t\t\t\t\tDate.now(),\n\t\t\t\t\t\tinit.cron ?? \"\",\n\t\t\t\t\t\t() => {}\n\t\t\t\t\t);\n\t\t\t\t\treturn worker.scheduled(controller, env, ctx);\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn __facade_invoke__(request, env, ctx, dispatcher, fetchDispatcher);\n\t\t},\n\t};\n}\n\nfunction wrapWorkerEntrypoint(\n\tklass: WorkerEntrypointConstructor\n): WorkerEntrypointConstructor {\n\t// If we don't have any middleware defined, just return the handler as is\n\tif (\n\t\t__INTERNAL_WRANGLER_MIDDLEWARE__ === undefined ||\n\t\t__INTERNAL_WRANGLER_MIDDLEWARE__.length === 0\n\t) {\n\t\treturn klass;\n\t}\n\t// Otherwise, register all middleware once\n\tfor (const middleware of __INTERNAL_WRANGLER_MIDDLEWARE__) {\n\t\t__facade_register__(middleware);\n\t}\n\n\t// `extend`ing `klass` here so other RPC methods remain callable\n\treturn class extends klass {\n\t\t#fetchDispatcher: ExportedHandlerFetchHandler<Record<string, unknown>> = (\n\t\t\trequest,\n\t\t\tenv,\n\t\t\tctx\n\t\t) => {\n\t\t\tthis.env = env;\n\t\t\tthis.ctx = ctx;\n\t\t\tif (super.fetch === undefined) {\n\t\t\t\tthrow new Error(\"Entrypoint class does not define a fetch() function.\");\n\t\t\t}\n\t\t\treturn super.fetch(request);\n\t\t};\n\n\t\t#dispatcher: Dispatcher = (type, init) => {\n\t\t\tif (type === \"scheduled\" && super.scheduled !== undefined) {\n\t\t\t\tconst controller = new __Facade_ScheduledController__(\n\t\t\t\t\tDate.now(),\n\t\t\t\t\tinit.cron ?? \"\",\n\t\t\t\t\t() => {}\n\t\t\t\t);\n\t\t\t\treturn super.scheduled(controller);\n\t\t\t}\n\t\t};\n\n\t\tfetch(request: Request<unknown, IncomingRequestCfProperties>) {\n\t\t\treturn __facade_invoke__(\n\t\t\t\trequest,\n\t\t\t\tthis.env,\n\t\t\t\tthis.ctx,\n\t\t\t\tthis.#dispatcher,\n\t\t\t\tthis.#fetchDispatcher\n\t\t\t);\n\t\t}\n\t};\n}\n\nlet WRAPPED_ENTRY: ExportedHandler | WorkerEntrypointConstructor | undefined;\nif (typeof ENTRY === \"object\") {\n\tWRAPPED_ENTRY = wrapExportedHandler(ENTRY);\n} else if (typeof ENTRY === \"function\") {\n\tWRAPPED_ENTRY = wrapWorkerEntrypoint(ENTRY);\n}\nexport default WRAPPED_ENTRY;\n"],
6
+ "mappings": "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EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,IAAI;AACJ,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAAD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAeA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAhQgB;AAqQhB,SAAS,kBAAkB,WAA8B;AACvD,UAAQ,UAAU,MAAM;AAAA,IACtB,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAnBS;AAwBF,SAAS,oBAAoB,YAAoB,cAAoC;AAC1F,QAAM,UAAoB,CAAC;AAC3B,QAAM,cAAwB,CAAC;AAG/B,aAAW,CAAC,WAAW,SAAS,KAAK,OAAO,QAAQ,aAAa,MAAM,GAAG;AACxE,UAAM,UAAU,kBAAkB,SAAS;AAC3C,UAAM,QAAkB,CAAC,WAAW,OAAO;AAG3C,QAAI,UAAU,SAAS;AACrB,YAAM,KAAK,aAAa;AAAA,IAC1B;AAGA,QAAI,UAAU,YAAY,CAAC,UAAU,SAAS;AAC5C,YAAM,KAAK,UAAU;AAAA,IACvB;AAGA,QAAI,UAAU,YAAY,QAAW;AACnC,UAAI,OAAO,UAAU,YAAY,UAAU;AACzC,cAAM,KAAK,YAAY,UAAU,UAAU;AAAA,MAC7C,OAAO;AACL,cAAM,KAAK,WAAW,UAAU,SAAS;AAAA,MAC3C;AAAA,IACF;AAEA,YAAQ,KAAK,MAAM,KAAK,GAAG,CAAC;AAG5B,QAAI,UAAU,SAAS,eAAe,UAAU,WAAW;AACzD,kBAAY;AAAA,QACV,gBAAgB,yBAAyB,UAAU;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAGA,QAAM,aAAa,CAAC,GAAG,SAAS,GAAG,WAAW,EAAE,KAAK,WAAW;AAEhE,SAAO,8BAA8B;AAAA,QAC/B;AAAA;AAER;AA5CgB;AAiDT,SAAS,sBAAsB,YAAoB,cAAsC;AAC9F,MAAI,CAAC,aAAa,WAAW,aAAa,QAAQ,WAAW,GAAG;AAC9D,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,aAAa,QAAQ,IAAI,CAAC,OAAO,MAAM;AAC5C,UAAM,YAAY,OAAO,cAAc,MAAM,OAAO,KAAK,GAAG;AAC5D,UAAM,SAAS,MAAM,SAAS,YAAY;AAC1C,UAAM,SAAS,MAAM,OAAO,KAAK,IAAI;AACrC,WAAO,UAAU,6BAA6B,gBAAgB,cAAc;AAAA,EAC9E,CAAC;AACH;AAXgB;AAgBhB,eAAsB,mBACpB,IACAC,SACe;AACf,QAAM,aAAuB,CAAC;AAG9B,aAAW,KAAK,GAAG,qBAAqB,CAAC;AAGzC,aAAW,CAAC,YAAY,YAAY,KAAK,OAAO,QAAQA,QAAO,QAAQ,GAAG;AACxE,eAAW,KAAK,oBAAoB,YAAY,YAAY,CAAC;AAC7D,eAAW,KAAK,GAAG,sBAAsB,YAAY,YAAY,CAAC;AAAA,EACpE;AAGA,aAAW,OAAO,YAAY;AAC5B,UAAM,GAAG,QAAQ,GAAG,EAAE,IAAI;AAAA,EAC5B;AACF;AAnBsB;;;ACrStB,SAAS,UAAU,GAAQ,QAAgBC,QAAe,MAAa;AACrE,SAAO,EAAE,KAAK,EAAE,OAAAA,QAAO,GAAI,OAAO,EAAE,KAAI,IAAK,CAAA,EAAG,GAAI,MAAM;AAC5D;AAFS;AAIT,SAAS,eAAe,GAAM;AAC5B,QAAM,OAAO,EAAE,IAAI,OAAO,eAAe;AACzC,MAAI,CAAC,MAAM;AACT,WAAO;EACT;AACA,SAAO,KAAK,QAAQ,eAAe,EAAE,EAAE,KAAI,KAAM;AACnD;AANS;AAQH,SAAU,qBAAqB,SAA8B;AACjE,QAAM,EACJ,QAAAC,SACA,OACA,cACA,gBACA,MAAM,aACN,aAAa,SACb,iBAAiB,OACjB,aAAY,IACV;AAEJ,QAAMC,OAAM,IAAIC,MAAI;AAEpB,EAAAD,KAAI,IAAI,KAAK,KAAK,WAAW,CAAC;AAE9B,MAAI,gBAAgB;AACpB,MAAI,sBAAkD;AACtD,MAAI,iBAAwC;AAC5C,MAAI,qBAAgD;AACpD,MAAI,iBAAwC;AAC5C,MAAI,gBAAsC;AAC1C,MAAI,eAAoC;AACxC,MAAIE,qBAA8C;AAClD,MAAI,0BAA0D;AAC9D,MAAI,mBAA4C;AAEhD,EAAAF,KAAI,IAAI,KAAK,OAAO,GAAG,SAAQ;AAC7B,UAAM,iBACJ,OAAO,mBAAmB,aAAa,eAAe,CAAC,IAAI;AAE7D,QAAI,kBAAkB,CAAC,eAAe;AACpC,UAAI;AACF,cAAM,mBAAmB,MAAM,CAAC,GAAGD,OAAM;AACzC,wBAAgB;AAGhB,cAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,8BAAsB,IAAI,oBAAoB,EAAE;AAChD,yBAAiB,IAAI,eAAe,mBAAmB;AACvD,6BAAqB,IAAI,mBAAmB,EAAE;AAC9C,yBAAiB,IAAI,eAAe,EAAE;AACtC,wBAAgB,IAAI,cAAc,EAAE;AACpC,uBAAe,IAAI,aAAa,EAAE;AAClC,QAAAG,qBAAoB,IAAI,kBAAiB;AACzC,kCAA0B,IAAI,wBAAwB,EAAE;AACxD,2BAAmB,IAAI,iBAAiB,EAAE;AAG1C,cAAM,mBAAmB,QAAQ;AACjC,YAAI,kBAAkB;AACpB,gBAAM,gBAAgB,iBAAiB,CAAC;AACxC,cAAI,eAAe;AACjB,kBAAMA,mBAAkB,cAAc,aAAa;UACrD;QACF;AAGA,cAAM,oBAAoB,iBAAgB;MAC5C,SAASJ,QAAP;AACA,gBAAQ,MAAM,kCAAkCA,MAAK;MACvD;IACF;AAEA,UAAM,KAAI;EACZ,CAAC;AAED,iBAAe,kBACb,GAAM;AAEN,UAAM,QAAQ,eAAe,CAAC;AAC9B,QAAI,CAAC,OAAO;AACV,aAAO,UAAU,GAAG,KAAK,gBAAgB,cAAc;IACzD;AAEA,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,WAAW,QAAQ,SAAS,UAAU;AACzC,aAAO,UAAU,GAAG,KAAK,iBAAiB,cAAc;IAC1D;AAEA,UAAM,KAAK,MAAM,CAAC;AAClB,UAAM,UAAU,MAAM,GACnB,QAAQ,kEAAkE,EAC1E,KAAK,QAAQ,MAAM,EACnB,MAAK;AAER,QAAI,CAAC,SAAS;AACZ,aAAO,UAAU,GAAG,KAAK,kBAAkB,cAAc;IAC3D;AAEA,UAAM,OAAa;MACjB,IAAI,QAAQ;MACZ,OAAO,QAAQ;MACf,WAAW,QAAQ;MACnB,WAAW,QAAQ;;AAGrB,WAAO,EAAE,MAAM,QAAO;EACxB;AA/Be;AAiCf,iBAAe,mBACb,GAAM;AAEN,UAAM,QAAQ,eAAe,CAAC;AAC9B,QAAI,CAAC,OAAO;AACV,aAAO,UAAU,GAAG,KAAK,gBAAgB,cAAc;IACzD;AAEA,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,WAAW,QAAQ,SAAS,UAAU;AACzC,aAAO,UAAU,GAAG,KAAK,iBAAiB,cAAc;IAC1D;AAEA,UAAM,KAAK,MAAM,CAAC;AAClB,UAAM,WAAW,MAAM,GACpB,QAAQ,oFAAoF,EAC5F,KAAK,QAAQ,MAAM,EACnB,MAAK;AAER,QAAI,CAAC,YAAY,CAAE,SAAS,WAAsB;AAChD,aAAO,UAAU,GAAG,KAAK,mBAAmB,cAAc;IAC5D;AAEA,UAAM,QAAe;MACnB,IAAI,SAAS;MACb,OAAO,SAAS;MAChB,MAAM,SAAS;MACf,UAAW,SAAS,cAAyB;MAC7C,WAAW,SAAS;MACpB,WAAW,SAAS;;AAGtB,WAAO,EAAE,OAAO,QAAO;EACzB;AAjCe;AAmCf,iBAAe,YAAY,IAAkB;AAC3C,UAAM,MAAM,MAAM,GAAG,QAAQ,+BAA+B,EAAE,MAAK;AACnE,WAAO,CAAC,CAAC;EACX;AAHe;AAKf,iBAAe,UAAU,IAAoB,QAAc;AACzD,UAAM,MAAM,MAAM,GAAG,QAAQ,mCAAmC,EAAE,KAAK,MAAM,EAAE,MAAK;AACpF,WAAO,CAAC,CAAC;EACX;AAHe;AAKf,iBAAe,WAAW,IAAkB;AAG1C,UAAM,eAAe,OAAO,KAAKC,QAAO,QAAQ;AAChD,UAAM,eAAe;MACnB;MACA;MACA;MACA;MACA;MACA;;;AAIF,UAAM,YAAY,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,cAAc,GAAG,YAAY,CAAC,CAAC;AAGjE,UAAM,iBAA2B,CAAA;AACjC,eAAW,aAAa,WAAW;AACjC,UAAI;AAEF,cAAM,GAAG,QAAQ,kBAAkB,oBAAoB,EAAE,IAAG;AAC5D,uBAAe,KAAK,SAAS;MAC/B,SAASD,QAAP;AAEA;MACF;IACF;AAEA,WAAO,eAAe,KAAI;EAC5B;AA9Be;AAgCf,WAAS,sBAAsB,WAAmB,SAAiB;AACjE,QAAI,CAAC,QAAQ,SAAS,SAAS,GAAG;AAChC,aAAO;IACT;AACA,WAAO,UAAU,QAAQ,MAAM,IAAI;EACrC;AALS;AAOT,WAAS,cAAc,WAAiB;AACtC,WAAO,CAAC,CAACC,QAAO,SAAS,SAAS;EACpC;AAFS;AAIT,WAAS,oBAAoB,WAAiB;AAC5C,UAAM,SAASA,QAAO,SAAS,SAAS;AACxC,QAAI,CAAC;AAAQ,aAAO;AACpB,UAAM,UAAU,OAAO,QAAQ,OAAO,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,MAAM,MAAM,OAAO;AAC/E,WAAO,UAAU,QAAQ,CAAC,IAAI;EAChC;AALS;AAOT,iBAAe,mBACb,IACA,QACA,UACA,WAAkB;AAElB,UAAM,MAAM,KAAK,IAAG;AACpB,UAAM,WAAW,MAAM,GACpB,QAAQ,sEAAsE,EAC9E,KAAK,QAAQ,QAAQ,EACrB,MAAK;AACR,UAAM,iBAAkB,UAAU,WAAsB;AACxD,UAAM,cAAc,iBAAiB;AAErC,QAAI,WAAW;AACb,YAAM,GACH,QACC,kHAAkH,EAEnH,KAAK,QAAQ,UAAU,aAAa,KAAK,SAAS,EAClD,IAAG;IACR,OAAO;AACL,YAAM,GACH,QACC,mGAAmG,EAEpG,KAAK,QAAQ,UAAU,aAAa,GAAG,EACvC,IAAG;IACR;AAEA,WAAO;EACT;AA/Be;AAiCf,iBAAe,kBACb,QACA,WACA,QACA,UACAI,UAAgB;AAEhB,QAAI,CAAC,uBAAuB,CAAC,gBAAgB;AAC3C;IACF;AAEA,UAAM,gBAAgB,oBAAoB,0BAA0B,MAAM;AAC1E,QAAI,cAAc,WAAW,GAAG;AAC9B;IACF;AAEA,UAAM,UAAU;MACd,MAAM;MACN;MACA;MACA,QAAQ,cAAc,WAAW,SAAS;MAC1C;MACA,WAAW,KAAK,IAAG;MACnB,SAAAA;;AAGF,mBAAe,eACb,SACA,cAAc,IAAI,CAAC,QAAQ,IAAI,cAAc,CAAC;EAElD;AA9Be;AAgCf,iBAAe,gBACb,IACA,SAMA,SACA,WAAiB;AAEjB,UAAM,MAAM,KAAK,IAAG;AACpB,UAAM,UAAU,OAAO,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AACvE,UAAM,aAAa,OAAO,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,UAAU,GAAG,CAAC;AAE1E,UAAM,GACH,QACC;yCACiC,EAElC,KAAK,SAAS,QAAQ,IAAI,WAAW,KAAK,UAAU,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAG,EAC/E,IAAG;AAEN,UAAM,UAAkC;MACtC,gBAAgB;MAChB,kBAAkB;MAClB,GAAG,QAAQ;;AAGb,QAAI;AACJ,QAAI;AACJ,QAAI;AACJ,UAAM,YAAY,KAAK,IAAG;AAE1B,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,QAAQ,KAAK;QACxC,QAAQ;QACR;QACA,MAAM,KAAK,UAAU;UACnB,OAAO;UACP;UACA,WAAW;SACZ;OACF;AACD,mBAAa,SAAS;AACtB,qBAAe,MAAM,SAAS,KAAI;IACpC,SAASL,QAAP;AACA,qBAAeA,kBAAiB,QAAQA,OAAM,UAAU;IAC1D;AAEA,UAAM,WAAW,KAAK,IAAG,IAAK;AAE9B,UAAM,GACH,QACC;+CACuC,EAExC,KACC,YACA,QAAQ,IACR,SACA,QAAQ,KACR,WACA,cAAc,MACd,eAAe,aAAa,UAAU,GAAG,GAAI,IAAI,MACjD,gBAAgB,MAChB,UACA,KAAK,IAAG,CAAE,EAEX,IAAG;AAEN,QAAI,CAAC,cAAc,cAAc,OAAO,cAAc;AACpD,YAAM,GACH,QAAQ,iEAAiE,EACzE,KAAK,KAAK,IAAG,GAAI,gBAAgB,QAAQ,cAAc,OAAO,EAC9D,IAAG;IACR,OAAO;AACL,YAAM,GACH,QAAQ,uEAAuE,EAC/E,KAAK,KAAK,IAAG,GAAI,GAAG,OAAO,EAC3B,IAAG;IACR;AAEA,WAAO,EAAE,YAAY,YAAY,OAAO,aAAY;EACtD;AApFe;AAyFf,EAAAE,KAAI,IAAI,WAAW,CAAC,MAAK;AACvB,WAAO,EAAE,KAAK,EAAE,QAAQ,MAAM,SAAS,WAAU,CAAE;EACrD,CAAC;AAKD,EAAAA,KAAI,IAAI,SAAS,CAAC,MAAK;AACrB,WAAO,EAAE,KAAK;MACZ,MAAM;MACN,SAAS;MACT,aAAa,iBAAiB,eAAe,CAAC,KAAK,YAAY;KAChE;EACH,CAAC;AAKD,EAAAA,KAAI,KAAK,kBAAkB,OAAO,MAAK;AACrC,QAAI;AACF,YAAM,EAAE,OAAO,SAAQ,IAAK,MAAM,EAAE,IAAI,KAAI;AAE5C,UAAI,CAAC,SAAS,CAAC,UAAU;AACvB,eAAO,UAAU,GAAG,KAAK,mCAAmC,kBAAkB;MAChF;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAGhC,YAAM,WAAW,MAAM,GAAG,QAAQ,sCAAsC,EAAE,KAAK,KAAK,EAAE,MAAK;AAE3F,UAAI,UAAU;AACZ,eAAO,UAAU,GAAG,KAAK,uBAAuB,UAAU;MAC5D;AAGA,YAAM,eAAe,MAAM,aAAa,QAAQ;AAGhD,YAAM,SAAS,QAAQ,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAC3E,YAAM,MAAM,KAAK,IAAG;AAEpB,YAAM,GACH,QACC,6FAA6F,EAE9F,KAAK,QAAQ,OAAO,cAAc,KAAK,GAAG,EAC1C,IAAG;AAGN,YAAM,cAAc,UAAU,EAAE,QAAQ,OAAO,MAAM,SAAQ,GAAI,WAAW,IAAI;AAEhF,YAAM,eAAe,UAAU,EAAE,QAAQ,OAAO,MAAM,UAAS,GAAI,WAAW,MAAM;AAGpF,YAAM,iBAAiB,MAAM,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AACjF,YAAM,GACH,QACC,gGAAgG,EAEjG,KAAK,gBAAgB,QAAQ,cAAc,MAAM,QAAW,GAAG,EAC/D,IAAG;AAEN,YAAM,OAAa;QACjB,IAAI;QACJ;QACA,WAAW;QACX,WAAW;;AAGb,YAAM,WAAyB;QAC7B;QACA,QAAQ;UACN;UACA;UACA,WAAW;;;AAIf,aAAO,EAAE,KAAK,UAAU,GAAG;IAC7B,SAASF,QAAP;AACA,cAAQ,MAAM,mBAAmBA,MAAK;AACtC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,uBACzC,kBAAkB;IAEtB;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,eAAe,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,EAAE,OAAO,SAAQ,IAAK,MAAM,EAAE,IAAI,KAAI;AAE5C,UAAI,CAAC,SAAS,CAAC,UAAU;AACvB,eAAO,UAAU,GAAG,KAAK,mCAAmC,kBAAkB;MAChF;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAGhC,YAAM,UAAU,MAAM,GACnB,QACC,oFAAoF,EAErF,KAAK,KAAK,EACV,MAAK;AAER,UAAI,CAAC,SAAS;AACZ,eAAO,UAAU,GAAG,KAAK,uBAAuB,cAAc;MAChE;AAGA,YAAM,gBAAgB,MAAM,eAAe,UAAU,QAAQ,aAAuB;AACpF,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,uBAAuB,cAAc;MAChE;AAGA,YAAM,cAAc,UAClB,EAAE,QAAQ,QAAQ,IAAc,OAAO,QAAQ,OAAiB,MAAM,SAAQ,GAC9E,WACA,IAAI;AAGN,YAAM,eAAe,UACnB,EAAE,QAAQ,QAAQ,IAAc,OAAO,QAAQ,OAAiB,MAAM,UAAS,GAC/E,WACA,MAAM;AAIR,YAAM,MAAM,KAAK,IAAG;AACpB,YAAM,iBAAiB,MAAM,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAC1E,YAAM,GACH,QACC,gGAAgG,EAEjG,KAAK,gBAAgB,QAAQ,IAAI,cAAc,MAAM,QAAW,GAAG,EACnE,IAAG;AAEN,YAAM,OAAa;QACjB,IAAI,QAAQ;QACZ,OAAO,QAAQ;QACf,WAAW,QAAQ;QACnB,WAAW,QAAQ;;AAGrB,YAAM,WAAyB;QAC7B;QACA,QAAQ;UACN;UACA;UACA,WAAW;;;AAIf,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,gBAAgBA,MAAK;AACnC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,gBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,qBAAqB,OAAO,MAAK;AACxC,QAAI;AACF,YAAM,OAA0B,MAAM,EAAE,IAAI,KAAI;AAChD,YAAM,EAAE,OAAO,SAAQ,IAAK,QAAQ,CAAA;AAEpC,UAAI,CAAC,SAAS,CAAC,UAAU;AACvB,eAAO,UAAU,GAAG,KAAK,mCAAmC,kBAAkB;MAChF;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAEhC,YAAM,WAAW,MAAM,GACpB,QACC,sGAAsG,EAEvG,KAAK,KAAK,EACV,MAAK;AAER,UAAI,CAAC,YAAY,CAAE,SAAS,WAAsB;AAChD,eAAO,UAAU,GAAG,KAAK,uBAAuB,cAAc;MAChE;AAEA,YAAM,gBAAgB,MAAM,eAAe,UAAU,SAAS,aAAuB;AACrF,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,uBAAuB,cAAc;MAChE;AAEA,YAAM,cAAc,UAClB,EAAE,QAAQ,SAAS,IAAc,OAAO,SAAS,OAAiB,MAAM,SAAQ,GAChF,WACA,IAAI;AAGN,YAAM,eAAe,UACnB,EAAE,QAAQ,SAAS,IAAc,OAAO,SAAS,OAAiB,MAAM,UAAS,GACjF,WACA,MAAM;AAGR,YAAM,MAAM,KAAK,IAAG;AACpB,YAAM,iBAAiB,OAAO,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAC3E,YAAM,GACH,QACC,uGAAuG,EAExG,KAAK,gBAAgB,SAAS,IAAI,cAAc,MAAM,QAAW,GAAG,EACpE,IAAG;AAEN,YAAM,QAAe;QACnB,IAAI,SAAS;QACb,OAAO,SAAS;QAChB,MAAM,SAAS;QACf,UAAW,SAAS,cAAyB;QAC7C,WAAW,SAAS;QACpB,WAAW,SAAS;;AAGtB,YAAM,WAA8B;QAClC;QACA;QACA;QACA,WAAW;;AAGb,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,sBAAsBA,MAAK;AACzC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,gBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,wBAAwB,OAAO,MAAK;AAC3C,QAAI;AACF,YAAM,OAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,EAAE,OAAO,SAAQ,IAAK,QAAQ,CAAA;AAEpC,UAAI,CAAC,SAAS,CAAC,UAAU;AACvB,eAAO,UAAU,GAAG,KAAK,mCAAmC,kBAAkB;MAChF;AAEA,UAAI,SAAS,SAAS,GAAG;AACvB,eAAO,UAAU,GAAG,KAAK,0CAA0C,kBAAkB;MACvF;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAGhC,YAAM,iBAAkB,MAAM,GAAG,QAAQ,sCAAsC,EAAE,MAAK;AAItF,YAAM,eAAe,CAAC,kBAAkB,eAAe,UAAU;AAEjE,UAAI,CAAC,cAAc;AACjB,eAAO,UACL,GACA,KACA,wEACA,WAAW;MAEf;AAEA,YAAM,YAA2B;AAGjC,YAAM,gBAAgB,MAAM,GACzB,QAAQ,uCAAuC,EAC/C,KAAK,KAAK,EACV,MAAK;AAER,UAAI,eAAe;AACjB,eAAO,UAAU,GAAG,KAAK,wBAAwB,kBAAkB;MACrE;AAGA,YAAM,MAAM,KAAK,IAAG;AACpB,YAAM,UAAU,SAAS,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AACtE,YAAM,eAAe,MAAM,aAAa,QAAQ;AAEhD,YAAM,GACH,QACC,qHAAqH,EAEtH,KAAK,SAAS,OAAO,cAAc,WAAW,GAAG,KAAK,GAAG,EACzD,IAAG;AAGN,YAAM,cAAc,UAAU,EAAE,QAAQ,SAAS,OAAO,MAAM,SAAQ,GAAI,WAAW,IAAI;AAEzF,YAAM,eAAe,UACnB,EAAE,QAAQ,SAAS,OAAO,MAAM,UAAS,GACzC,WACA,MAAM;AAGR,YAAM,iBAAiB,OAAO,OAAO,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAC3E,YAAM,GACH,QACC,uGAAuG,EAExG,KAAK,gBAAgB,SAAS,cAAc,MAAM,QAAW,GAAG,EAChE,IAAG;AAEN,YAAM,QAAe;QACnB,IAAI;QACJ;QACA,MAAM;QACN,UAAU;QACV,WAAW;QACX,WAAW;;AAGb,YAAM,WAA8B;QAClC;QACA;QACA;QACA,WAAW;;AAGb,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,uBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,uBAAuB,OAAO,MAAK;AAC1C,QAAI;AACF,YAAM,OAA4B,MAAM,EAAE,IAAI,KAAI;AAClD,YAAM,eAAe,MAAM;AAE3B,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,6BAA6B,kBAAkB;MAC1E;AAEA,YAAM,UAAU,SAAS,YAAY;AACrC,UAAI,CAAC,WAAW,QAAQ,SAAS,WAAW;AAC1C,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAEhC,YAAM,WAAW,MAAM,GACpB,QACC;;;6BAGmB,EAEpB,KAAK,YAAY,EACjB,MAAK;AAER,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,UAAK,SAAS,aAAwB,KAAK,IAAG,GAAI;AAChD,cAAM,GACH,QAAQ,kDAAkD,EAC1D,KAAK,YAAY,EACjB,IAAG;AACN,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,YAAM,cAAc,UAClB,EAAE,QAAQ,SAAS,UAAoB,OAAO,SAAS,OAAiB,MAAM,SAAQ,GACtF,WACA,IAAI;AAGN,aAAO,EAAE,KAAK,EAAE,aAAa,WAAW,KAAI,CAAE;IAChD,SAASF,QAAP;AACA,cAAQ,MAAM,8BAA8BA,MAAK;AACjD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,sBAAsB,OAAO,MAAK;AACzC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,GACH,QAAQ,qDAAqD,EAC7D,KAAK,KAAK,MAAM,EAAE,EAClB,IAAG;AAEN,aAAO,EAAE,KAAK,EAAE,SAAS,2BAA2B,SAAS,KAAK,MAAM,GAAE,CAAE;IAC9E,SAASF,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UAAU,GAAG,KAAK,iBAAiB,WAAW;IACvD;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,uBAAuB,OAAO,MAAK;AACzC,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,qBAAqB,MAAM,YAAY,EAAE;AAE/C,aAAO,EAAE,KAAK;QACZ,aAAa;QACb,aAAa,CAAC;OACf;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UAAU,GAAG,KAAK,+BAA+B,WAAW;IACrE;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,iBAAiB,OAAO,MAAK;AACnC,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,WAAW,MAAM,YAAY,EAAE;AACrC,UAAI,CAAC,UAAU;AACb,eAAO,EAAE,KAAK,CAAA,CAAE;MAClB;AAEA,YAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,OAAO,MAAM,GAChB,QAAQ,uEAAuE,EAC/E,IAAG;AAEN,YAAM,UAAmB,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QAC/D,IAAI,IAAI;QACR,OAAO,IAAI;QACX,MAAM,IAAI;QACV,UAAW,IAAI,cAAyB;QACxC,WAAW,IAAI;QACf,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK,MAAM;IACtB,SAASF,QAAP;AACA,cAAQ,MAAM,qBAAqBA,MAAK;AACxC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,0BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,iBAAiB,OAAO,MAAK;AACpC,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,WAAW,MAAM,YAAY,EAAE;AAErC,UAAI,UAAU;AACZ,cAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,YAAI,gBAAgB,UAAU;AAC5B,iBAAO;QACT;AACA,YAAI,KAAK,MAAM,SAAS,eAAe;AACrC,iBAAO,UAAU,GAAG,KAAK,4BAA4B,WAAW;QAClE;MACF;AAEA,YAAM,OAA2B,MAAM,EAAE,IAAI,KAAI;AACjD,YAAM,EAAE,OAAO,UAAU,KAAI,IAAK,QAAQ,CAAA;AAE1C,UAAI,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM;AAChC,eAAO,UAAU,GAAG,KAAK,0CAA0C,kBAAkB;MACvF;AAEA,YAAM,WAAW,MAAM,GACpB,QAAQ,uCAAuC,EAC/C,KAAK,KAAK,EACV,MAAK;AACR,UAAI,UAAU;AACZ,eAAO,UAAU,GAAG,KAAK,wBAAwB,UAAU;MAC7D;AAEA,YAAM,eAAe,MAAM,aAAa,QAAQ;AAChD,YAAM,UAAU,SAAS,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAC7E,YAAM,MAAM,KAAK,IAAG;AAEpB,YAAM,GACH,QACC,qHAAqH,EAEtH,KAAK,SAAS,OAAO,cAAc,MAAM,GAAG,KAAK,GAAG,EACpD,IAAG;AAEN,YAAM,QAAe;QACnB,IAAI;QACJ;QACA;QACA,UAAU;QACV,WAAW;QACX,WAAW;;AAGb,aAAO,EAAE,KAAK,OAAO,GAAG;IAC1B,SAASF,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,yBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,gBAAgB,OAAO,MAAK;AAClC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,OAAO,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,EAAE,GAAG,CAAC;AACjE,YAAM,WAAW,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AACzF,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,UAAU,OAAO,KAAK;AAE5B,YAAM,SAAgB,CAAA;AACtB,UAAI,cAAc;AAClB,UAAI,QAAQ;AACV,sBAAc;AACd,eAAO,KAAK,IAAI,SAAS;MAC3B;AAEA,YAAM,WAAW,MAAM,GACpB,QAAQ,uCAAuC,aAAa,EAC5D,KAAK,GAAG,MAAM,EACd,MAAK;AACR,YAAM,QAAS,UAAU,SAAoB;AAE7C,YAAM,cAAc,MAAM,GACvB,QACC,uDAAuD,uDAAuD,EAE/G,KAAK,GAAG,QAAQ,UAAU,MAAM,EAChC,IAAG;AAEN,YAAM,QAAgB,aAAa,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACnE,IAAI,IAAI;QACR,OAAO,IAAI;QACX,WAAW,IAAI;QACf,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK;QACZ;QACA,YAAY;UACV;UACA;UACA;UACA,YAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK;;OAE9C;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,yBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,oBAAoB,OAAO,MAAK;AACtC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAC/B,YAAM,MAAM,MAAM,GACf,QAAQ,kEAAkE,EAC1E,KAAK,MAAM,EACX,MAAK;AAER,UAAI,CAAC,KAAK;AACR,eAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;MACxD;AAEA,aAAO,EAAE,KAAK;QACZ,IAAI,IAAI;QACR,OAAO,IAAI;QACX,WAAW,IAAI;QACf,WAAW,IAAI;OAChB;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,yBAAyBA,MAAK;AAC5C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,MAAM,oBAAoB,OAAO,MAAK;AACxC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAC/B,YAAM,UAAU,MAAM,EAAE,IAAI,KAAI;AAEhC,YAAM,SAAmB,CAAA;AACzB,YAAM,SAAgB,CAAA;AAEtB,UAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,MAAM,KAAI,GAAI;AAC7D,eAAO,KAAK,WAAW;AACvB,eAAO,KAAK,QAAQ,MAAM,KAAI,CAAE;MAClC;AAEA,UAAI,OAAO,WAAW,GAAG;AACvB,eAAO,UAAU,GAAG,KAAK,6BAA6B,kBAAkB;MAC1E;AAEA,aAAO,KAAK,gBAAgB;AAC5B,aAAO,KAAK,KAAK,IAAG,CAAE;AAEtB,YAAM,GACH,QAAQ,oBAAoB,OAAO,KAAK,IAAI,gBAAgB,EAC5D,KAAK,GAAG,QAAQ,MAAM,EACtB,IAAG;AAEN,YAAM,MAAM,MAAM,GACf,QAAQ,kEAAkE,EAC1E,KAAK,MAAM,EACX,MAAK;AAER,UAAI,CAAC,KAAK;AACR,eAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;MACxD;AAEA,aAAO,EAAE,KAAK;QACZ,IAAI,IAAI;QACR,OAAO,IAAI;QACX,WAAW,IAAI;QACf,WAAW,IAAI;OAChB;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,yBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,OAAO,oBAAoB,OAAO,MAAK;AACzC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAE/B,YAAM,WAAW,MAAM,GAAG,QAAQ,mCAAmC,EAAE,KAAK,MAAM,EAAE,MAAK;AACzF,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;MACxD;AAEA,YAAM,GAAG,QAAQ,gCAAgC,EAAE,KAAK,MAAM,EAAE,IAAG;AAEnE,aAAO,EAAE,KAAK,EAAE,SAAS,MAAM,SAAS,eAAc,CAAE;IAC1D,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,yBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,6BAA6B,OAAO,MAAK;AAC/C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAC/B,YAAM,OAAO,MAAM,GAChB,QACC,2GAA2G,EAE5G,KAAK,MAAM,EACX,IAAG;AAEN,YAAM,YAAY,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACxD,IAAI,IAAI;QACR,QAAQ,IAAI;QACZ,WAAW,IAAI;QACf,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK,EAAE,SAAQ,CAAE;IAC5B,SAASF,QAAP;AACA,cAAQ,MAAM,8BAA8BA,MAAK;AACjD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,OAAO,6BAA6B,OAAO,MAAK;AAClD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAC/B,YAAM,GAAG,QAAQ,8CAA8C,EAAE,KAAK,MAAM,EAAE,IAAG;AACjF,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,6BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,OAAO,8BAA8B,OAAO,MAAK;AACnD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,GAAG,QAAQ,yCAAyC,EAAE,KAAK,SAAS,EAAE,IAAG;AAC/E,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,gCAAgC,OAAO,MAAK;AAClD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,EAAE,IAAI,MAAM,IAAI;AAC/B,YAAM,OAAO,MAAM,GAChB,QACC,wJAAwJ,EAEzJ,KAAK,MAAM,EACX,IAAG;AAEN,YAAM,UAAU,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACtD,IAAI,IAAI;QACR,QAAQ,IAAI;QACZ,OAAO,IAAI;QACX,UAAU,IAAI;QACd,UAAU,IAAI,YAAY;QAC1B,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,IAAI,IAAI;QACxC,YAAY,IAAI,eAAe;QAC/B,WAAW,IAAI;QACf,YAAY,IAAI;QAChB;AAEF,aAAO,EAAE,KAAK,EAAE,OAAM,CAAE;IAC1B,SAASF,QAAP;AACA,cAAQ,MAAM,iCAAiCA,MAAK;AACpD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,+BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,0BAA0B,OAAO,MAAK;AAC5C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,SAAS,CAAA;AAEf,iBAAW,QAAQ,YAAY;AAC7B,cAAM,WAAW,sBAAsB,MAAM,UAAU;AACvD,YAAI,CAAC;AAAU;AACf,cAAM,WAAW,MAAM,GAAG,QAAQ,kCAAkC,WAAW,EAAE,MAAK;AACtF,eAAO,KAAK,EAAE,MAAM,UAAW,UAAU,SAAoB,EAAC,CAAE;MAClE;AAEA,aAAO,EAAE,KAAK,MAAM;IACtB,SAASF,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,0BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,uCAAuC,OAAO,MAAK;AACzD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,EAAE,IAAI,MAAM,MAAM;AACpC,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,WAAW,sBAAsB,WAAW,UAAU;AAC5D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,mBAAmB,WAAW;MACzD;AAEA,YAAM,gBAAgB,MAAM,GAAG,QAAQ,sBAAsB,YAAY,EAAE,IAAG;AAC9E,YAAM,WAMA,eAAe,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACrD,MAAM,IAAI;QACV,MAAM,IAAI;QACV,UAAU,IAAI,YAAY;QAC1B,YAAY,IAAI,OAAO;QACvB,cAAc,IAAI;QAClB;AACF,YAAM,aAAa,QAAQ,OAAO,CAAC,QAAQ,IAAI,UAAU,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;AAEhF,aAAO,EAAE,KAAK;QACZ,MAAM;QACN;QACA;OACD;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,0BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,qCAAqC,OAAO,MAAK;AACvD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,EAAE,IAAI,MAAM,MAAM;AACpC,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,WAAW,sBAAsB,WAAW,UAAU;AAC5D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,mBAAmB,WAAW;MACzD;AAEA,YAAM,OAAO,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,EAAE,GAAG,CAAC;AACjE,YAAM,WAAW,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AACzF,YAAM,UAAU,OAAO,KAAK;AAE5B,YAAM,gBAAgB,MAAM,GAAG,QAAQ,sBAAsB,YAAY,EAAE,IAAG;AAC9E,YAAM,WAMA,eAAe,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACrD,MAAM,IAAI;QACV,MAAM,IAAI;QACV,UAAU,IAAI,YAAY;QAC1B,YAAY,IAAI,OAAO;QACvB,cAAc,IAAI;QAClB;AAEF,YAAM,WAAW,MAAM,GAAG,QAAQ,kCAAkC,WAAW,EAAE,MAAK;AACtF,YAAM,QAAS,UAAU,SAAoB;AAE7C,YAAM,aAAa,MAAM,GACtB,QAAQ,kBAAkB,4BAA4B,EACtD,KAAK,UAAU,MAAM,EACrB,IAAG;AAEN,aAAO,EAAE,KAAK;QACZ;QACA,MAAM,YAAY,WAAW,CAAA;QAC7B;QACA,YAAY;UACV;UACA;UACA;UACA,YAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK;;OAE9C;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,8BACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,qCAAqC,OAAO,MAAK;AACxD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,UAAM,YAAY,EAAE,IAAI,MAAM,MAAM;AACpC,QAAI,CAAC,cAAc,SAAS,GAAG;AAC7B,aAAO,UAAU,GAAG,KAAK,uCAAuC,WAAW;IAC7E;AAEA,UAAM,aAAa,oBAAoB,SAAS;AAChD,QAAI,CAAC,cAAc,eAAe,MAAM;AACtC,aAAO,UAAU,GAAG,KAAK,oCAAoC,kBAAkB;IACjF;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,WAAW,sBAAsB,WAAW,UAAU;AAC5D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,mBAAmB,WAAW;MACzD;AAEA,YAAM,OAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,gBAAgB,MAAM,GAAG,QAAQ,sBAAsB,YAAY,EAAE,IAAG;AAC9E,YAAM,WAAW,eAAe,WAAW,CAAA,GAAI,IAAI,CAACI,SAAaA,KAAI,IAAc;AAEnF,UAAI,CAAC,KAAK,IAAI;AACZ,aAAK,KAAK,GAAG,aAAa,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;MAC/E;AAEA,UAAI,QAAQ,SAAS,WAAW,KAAK,KAAK,aAAa;AAAM,aAAK,YAAY,KAAK,IAAG;AACtF,UAAI,QAAQ,SAAS,WAAW,KAAK,KAAK,aAAa;AAAM,aAAK,YAAY,KAAK,IAAG;AACtF,UAAI,QAAQ,SAAS,YAAY,KAAK,KAAK,cAAc;AAAM,aAAK,aAAa,KAAK,IAAG;AACzF,UAAI,QAAQ,SAAS,YAAY,KAAK,KAAK,cAAc;AAAM,aAAK,aAAa,KAAK,IAAG;AAEzF,YAAM,gBAAgB,OAAO,KAAK,IAAI,EAAE,OAAO,CAAC,QAAQ,QAAQ,SAAS,GAAG,CAAC;AAC7E,UAAI,CAAC,cAAc,SAAS,IAAI,GAAG;AACjC,sBAAc,QAAQ,IAAI;AAC1B,aAAK,KAAK,KAAK,MAAM,GAAG,aAAa,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,GAAG,CAAC;MAC1F;AAEA,YAAM,eAAe,cAAc,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI;AAC3D,YAAM,SAAS,cAAc,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;AAEnD,YAAM,GACH,QAAQ,gBAAgB,cAAc,cAAc,KAAK,IAAI,cAAc,eAAe,EAC1F,KAAK,GAAG,MAAM,EACd,IAAG;AAEN,YAAMD,WAAU,MAAM,mBAAmB,IAAI,WAAW,KAAK,EAAE;AAE/D,YAAM,MAAM,MAAM,GACf,QAAQ,kBAAkB,wBAAwB,EAClD,KAAK,KAAK,EAAE,EACZ,MAAK;AAER,YAAM,kBAAkB,WAAW,UAAW,OAAe,MAAM,KAAK,IAAIA,QAAO;AAEnF,UAAI,gBAAgB;AAClB,cAAM,eAAe,aAAa;UAChC,WAAW;UACX,QAAQ;UACR,UAAU,KAAK;UACf,WAAW;UACX,MAAM,OAAO;UACb,QAAQ,KAAK,MAAM;SACpB;MACH;AAEA,UAAI,gBAAiB,MAAM,UAAU,IAAI,KAAK,MAAM,EAAE,GAAI;AACxD,cAAM,aAAa,UACjB;UACE,IAAI,KAAK,MAAM;UACf,OAAO,KAAK,MAAM;UAClB,WAAW,KAAK,IAAG;UACnB,WAAW,KAAK,IAAG;WAErB,WACA,KAAK,IACL,UACA,QACA,OAAO,IAAI;MAEf;AAEA,aAAO,EAAE,KAAK,OAAO,MAAM,GAAG;IAChC,SAASL,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,MAAM,yCAAyC,OAAO,MAAK;AAC7D,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,UAAM,YAAY,EAAE,IAAI,MAAM,MAAM;AACpC,QAAI,CAAC,cAAc,SAAS,GAAG;AAC7B,aAAO,UAAU,GAAG,KAAK,uCAAuC,WAAW;IAC7E;AAEA,UAAM,aAAa,oBAAoB,SAAS;AAChD,QAAI,CAAC,cAAc,eAAe,MAAM;AACtC,aAAO,UAAU,GAAG,KAAK,oCAAoC,kBAAkB;IACjF;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,WAAW,sBAAsB,WAAW,UAAU;AAC5D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,mBAAmB,WAAW;MACzD;AAEA,YAAM,WAAW,EAAE,IAAI,MAAM,IAAI;AACjC,YAAM,UAAW,MAAM,EAAE,IAAI,KAAI;AAEjC,YAAM,WAAW,MAAM,GACpB,QAAQ,kBAAkB,wBAAwB,EAClD,KAAK,QAAQ,EACb,MAAK;AACR,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,oBAAoB,WAAW;MAC1D;AAEA,YAAM,gBAAgB,MAAM,GAAG,QAAQ,sBAAsB,YAAY,EAAE,IAAG;AAC9E,YAAM,WAAW,eAAe,WAAW,CAAA,GAAI,IAAI,CAACI,SAAaA,KAAI,IAAc;AAEnF,UAAI,QAAQ,SAAS,WAAW,KAAK,QAAQ,aAAa;AACxD,gBAAQ,YAAY,KAAK,IAAG;AAC9B,UAAI,QAAQ,SAAS,YAAY,KAAK,QAAQ,cAAc;AAC1D,gBAAQ,aAAa,KAAK,IAAG;AAE/B,YAAM,gBAAgB,OAAO,KAAK,OAAO,EAAE,OACzC,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,GAAG,CAAC;AAEhD,UAAI,cAAc,WAAW,GAAG;AAC9B,eAAO,UAAU,GAAG,KAAK,6BAA6B,kBAAkB;MAC1E;AAEA,YAAM,cAAc,cAAc,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,KAAK,IAAI;AACtE,YAAM,SAAS,cAAc,IAAI,CAAC,QAAQ,QAAQ,GAAG,CAAC;AAEtD,YAAM,GACH,QAAQ,WAAW,iBAAiB,0BAA0B,EAC9D,KAAK,GAAG,QAAQ,QAAQ,EACxB,IAAG;AAEN,YAAMD,WAAU,MAAM,mBAAmB,IAAI,WAAW,QAAQ;AAChE,YAAM,MAAM,MAAM,GACf,QAAQ,kBAAkB,wBAAwB,EAClD,KAAK,QAAQ,EACb,MAAK;AAER,YAAM,kBAAkB,WAAW,UAAW,OAAe,SAAS,UAAUA,QAAO;AAEvF,UAAI,gBAAgB;AAClB,cAAM,eAAe,aAAa;UAChC,WAAW;UACX,QAAQ;UACR;UACA,WAAW;UACX,MAAM,OAAO;UACb,QAAQ,KAAK,MAAM;SACpB;MACH;AAEA,UAAI,gBAAiB,MAAM,UAAU,IAAI,KAAK,MAAM,EAAE,GAAI;AACxD,cAAM,aAAa,UACjB;UACE,IAAI,KAAK,MAAM;UACf,OAAO,KAAK,MAAM;UAClB,WAAW,KAAK,IAAG;UACnB,WAAW,KAAK,IAAG;WAErB,WACA,UACA,UACA,UACA,OAAO,OAAO;MAElB;AAEA,aAAO,EAAE,KAAK,OAAO,OAAO;IAC9B,SAASL,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,OAAO,yCAAyC,OAAO,MAAK;AAC9D,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,UAAM,YAAY,EAAE,IAAI,MAAM,MAAM;AACpC,QAAI,CAAC,cAAc,SAAS,GAAG;AAC7B,aAAO,UAAU,GAAG,KAAK,uCAAuC,WAAW;IAC7E;AAEA,UAAM,aAAa,oBAAoB,SAAS;AAChD,QAAI,CAAC,cAAc,eAAe,MAAM;AACtC,aAAO,UAAU,GAAG,KAAK,oCAAoC,kBAAkB;IACjF;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,aAAa,MAAM,WAAW,EAAE;AACtC,YAAM,WAAW,sBAAsB,WAAW,UAAU;AAC5D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,mBAAmB,WAAW;MACzD;AAEA,YAAM,WAAW,EAAE,IAAI,MAAM,IAAI;AACjC,YAAM,WAAW,MAAM,GACpB,QAAQ,kBAAkB,wBAAwB,EAClD,KAAK,QAAQ,EACb,MAAK;AACR,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,oBAAoB,WAAW;MAC1D;AAEA,YAAM,GAAG,QAAQ,gBAAgB,wBAAwB,EAAE,KAAK,QAAQ,EAAE,IAAG;AAE7E,YAAMG,WAAU,MAAM,mBAAmB,IAAI,WAAW,UAAU,KAAK,IAAG,CAAE;AAE5E,YAAM,kBAAkB,WAAW,UAAU,CAAA,GAAI,UAAUA,QAAO;AAElE,UAAI,gBAAgB;AAClB,cAAM,eAAe,aAAa;UAChC,WAAW;UACX,QAAQ;UACR;UACA,WAAW;UACX,MAAM,CAAA;UACN,QAAQ,KAAK,MAAM;SACpB;MACH;AAEA,UAAI,gBAAiB,MAAM,UAAU,IAAI,KAAK,MAAM,EAAE,GAAI;AACxD,cAAM,aAAa,UACjB;UACE,IAAI,KAAK,MAAM;UACf,OAAO,KAAK,MAAM;UAClB,WAAW,KAAK,IAAG;UACnB,WAAW,KAAK,IAAG;WAErB,WACA,UACA,UACA,UACA,MAAS;MAEb;AAEA,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASL,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,kBAAkB,OAAO,MAAK;AACpC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,WAAO,EAAE,KAAK;MACZ,SAAS;MACT,WAAW,KAAK,IAAG;MACnB,SAASD,QAAO;KACjB;EACH,CAAC;AAMD,EAAAC,KAAI,IAAI,yBAAyB,OAAO,MAAK;AAC3C,WAAO,EAAE,KAAK;MACZ,SAAS;MACT,WAAW,KAAK,IAAG;MACnB,QAAQ;QACN,UAAUD,QAAO;;KAEpB;EACH,CAAC;AAKD,EAAAC,KAAI,IAAI,mBAAmB,OAAO,MAAK;AACrC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,OAAO,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,EAAE,GAAG,CAAC;AACjE,YAAM,WAAW,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AACzF,YAAM,UAAU,OAAO,KAAK;AAE5B,YAAM,aAAuB,CAAA;AAC7B,YAAM,SAAgB,CAAA;AAEtB,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AACrC,UAAI,SAAS;AACX,mBAAW,KAAK,aAAa;AAC7B,eAAO,KAAK,OAAO;MACrB;AAEA,YAAM,aAAa,EAAE,IAAI,MAAM,YAAY;AAC3C,UAAI,YAAY;AACd,mBAAW,KAAK,YAAY;AAC5B,eAAO,KAAK,UAAU;MACxB;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,QAAQ;AACV,mBAAW,KAAK,eAAe;AAC/B,eAAO,KAAK,MAAM;MACpB;AAEA,YAAM,WAAW,EAAE,IAAI,MAAM,UAAU;AACvC,UAAI,UAAU;AACZ,mBAAW,KAAK,iBAAiB;AACjC,eAAO,KAAK,OAAO,QAAQ,CAAC;MAC9B;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,QAAQ;AACV,mBAAW,KAAK,iBAAiB;AACjC,eAAO,KAAK,OAAO,MAAM,CAAC;MAC5B;AAEA,YAAM,cAAc,WAAW,SAAS,SAAS,WAAW,KAAK,OAAO,MAAM;AAE9E,YAAM,WAAW,MAAM,GACpB,QAAQ,4CAA4C,aAAa,EACjE,KAAK,GAAG,MAAM,EACd,MAAK;AACR,YAAM,QAAS,UAAU,SAAoB;AAE7C,YAAM,OAAO,MAAM,GAChB,QACC,4BAA4B,uDAAuD,EAEpF,KAAK,GAAG,QAAQ,UAAU,MAAM,EAChC,IAAG;AAEN,YAAM,UAAU,CAAA;AAChB,iBAAW,OAAO,MAAM,WAAW,CAAA,GAAI;AACrC,cAAM,SAAU,IAAY;AAC5B,cAAM,kBACJ,WAAW,WAAW,UAAU,WAAW,UAAU,SAAS;AAChE,gBAAQ,KAAK;UACX,IAAK,IAAY;UACjB,SAAU,IAAY;UACtB,YAAY;UACZ,QAAS,IAAY;UACrB,YAAY;UACZ,UAAW,IAAY;UACvB,SAAU,IAAY,UAAU,KAAK,MAAO,IAAY,OAAO,IAAI,CAAA;UACnE,WAAW;UACX,WAAY,IAAY;SACzB;MACH;AAEA,aAAO,EAAE,KAAK;QACZ,MAAM;QACN,YAAY;UACV;UACA;UACA;UACA,YAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK;;OAE9C;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,yBAAyBA,MAAK;AAC5C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,gCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,mBAAmB,OAAO,MAAK;AACrC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,OAAO,MAAM,GAAG,QAAQ,iDAAiD,EAAE,IAAG;AAEpF,YAAM,YAAY,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACxD,IAAI,IAAI;QACR,QAAQ,IAAI;QACZ,KAAK,IAAI;QACT,QAAQ,KAAK,MAAM,IAAI,MAAM;QAC7B,UAAU,IAAI,cAAc;QAC5B,aAAa,IAAI,eAAe;QAChC,SAAS,IAAI,UAAU,KAAK,MAAM,IAAI,OAAO,IAAI;QACjD,WAAW,IAAI;QACf,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK,EAAE,SAAQ,CAAE;IAC5B,SAASF,QAAP;AACA,cAAQ,MAAM,8BAA8BA,MAAK;AACjD,aAAO,UAAU,GAAG,KAAK,2BAA2B,WAAW;IACjE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,mBAAmB,OAAO,MAAK;AACtC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,EAAE,QAAQ,KAAK,QAAQ,aAAa,QAAO,IAAK,MAAM,EAAE,IAAI,KAAI;AAEtE,UAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AACpE,eAAO,UAAU,GAAG,KAAK,kCAAkC,kBAAkB;MAC/E;AAEA,YAAM,UAAU,MAAM,GACnB,QAAQ,kEAAkE,EAC1E,KAAK,MAAM,EACX,MAAK;AAER,UAAI,CAAC,SAAS;AACZ,eAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;MACxD;AAEA,YAAM,UAAU,MAAM,eAAe,gBACnC;QACE,IAAI,QAAQ;QACZ,OAAO,QAAQ;QACf,WAAW,QAAQ;QACnB,WAAW,QAAQ;SAErB;QACE;QACA;QACA;QACA;OACD;AAGH,aAAO,EAAE,KAAK,EAAE,GAAG,SAAS,QAAQ,OAAS,CAAE;IACjD,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,yCAAyC,OAAO,MAAK;AAC3D,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AAEzC,YAAM,OAAO,MAAM,GAChB,QACC,0FAA0F,EAE3F,KAAK,SAAS,EACd,IAAG;AAEN,YAAM,cAAc,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QAC1D,IAAI,IAAI;QACR,WAAW,IAAI;QACf,SAAS,IAAI;QACb,YAAY,IAAI;QAChB,UAAU,IAAI,iBAAiB;QAC/B,OAAO,IAAI,SAAS;QACpB,UAAU,IAAI,YAAY;QAC1B,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK,EAAE,WAAU,CAAE;IAC9B,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UAAU,GAAG,KAAK,8BAA8B,WAAW;IACpE;EACF,CAAC;AAMD,EAAAE,KAAI,MAAM,8BAA8B,OAAO,MAAK;AAClD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,UAAU,MAAM,EAAE,IAAI,KAAI;AAEhC,YAAM,WAAW,MAAM,eAAe,WAAW,SAAS;AAC1D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,qBAAqB,WAAW;MAC3D;AAEA,YAAM,UAAU,MAAM,eAAe,cAAc,WAAW,SAAS,QAAQ;QAC7E,KAAK,QAAQ;QACb,QAAQ,QAAQ;QAChB,UAAU,QAAQ;QAClB,aAAa,QAAQ;QACrB,SAAS,QAAQ;OAClB;AAED,aAAO,EAAE,KAAK,EAAE,GAAG,SAAS,QAAQ,OAAS,CAAE;IACjD,SAASF,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,8BAA8B,OAAO,MAAK;AACnD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,WAAW,MAAM,eAAe,WAAW,SAAS;AAC1D,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,qBAAqB,WAAW;MAC3D;AAEA,YAAM,eAAe,cAAc,WAAW,SAAS,MAAM;AAC7D,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,mCAAmC,OAAO,MAAK;AACtD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,EAAE,UAAU,CAAA,GAAI,UAAS,IAAK,MAAM,EAAE,IAAI,KAAI;AAEpD,YAAM,UAAU,MAAM,eAAe,WAAW,SAAS;AACzD,UAAI,CAAC,SAAS;AACZ,eAAO,UAAU,GAAG,KAAK,qBAAqB,WAAW;MAC3D;AAEA,YAAM,oBAAoB,aAAa,QAAQ,SAAS,CAAC,KAAK;AAE9D,YAAM,SAAS,MAAM,gBACnB,IACA;QACE,IAAI,QAAQ;QACZ,KAAK,QAAQ;QACb,QAAQ,QAAQ;QAChB,SAAS,QAAQ;SAEnB,SACA,iBAAiB;AAGnB,aAAO,EAAE,KAAK,EAAE,SAAS,MAAM,GAAG,OAAM,CAAE;IAC5C,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,0BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,gBAAgB,OAAO,MAAK;AAClC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,OAAO,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,MAAM,KAAK,KAAK,EAAE,GAAG,CAAC;AACjE,YAAM,WAAW,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,IAAI,MAAM,UAAU,KAAK,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AACzF,YAAM,UAAU,OAAO,KAAK;AAE5B,YAAM,WAAW,MAAM,GAAG,QAAQ,qCAAqC,EAAE,MAAK;AAC9E,YAAM,QAAS,UAAU,SAAoB;AAE7C,YAAM,OAAO,MAAM,GAChB,QAAQ,gEAAgE,EACxE,KAAK,UAAU,MAAM,EACrB,IAAG;AAEN,YAAM,SAAS,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACrD,IAAI,IAAI;QACR,QAAQ,IAAI;QACZ,UAAU,IAAI;QACd,UAAU,IAAI;QACd,MAAM,IAAI;QACV,KAAK,IAAI;QACT,YAAY,IAAI;QAChB,QAAQ,IAAI;QACZ,UAAU,IAAI,cAAc;QAC5B;AAEF,aAAO,EAAE,KAAK;QACZ;QACA,YAAY;UACV;UACA;UACA;UACA,YAAY,KAAK,KAAK,QAAQ,QAAQ,KAAK;;OAE9C;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,2BAA2BA,MAAK;AAC9C,aAAO,UAAU,GAAG,KAAK,wBAAwB,WAAW;IAC9D;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,uBAAuB,OAAO,MAAK;AAC1C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,WAAW,MAAM,EAAE,IAAI,SAAQ;AACrC,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,YAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,YAAM,WAAW,SAAS,IAAI,UAAU;AACxC,YAAM,WAAW,SAAS,IAAI,UAAU,MAAM;AAE9C,UAAI,CAAC,QAAQ,EAAE,gBAAgB,OAAO;AACpC,eAAO,UAAU,GAAG,KAAK,2BAA2B,kBAAkB;MACxE;AAEA,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,IAAI;QACrD,aAAa,MAAM,OAAO;;OAC3B;AAGD,YAAM,YAAY;QAChB,IAAI,KAAK,MAAM;QACf,OAAO,KAAK,MAAM;QAClB,WAAW,KAAK,IAAG;QACnB,WAAW,KAAK,IAAG;;AAGrB,YAAM,cAAc,MAAM,KAAK,YAAW;AAC1C,YAAM,WAAW,MAAM,YAAY,WAAW,WAAW,aAAa;QACpE,UAAW,KAAa,QAAQ;QAChC,UAAU,KAAK,QAAQ;QACvB,MAAM,KAAK;QACX,YAAY,cAAc;QAC1B,UAAU,YAAY;QACtB;OACD;AAED,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,wBAAwB,OAAO,MAAK;AAC7C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAGrD,YAAM,YAAY;QAChB,IAAI,KAAK,MAAM;QACf,OAAO,KAAK,MAAM;QAClB,WAAW,KAAK,IAAG;QACnB,WAAW,KAAK,IAAG;;AAGrB,YAAM,YAAY,WAAW,QAAQ,SAAS;AAE9C,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UAAU,GAAG,KAAK,yBAAyB,WAAW;IAC/D;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,mCAAmC,OAAO,MAAK;AACtD,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,EAAE,UAAS,IAAK,MAAM,EAAE,IAAI,KAAI;AAEtC,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAGrD,YAAM,YAAY;QAChB,IAAI,KAAK,MAAM;QACf,OAAO,KAAK,MAAM;QAClB,WAAW,KAAK,IAAG;QACnB,WAAW,KAAK,IAAG;;AAGrB,YAAM,eAAe,MAAM,YAAY,kBACrC,QACA,WACA,aAAa,IAAI;AAInB,YAAM,aAAa,IAAI,IAAI,EAAE,IAAI,GAAG;AACpC,YAAM,UAAU,GAAG,WAAW,aAAa,WAAW,OAAO;AAE7D,aAAO,EAAE,KAAK,EAAE,KAAK,SAAS,WAAW,aAAa,KAAI,CAAE;IAC9D,SAASF,QAAP;AACA,cAAQ,MAAM,sCAAsCA,MAAK;AACzD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,0BAA0B,OAAO,MAAK;AAC5C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,kBAAkB;AACrB,eAAO,UAAU,GAAG,KAAK,4BAA4B,gBAAgB;MACvE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AAErC,YAAM,QAAQ,MAAM,iBAAiB,cACnC,aAAa,QACb,WAAW,MAAS;AAGtB,aAAO,EAAE,KAAK,KAAK;IACrB,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UAAU,GAAG,KAAK,mCAAmC,WAAW;IACzE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,0BAA0B,OAAO,MAAK;AAC7C,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,UAAI,CAAC,kBAAkB;AACrB,eAAO,UAAU,GAAG,KAAK,4BAA4B,gBAAgB;MACvE;AAEA,YAAM,QAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,UAAU,MAAM,iBAAiB,aAAa,KAAK;AAEzD,aAAO,EAAE,KAAK,EAAE,QAAO,CAAE;IAC3B,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UAAU,GAAG,KAAK,6BAA6B,WAAW;IACnE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,sBAAsB,OAAO,MAAK;AACzC,UAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,EAAE,QAAQ,QAAQ,WAAW,QAAQ,KAAK,SAAS,EAAC,IAAK,MAAM,EAAE,IAAI,KAAI;AAE/E,YAAM,aAAuB,CAAA;AAC7B,YAAM,SAAgB,CAAA;AAEtB,UAAI,QAAQ;AACV,mBAAW,KAAK,aAAa;AAC7B,eAAO,KAAK,MAAM;MACpB;AAEA,UAAI,QAAQ;AACV,mBAAW,KAAK,YAAY;AAC5B,eAAO,KAAK,MAAM;MACpB;AAEA,UAAI,WAAW;AACb,mBAAW,KAAK,eAAe;AAC/B,eAAO,KAAK,SAAS;MACvB;AAEA,YAAM,cAAc,WAAW,SAAS,SAAS,WAAW,KAAK,OAAO,MAAM;AAE9E,YAAM,OAAO,MAAM,GAChB,QACC,4BAA4B,uDAAuD,EAEpF,KAAK,GAAG,QAAQ,OAAO,MAAM,EAC7B,IAAG;AAEN,YAAM,QAAQ,MAAM,WAAW,CAAA,GAAI,IAAI,CAAC,SAAc;QACpD,IAAI,IAAI;QACR,QAAQ,IAAI;QACZ,QAAQ,IAAI;QACZ,UAAU,IAAI;QACd,WAAW,IAAI;QACf,SAAS,IAAI,UAAU,KAAK,MAAM,IAAI,OAAO,IAAI;QACjD,YAAY,IAAI,cAAc,KAAK,MAAM,IAAI,WAAW,IAAI;QAC5D,WAAW,IAAI,aAAa,KAAK,MAAM,IAAI,UAAU,IAAI;QACzD,WAAW,IAAI;QACf;AAEF,aAAO,EAAE,KAAK,EAAE,KAAI,CAAE;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UAAU,GAAG,KAAK,8BAA8B,WAAW;IACpE;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,iBAAiB,OAAO,MAAK;AACpC,QAAI;AACF,YAAM,OAA4B,MAAM,EAAE,IAAI,KAAI;AAClD,YAAM,eAAe,MAAM;AAE3B,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,6BAA6B,kBAAkB;MAC1E;AAEA,YAAM,UAAU,SAAS,YAAY;AACrC,UAAI,CAAC,WAAW,QAAQ,SAAS,WAAW;AAC1C,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,YAAY,aAAa,CAAC;AAEhC,YAAM,WAAW,MAAM,GACpB,QACC;;;6BAGmB,EAEpB,KAAK,YAAY,EACjB,MAAK;AAER,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,UAAK,SAAS,aAAwB,KAAK,IAAG,GAAI;AAChD,cAAM,GAAG,QAAQ,4CAA4C,EAAE,KAAK,YAAY,EAAE,IAAG;AACrF,eAAO,UAAU,GAAG,KAAK,yBAAyB,cAAc;MAClE;AAEA,YAAM,cAAc,UAClB,EAAE,QAAQ,SAAS,SAAmB,OAAO,SAAS,OAAiB,MAAM,SAAQ,GACrF,WACA,IAAI;AAGN,aAAO,EAAE,KAAK,EAAE,aAAa,WAAW,KAAI,CAAE;IAChD,SAASF,QAAP;AACA,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,gBAAgB,OAAO,MAAK;AACnC,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,GAAG,QAAQ,8CAA8C,EAAE,KAAK,KAAK,KAAK,EAAE,EAAE,IAAG;AAEvF,aAAO,EAAE,KAAK,EAAE,SAAS,2BAA2B,QAAQ,KAAK,KAAK,GAAE,CAAE;IAC5E,SAASF,QAAP;AACA,cAAQ,MAAM,iBAAiBA,MAAK;AACpC,aAAO,UAAU,GAAG,KAAK,iBAAiB,WAAW;IACvD;EACF,CAAC;AAKD,EAAAE,KAAI,KAAK,SAAS,OAAO,MAAK;AAC5B,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAGA,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AAGtC,YAAM,UAAU,oBAAI,IAAG;AACvB,iBAAW,CAAC,YAAY,YAAY,KAAK,OAAO,QAAQD,QAAO,QAAQ,GAAG;AACxE,gBAAQ,IAAI,YAAY,YAAY;MACtC;AAGA,YAAM,aAAa,IAAI,oBAAiB;QACtC;QACA;QACA,MAAM,KAAK;QACX,YAAYG,sBAAqB;QACjC,iBAAiB,OAAO,EAAE,QAAQ,IAAI,WAAW,QAAQ,MAAK,MAAM;AAClE,cAAI,CAAC,cAAc;AACjB;UACF;AACA,gBAAM,aAAa,UAAU,KAAK,MAAM,QAAQ,IAAI,WAAW,QAAQ,KAAK;QAC9E;OACD;AAGD,YAAM,UAAuB,MAAM,EAAE,IAAI,KAAI;AAC7C,YAAM,WAAW,MAAM,WAAW,KAAK,OAAO;AAG9C,UAAI,kBAAkB,qBAAqB;AACzC,mBAAW,UAAU,SAAS,SAAS;AAErC,cAAI,OAAO,cAAc,UAAU;AAEjC,kBAAM,eAAe,aACnB,OAAO,QACP,OAAO,WACP,OAAO,QAAQ,CAAA,GACf,OAAO,IACP,KAAK,MACL,OAAO,OAAO;UAElB,OAAO;AAEL,kBAAM,eAAe,aACnB,OAAO,QACP,UACA,CAAA,GACA,OAAO,IACP,KAAK,MACL,OAAO,OAAO;UAElB;QACF;MACF;AAGA,UAAI,gBAAgB;AAClB,mBAAW,UAAU,SAAS,SAAS;AACrC,gBAAM,eAAe,aAAa;YAChC,WAAW,QAAQ,OAAO;YAC1B,QAAQ,OAAO;YACf,UAAU,OAAO;YACjB,WAAW,OAAO;YAClB,MAAM,OAAO;YACb,QAAQ,KAAK,KAAK;WACnB;QACH;MACF;AAEA,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASJ,QAAP;AACA,cAAQ,MAAM,eAAeA,MAAK;AAClC,aAAO,UAAU,GAAG,KAAKA,kBAAiB,QAAQA,OAAM,UAAU,eAAe,WAAW;IAC9F;EACF,CAAC;AAKD,EAAAE,KAAI,IAAI,iBAAiB,OAAO,MAAK;AACnC,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,UAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,QAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,aAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;IACrE;AAEA,QAAI;AACF,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,MAAM,GAClB,QACC,+FAA+F,EAEhG,KAAK,MAAM,EACX,IAAG;AAEN,aAAO,EAAE,KAAK;QACZ;QACA,UAAU,OAAO,WAAW,CAAA;QAC5B,WAAW,KAAK,IAAG;OACpB;IACH,SAASD,QAAP;AACA,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,aAAO,UAAU,GAAG,KAAK,gCAAgC,WAAW;IACtE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,eAAe,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAGA,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AAGtC,YAAM,UAAU,oBAAI,IAAG;AACvB,iBAAW,CAAC,YAAY,YAAY,KAAK,OAAO,QAAQD,QAAO,QAAQ,GAAG;AACxE,gBAAQ,IAAI,YAAY,YAAY;MACtC;AAGA,YAAM,iBAAiB,IAAI,eAAe;QACxC;QACA;QACA,MAAM,KAAK;QACX,cAAc;QACd,YAAYG,sBAAqB;OAClC;AAGD,YAAM,UAAU,MAAM,EAAE,IAAI,KAAI;AAChC,YAAM,WAAW,MAAM,eAAe,aAAa,OAAO;AAG1D,UAAI,kBAAkB,qBAAqB;AACzC,mBAAW,UAAU,SAAS,SAAS;AAErC,cAAI,OAAO,cAAc,UAAU;AAEjC,kBAAM,eAAe,aACnB,OAAO,QACP,OAAO,WACP,OAAO,QAAQ,CAAA,GACf,OAAO,IACP,KAAK,MACL,OAAO,OAAO;UAElB,OAAO;AAEL,kBAAM,eAAe,aACnB,OAAO,QACP,UACA,CAAA,GACA,OAAO,IACP,KAAK,MACL,OAAO,OAAO;UAElB;QACF;MACF;AAGA,UAAI,gBAAgB;AAClB,mBAAW,UAAU,SAAS,SAAS;AACrC,gBAAM,eAAe,aAAa;YAChC,WAAW,QAAQ,OAAO;YAC1B,QAAQ,OAAO;YACf,UAAU,OAAO;YACjB,WAAW,OAAO;YAClB,MAAM,OAAO;YACb,QAAQ,KAAK,KAAK;WACnB;QACH;MACF;AAGA,UAAI,cAAc;AAChB,mBAAW,UAAU,SAAS,SAAS;AACrC,gBAAM,SACJ,OAAO,cAAc,YAAY,OAAO,cAAc,WAClD,OAAO,OACP;AACN,gBAAM,QACJ,OAAO,cAAc,YAAY,OAAO,cAAc,WAClD,OAAO,OACP;AAEN,gBAAM,aAAa,UACjB,KAAK,MACL,OAAO,QACP,OAAO,IACP,OAAO,WACP,QACA,KAAK;QAET;MACF;AAEA,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASJ,QAAP;AACA,cAAQ,MAAM,gBAAgBA,MAAK;AACnC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,2BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,eAAe,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,WAAW,MAAM,EAAE,IAAI,SAAQ;AACrC,YAAM,SAAS,SAAS,IAAI,QAAQ;AACpC,YAAM,OAAO,SAAS,IAAI,MAAM;AAEhC,UAAI,CAAC,QAAQ;AACX,eAAO,UAAU,GAAG,KAAK,4BAA4B,kBAAkB;MACzE;AAEA,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,UAAI,CAAC,QAAQ,EAAE,gBAAgB,OAAO;AACpC,eAAO,UAAU,GAAG,KAAK,2BAA2B,kBAAkB;MACxE;AAGA,YAAM,aAAa,MAAM,KAAK,KAAI;AAGlC,YAAM,eAAe,MAAM,aAAa,cAAc;QACpD;QACA,MAAM;QACN,WAAW;OACZ;AAED,aAAO,EAAE,KAAK,YAAY;IAC5B,SAASD,QAAP;AACA,cAAQ,MAAM,qBAAqBA,MAAK;AACxC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,qBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,eAAe,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,EAAE,QAAQ,QAAQ,QAAO,IAAK,MAAM,EAAE,IAAI,KAAI;AAEpD,UAAI,CAAC,QAAQ;AACX,eAAO,UAAU,GAAG,KAAK,4BAA4B,kBAAkB;MACzE;AAEA,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,UAAI;AACF,cAAM,KAAK,MAAM,CAAC;AAClB,YAAI,QAAQ,iBAAiB;AAG7B,YAAI,UAAU,OAAO,WAAW,UAAU;AACxC,gBAAM,kBAA4B,CAAA;AAClC,gBAAM,SAAgB,CAAA;AAEtB,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,4BAAgB,KAAK,GAAG,SAAS;AACjC,mBAAO,KAAK,KAAK;UACnB;AAEA,cAAI,gBAAgB,SAAS,GAAG;AAC9B,qBAAS,UAAU,gBAAgB,KAAK,OAAO;UACjD;AAGA,gBAAM,SAAS,MAAM,GAClB,QAAQ,KAAK,EACb,KAAK,GAAG,MAAM,EACd,IAAG;AACN,gBAAM,OAAO,OAAO,WAAW,CAAA;AAG/B,gBAAM,eAAe,aAAa,YAAY;YAC5C;YACA;YACA;YACA,iBAAiB;WAClB;AAGD,iBAAO,IAAI,SAAS,aAAa,KAAK;YACpC,SAAS;cACP,gBAAgB;cAChB,uBAAuB,yBAAyB;;WAEnD;QACH,OAAO;AAEL,gBAAM,SAAS,MAAM,GAAG,QAAQ,KAAK,EAAE,IAAG;AAC1C,gBAAM,OAAO,OAAO,WAAW,CAAA;AAG/B,gBAAM,eAAe,aAAa,YAAY;YAC5C;YACA;YACA;YACA,iBAAiB;WAClB;AAGD,iBAAO,IAAI,SAAS,aAAa,KAAK;YACpC,SAAS;cACP,gBAAgB;cAChB,uBAAuB,yBAAyB;;WAEnD;QACH;MACF,SAASD,QAAP;AACA,eAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iBACzC,WAAW;MAEf;IACF,SAASA,QAAP;AACA,cAAQ,MAAM,qBAAqBA,MAAK;AACxC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,qBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,+BAA+B,OAAO,MAAK;AACjD,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,SAAS,MAAM,GAClB,QAAQ,wEAAwE,EAChF,KAAK,MAAM,EACX,IAAG;AAEN,aAAO,EAAE,KAAK;QACZ;QACA,aAAa,OAAO,WAAW,CAAA;OAChC;IACH,SAASD,QAAP;AACA,cAAQ,MAAM,mCAAmCA,MAAK;AACtD,aAAO,UAAU,GAAG,KAAK,sCAAsC,WAAW;IAC5E;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,uBAAuB,OAAO,MAAK;AAC1C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,EAAE,QAAQ,YAAY,MAAM,SAAS,UAAU,UAAU,WAAW,UAAS,IACjF,MAAM,EAAE,IAAI,KAAI;AAElB,UAAI,CAAC,UAAU,CAAC,YAAY;AAC1B,eAAO,UAAU,GAAG,KAAK,gCAAgC,kBAAkB;MAC7E;AAEA,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,YAAM,KAAK,MAAM,CAAC;AAClB,YAAM,MAAM,KAAK,IAAG;AACpB,YAAM,eAAe,GAAG,UAAU,cAAc,QAAQ,aAAa;AAGrE,YAAM,WAAW,MAAM,GACpB,QACC,sFAAsF,EAEvF,KAAK,QAAQ,YAAY,QAAQ,IAAI,EACrC,MAAK;AAER,UAAI,UAAU;AAEZ,cAAM,GACH,QACC;;;;WAID,EAEA,KACC,UAAU,IAAI,GACd,WAAW,IAAI,GACf,WAAW,IAAI,GACf,YAAY,IAAI,GAChB,aAAa,MACb,KACA,QACA,YACA,QAAQ,IAAI,EAEb,IAAG;MACR,OAAO;AAEL,cAAM,GACH,QACC;;;WAGD,EAEA,KACC,cACA,QACA,YACA,QAAQ,MACR,UAAU,IAAI,GACd,WAAW,IAAI,GACf,WAAW,IAAI,GACf,YAAY,IAAI,GAChB,aAAa,MACb,KACA,GAAG,EAEJ,IAAG;MACR;AAEA,aAAO,EAAE,KAAK,EAAE,SAAS,MAAM,IAAI,UAAU,MAAM,aAAY,CAAE;IACnE,SAASD,QAAP;AACA,cAAQ,MAAM,mCAAmCA,MAAK;AACtD,aAAO,UAAU,GAAG,KAAK,sCAAsC,WAAW;IAC5E;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,2BAA2B,OAAO,MAAK;AAChD,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,KAAK,EAAE,IAAI,MAAM,IAAI;AAC3B,YAAM,KAAK,MAAM,CAAC;AAElB,YAAM,GAAG,QAAQ,6CAA6C,EAAE,KAAK,EAAE,EAAE,IAAG;AAE5E,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,mCAAmCA,MAAK;AACtD,aAAO,UAAU,GAAG,KAAK,sCAAsC,WAAW;IAC5E;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,iBAAiB,OAAO,MAAK;AACpC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,WAAW,MAAM,EAAE,IAAI,SAAQ;AACrC,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,YAAM,aAAa,SAAS,IAAI,YAAY;AAC5C,YAAM,WAAW,SAAS,IAAI,UAAU;AACxC,YAAM,WAAW,SAAS,IAAI,UAAU,MAAM;AAE9C,UAAI,CAAC,QAAQ,EAAE,gBAAgB,OAAO;AACpC,eAAO,UAAU,GAAG,KAAK,2BAA2B,kBAAkB;MACxE;AAEA,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,IAAI;QACrD,aAAa,MAAM,OAAO;;OAC3B;AAED,YAAM,cAAc,MAAM,KAAK,YAAW;AAC1C,YAAM,WAAW,MAAM,YAAY,WAAW,KAAK,MAAM,aAAa;QACpE,UAAW,KAAa,QAAQ;QAChC,UAAU,KAAK,QAAQ;QACvB,MAAM,KAAK;QACX,YAAY,cAAc;QAC1B,UAAU,YAAY;QACtB;OACD;AAED,aAAO,EAAE,KAAK,QAAQ;IACxB,SAASF,QAAP;AACA,cAAQ,MAAM,sBAAsBA,MAAK;AACzC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,2BAA2B,OAAO,MAAK;AAC7C,QAAI;AACF,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,QAAQ,EAAE,IAAI,MAAM,OAAO;AAEjC,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAGrD,UAAI,OAAO;AACT,cAAMK,WAAU,MAAM,YAAY,YAAY,QAAQ,KAAK;AAC3D,YAAI,CAACA,UAAS;AACZ,iBAAO,UAAU,GAAG,KAAK,4BAA4B,cAAc;QACrE;AAGA,cAAMC,YAAW,MAAM,YAAY,gBAAgB,MAAM;AACzD,YAAI,CAACA,WAAU;AACb,iBAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;QACxD;AAEA,cAAMC,QAAO,MAAM,OAAO,IAAID,UAAS,GAAG;AAC1C,YAAI,CAACC,OAAM;AACT,iBAAO,UAAU,GAAG,KAAK,6BAA6B,WAAW;QACnE;AAEA,eAAO,IAAI,SAASA,MAAK,MAAM;UAC7B,SAAS;YACP,gBAAgBD,UAAS;YACzB,uBAAuB,yBAAyBA,UAAS;YACzD,kBAAkBA,UAAS,KAAK,SAAQ;;SAE3C;MACH;AAGA,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,OAAO,MAAM,YAAY,aAAa,QAAQ,KAAK,IAAI;AAC7D,UAAI,CAAC,MAAM;AACT,eAAO,UAAU,GAAG,KAAK,kBAAkB,WAAW;MACxD;AAEA,YAAM,WAAW,MAAM,YAAY,gBAAgB,MAAM;AACzD,UAAI,CAAC,UAAU;AACb,eAAO,UAAU,GAAG,KAAK,2BAA2B,WAAW;MACjE;AAEA,aAAO,IAAI,SAAS,KAAK,MAAM;QAC7B,SAAS;UACP,gBAAgB,SAAS;UACzB,uBAAuB,yBAAyB,SAAS;UACzD,kBAAkB,SAAS,KAAK,SAAQ;;OAE3C;IACH,SAASR,QAAP;AACA,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,mBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,kBAAkB,OAAO,MAAK;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAErD,YAAM,YAAY,WAAW,QAAQ,KAAK,IAAI;AAE9C,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,sBAAsBA,MAAK;AACzC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,UAAU,OAAO,MAAK;AAC5B,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,aAAa,EAAE,IAAI,MAAM,YAAY;AAC3C,YAAM,WAAW,EAAE,IAAI,MAAM,UAAU;AACvC,YAAM,QAAQ,EAAE,IAAI,MAAM,OAAO,IAAI,SAAS,EAAE,IAAI,MAAM,OAAO,CAAE,IAAI;AACvE,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ,IAAI,SAAS,EAAE,IAAI,MAAM,QAAQ,CAAE,IAAI;AAE1E,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAErD,YAAM,QAAQ,MAAM,YAAY,UAAU,KAAK,MAAM;QACnD,YAAY,cAAc;QAC1B,UAAU,YAAY;QACtB;QACA;OACD;AAED,aAAO,EAAE,KAAK,EAAE,MAAK,CAAE;IACzB,SAASF,QAAP;AACA,cAAQ,MAAM,oBAAoBA,MAAK;AACvC,aAAO,UAAU,GAAG,KAAK,wBAAwB,WAAW;IAC9D;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,6BAA6B,OAAO,MAAK;AAChD,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,+BAA+B,gBAAgB;MAC1E;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,EAAE,UAAS,IAAK,MAAM,EAAE,IAAI,KAAI;AAEtC,YAAM,SAAS,YAAY,CAAC;AAC5B,YAAM,KAAK,IAAI,eAAe,MAAM,CAAC,CAAC;AACtC,YAAM,cAAc,IAAI,mBAAmB,QAAQ,EAAE;AAErD,YAAM,MAAM,MAAM,YAAY,kBAAkB,QAAQ,KAAK,MAAM,aAAa,IAAI;AAEpF,aAAO,EAAE,KAAK,EAAE,KAAK,WAAW,aAAa,KAAI,CAAE;IACrD,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,aAAa,OAAO,MAAK;AAChC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,EAAE,KAAK,QAAQ,aAAa,QAAO,IAAK,MAAM,EAAE,IAAI,KAAI;AAE9D,YAAM,UAAU,MAAM,eAAe,gBAAgB,KAAK,MAAM;QAC9D;QACA;QACA;QACA;OACD;AAGD,aAAO,EAAE,KAAK,EAAE,GAAG,SAAS,QAAQ,OAAS,CAAE;IACjD,SAASF,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,8BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,aAAa,OAAO,MAAK;AAC/B,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,WAAW,MAAM,eAAe,aAAa,KAAK,KAAK,EAAE;AAG/D,YAAM,eAAe,SAAS,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,QAAQ,OAAS,EAAG;AAExE,aAAO,EAAE,KAAK,EAAE,UAAU,aAAY,CAAE;IAC1C,SAASF,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UAAU,GAAG,KAAK,2BAA2B,WAAW;IACjE;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,wBAAwB,OAAO,MAAK;AAC1C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,UAAU,MAAM,eAAe,WAAW,WAAW,KAAK,KAAK,EAAE;AAEvE,UAAI,CAAC,SAAS;AACZ,eAAO,UAAU,GAAG,KAAK,qBAAqB,WAAW;MAC3D;AAEA,aAAO,EAAE,KAAK,EAAE,GAAG,SAAS,QAAQ,OAAS,CAAE;IACjD,SAASF,QAAP;AACA,cAAQ,MAAM,wBAAwBA,MAAK;AAC3C,aAAO,UAAU,GAAG,KAAK,2BAA2B,WAAW;IACjE;EACF,CAAC;AAMD,EAAAE,KAAI,MAAM,wBAAwB,OAAO,MAAK;AAC5C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,UAAU,MAAM,EAAE,IAAI,KAAI;AAEhC,YAAM,UAAU,MAAM,eAAe,cAAc,WAAW,KAAK,KAAK,IAAI,OAAO;AAEnF,aAAO,EAAE,KAAK,EAAE,GAAG,SAAS,QAAQ,OAAS,CAAE;IACjD,SAASF,QAAP;AACA,cAAQ,MAAM,yBAAyBA,MAAK;AAC5C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,wBAAwB,OAAO,MAAK;AAC7C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,gBAAgB;AACnB,eAAO,UAAU,GAAG,KAAK,2BAA2B,gBAAgB;MACtE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,eAAe,cAAc,WAAW,KAAK,KAAK,EAAE;AAE1D,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,yBAAyBA,MAAK;AAC5C,aAAO,UAAU,GAAG,KAAK,4BAA4B,WAAW;IAClE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,mBAAmB,OAAO,MAAK;AACtC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,yBAAyB,gBAAgB;MACpE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,UAAI,CAAC,cAAc,SAAS,MAAM,GAAG;AACnC,eAAO,UAAU,GAAG,KAAK,+BAA+B,UAAU,WAAW;MAC/E;AAEA,YAAM,EAAE,OAAO,SAAS,OAAO,QAAQ,WAAW,KAAI,IAAK,MAAM,EAAE,IAAI,KAAI;AAE3E,UAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,eAAO,UAAU,GAAG,KAAK,4BAA4B,kBAAkB;MACzE;AAEA,YAAM,UAAU,MAAM,cAAc,OAAO;QACzC;QACA;QACA;QACA;QACA;QACA,WAAW,cAAc;;QACzB,MAAM,SAAS;;OAChB;AAED,aAAO,EAAE,KAAK,OAAO;IACvB,SAASD,QAAP;AACA,cAAQ,MAAM,iBAAiBA,MAAK;AACpC,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,yBAAyB,OAAO,MAAK;AAC5C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,yBAAyB,gBAAgB;MACpE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,CAACD,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,YAAM,EAAE,SAAS,UAAU,QAAQ,QAAO,IAAK,MAAM,EAAE,IAAI,KAAI;AAE/D,UAAI,CAAC,WAAW,CAAC,MAAM,QAAQ,OAAO,KAAK,QAAQ,WAAW,GAAG;AAC/D,eAAO,UAAU,GAAG,KAAK,8BAA8B,kBAAkB;MAC3E;AAGA,oBAAc,cAAc;QAC1B;QACA;QACA;QACA;OACD;AAGD,UAAI,SAAS;AACX,cAAMS,SAAQ,MAAM,cAAc,aAAa,MAAM;AACrD,eAAO,EAAE,KAAK,EAAE,SAAS,MAAM,eAAeA,QAAO,SAAS,KAAI,CAAE;MACtE,OAAO;AACL,cAAM,cAAc,kBAAkB,MAAM;AAC5C,eAAO,EAAE,KAAK,EAAE,SAAS,MAAM,SAAS,KAAI,CAAE;MAChD;IACF,SAASV,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,iCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,yBAAyB,OAAO,MAAK;AAC9C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,yBAAyB,gBAAgB;MACpE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,cAAc,kBAAkB,MAAM;AAE5C,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UAAU,GAAG,KAAK,iCAAiC,WAAW;IACvE;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,yBAAyB,OAAO,MAAK;AAC3C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,eAAe;AAClB,eAAO,UAAU,GAAG,KAAK,yBAAyB,gBAAgB;MACpE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,QAAQ,MAAM,cAAc,cAAc,MAAM;AAEtD,aAAO,EAAE,KAAK,KAAK;IACrB,SAASF,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UAAU,GAAG,KAAK,8BAA8B,WAAW;IACpE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,gBAAgB,OAAO,MAAK;AACnC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,wBAAwB,gBAAgB;MACnE;AAEA,YAAM,QAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,SAAS,MAAM,aAAa,UAAU,KAAK;AAEjD,aAAO,EAAE,KAAK,MAAM;IACtB,SAASF,QAAP;AACA,cAAQ,MAAM,sBAAsBA,MAAK;AACzC,aAAO,UAAU,GAAG,KAAK,8BAA8B,WAAW;IACpE;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,mBAAmB,OAAO,MAAK;AACrC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,wBAAwB,gBAAgB;MACnE;AAEA,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AACrC,YAAMS,OAAM,MAAM,aAAa,OAAO,OAAO;AAE7C,UAAI,CAACA,MAAK;AACR,eAAO,UAAU,GAAG,KAAK,uBAAuB,WAAW;MAC7D;AAEA,aAAO,EAAE,KAAKA,IAAG;IACnB,SAASX,QAAP;AACA,cAAQ,MAAM,0BAA0BA,MAAK;AAC7C,aAAO,UAAU,GAAG,KAAK,6BAA6B,WAAW;IACnE;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,mCAAmC,OAAO,MAAK;AACrD,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,wBAAwB,gBAAgB;MACnE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,WAAW,EAAE,IAAI,MAAM,UAAU;AACvC,YAAM,UAAU,MAAM,aAAa,iBAAiB,QAAQ,QAAQ;AAEpE,aAAO,EAAE,KAAK,EAAE,QAAO,CAAE;IAC3B,SAASF,QAAP;AACA,cAAQ,MAAM,yBAAyBA,MAAK;AAC5C,aAAO,UAAU,GAAG,KAAK,gCAAgC,WAAW;IACtE;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,gBAAgB,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,cAAc;AACjB,eAAO,UAAU,GAAG,KAAK,wBAAwB,gBAAgB;MACnE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW,IAAI,SAAS,EAAE,IAAI,MAAM,WAAW,CAAE,IAAI;AACnF,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS,IAAI,SAAS,EAAE,IAAI,MAAM,SAAS,CAAE,IAAI;AAE7E,YAAM,QAAQ,MAAM,aAAa,cAAc;QAC7C,QAAQ,UAAU;QAClB,QAAQ,UAAU;QAClB;QACA;OACD;AAED,aAAO,EAAE,KAAK,KAAK;IACrB,SAASF,QAAP;AACA,cAAQ,MAAM,sBAAsBA,MAAK;AACzC,aAAO,UAAU,GAAG,KAAK,6BAA6B,WAAW;IACnE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,kBAAkB,OAAO,MAAK;AACrC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,EAAE,OAAO,UAAAU,WAAU,UAAU,MAAM,WAAU,IAAK,MAAM,EAAE,IAAI,KAAI;AAExE,UAAI,CAAC,SAAS,CAACA,WAAU;AACvB,eAAO,UAAU,GAAG,KAAK,6BAA6B,kBAAkB;MAC1E;AAEA,UAAI,CAAC,CAAC,OAAO,OAAO,WAAW,MAAM,EAAE,SAASA,SAAQ,GAAG;AACzD,eAAO,UAAU,GAAG,KAAK,oBAAoB,kBAAkB;MACjE;AAEA,YAAM,YAAY,MAAM,wBAAwB,cAAc,KAAK,KAAK,IAAI,OAAOA,WAAU;QAC3F;QACA;QACA;OACD;AAED,aAAO,EAAE,KAAK,SAAS;IACzB,SAASZ,QAAP;AACA,cAAQ,MAAM,kCAAkCA,MAAK;AACrD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,4BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,OAAO,wBAAwB,OAAO,MAAK;AAC7C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AACrC,YAAM,wBAAwB,gBAAgB,SAAS,KAAK,KAAK,EAAE;AAEnE,aAAO,EAAE,KAAK,EAAE,SAAS,KAAI,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,oCAAoCA,MAAK;AACvD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,8BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,gBAAgB,OAAO,MAAK;AAClC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,SAAS,MAAM,wBAAwB,cAAc,KAAK,KAAK,EAAE;AAEvE,aAAO,EAAE,KAAK,EAAE,OAAM,CAAE;IAC1B,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UAAU,GAAG,KAAK,+BAA+B,WAAW;IACrE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,cAAc,OAAO,MAAK;AACjC,QAAI;AACF,YAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,EACJ,QACA,OAAAW,QACA,MACA,MACA,MACA,OACA,OACA,KACA,oBACA,SACA,gBAAe,IACb,MAAM,EAAE,IAAI,KAAI;AAEpB,UAAI,CAAC,UAAU,CAACA,UAAS,CAAC,MAAM;AAC9B,eAAO,UAAU,GAAG,KAAK,kCAAkC,kBAAkB;MAC/E;AAEA,YAAM,eAAe,MAAM,wBAAwB,iBAAiB;QAClE;QACA,OAAAA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACD;AAED,aAAO,EAAE,KAAK,YAAY;IAC5B,SAASb,QAAP;AACA,cAAQ,MAAM,iCAAiCA,MAAK;AACpD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,+BACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,mBAAmB,OAAO,MAAK;AACtC,QAAI;AACF,YAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,EAAE,OAAAW,QAAO,MAAM,MAAM,MAAM,OAAO,OAAO,SAAS,gBAAe,IACrE,MAAM,EAAE,IAAI,KAAI;AAElB,UAAI,CAACA,UAAS,CAAC,MAAM;AACnB,eAAO,UAAU,GAAG,KAAK,yBAAyB,kBAAkB;MACtE;AAEA,YAAM,SAAS,MAAM,wBAAwB,sBAAsB;QACjE,OAAAA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACD;AAED,aAAO,EAAE,KAAK,MAAM;IACtB,SAASb,QAAP;AACA,cAAQ,MAAM,sCAAsCA,MAAK;AACzD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,oCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,uBAAuB,OAAO,MAAK;AACzC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,QAAQ,EAAE,IAAI,MAAM,OAAO,IAAI,SAAS,EAAE,IAAI,MAAM,OAAO,CAAE,IAAI;AACvE,YAAM,gBAAgB,MAAM,wBAAwB,qBAAqB,KAAK,KAAK,IAAI,KAAK;AAE5F,aAAO,EAAE,KAAK,EAAE,cAAa,CAAE;IACjC,SAASF,QAAP;AACA,cAAQ,MAAM,qCAAqCA,MAAK;AACxD,aAAO,UAAU,GAAG,KAAK,wCAAwC,WAAW;IAC9E;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,eAAe,OAAO,MAAK;AACjC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,yBAAyB;AAC5B,eAAO,UAAU,GAAG,KAAK,qCAAqC,gBAAgB;MAChF;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,YAAM,QAAQ,MAAM,wBAAwB,cAAc,UAAU,MAAS;AAE7E,aAAO,EAAE,KAAK,KAAK;IACrB,SAASF,QAAP;AACA,cAAQ,MAAM,kCAAkCA,MAAK;AACrD,aAAO,UAAU,GAAG,KAAK,2CAA2C,WAAW;IACjF;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,oBAAoB,OAAO,MAAK;AACtC,QAAI;AACF,YAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,kBAAkB;AACrB,eAAO,UAAU,GAAG,KAAK,4BAA4B,gBAAgB;MACvE;AAEA,YAAM,YAAY,EAAE,IAAI,MAAM,WAAW;AACzC,YAAM,UAAU,EAAE,IAAI,MAAM,SAAS;AAErC,YAAM,QAAQ,MAAM,iBAAiB,cACnC,aAAa,QACb,WAAW,MAAS;AAGtB,aAAO,EAAE,KAAK,KAAK;IACrB,SAASF,QAAP;AACA,cAAQ,MAAM,0BAA0BA,MAAK;AAC7C,aAAO,UAAU,GAAG,KAAK,mCAAmC,WAAW;IACzE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,oBAAoB,OAAO,MAAK;AACvC,QAAI;AACF,YAAM,OAAO,MAAM,mBAAmB,CAAC;AACvC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,kBAAkB;AACrB,eAAO,UAAU,GAAG,KAAK,4BAA4B,gBAAgB;MACvE;AAEA,YAAM,QAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,UAAU,MAAM,iBAAiB,aAAa,KAAK;AAEzD,aAAO,EAAE,KAAK,EAAE,QAAO,CAAE;IAC3B,SAASF,QAAP;AACA,cAAQ,MAAM,0BAA0BA,MAAK;AAC7C,aAAO,UAAU,GAAG,KAAK,6BAA6B,WAAW;IACnE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,wBAAwB,OAAO,MAAK;AAC3C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAAC,kBAAkB;AACrB,eAAO,UAAU,GAAG,KAAK,4BAA4B,gBAAgB;MACvE;AAEA,YAAM,QAAQ,MAAM,EAAE,IAAI,KAAI;AAC9B,YAAM,aAAa,MAAM,iBAAiB,qBAAqB,KAAK;AAEpE,aAAO,EAAE,KAAK,EAAE,WAAU,CAAE;IAC9B,SAASF,QAAP;AACA,cAAQ,MAAM,gCAAgCA,MAAK;AACnD,aAAO,UAAU,GAAG,KAAK,iCAAiC,WAAW;IACvE;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,sBAAsB,OAAO,MAAK;AACzC,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAACE,oBAAmB;AACtB,eAAO,UAAU,GAAG,KAAK,6BAA6B,gBAAgB;MACxE;AAEA,YAAM,EAAE,QAAQ,QAAQ,WAAW,YAAW,IAAK,MAAM,EAAE,IAAI,KAAI;AAEnE,UAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,QAAQ,MAAM,GAAG;AAChD,eAAO,UAAU,GAAG,KAAK,uCAAuC,kBAAkB;MACpF;AAEA,UAAI,CAACH,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,MAAAG,mBAAkB,eAAe;QAC/B;QACA;QACA,WAAW,aAAa;QACxB,aAAa,gBAAgB;OAC9B;AAED,aAAO,EAAE,KAAK;QACZ,SAAS;QACT;QACA;QACA,WAAW,aAAa;QACxB,aAAa,gBAAgB;OAC9B;IACH,SAASJ,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,kCACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,8BAA8B,OAAO,MAAK;AAChD,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAACE,oBAAmB;AACtB,eAAO,UAAU,GAAG,KAAK,6BAA6B,gBAAgB;MACxE;AAEA,YAAM,SAAS,EAAE,IAAI,MAAM,QAAQ;AACnC,UAAI,CAACH,QAAO,SAAS,MAAM,GAAG;AAC5B,eAAO,UAAU,GAAG,KAAK,qBAAqB,UAAU,WAAW;MACrE;AAEA,YAAMa,UAASV,mBAAkB,UAAU,MAAM;AAEjD,UAAI,CAACU,SAAQ;AACX,eAAO,EAAE,KAAK;UACZ;UACA,SAAS;UACT,QAAQ,CAAA;SACT;MACH;AAEA,aAAO,EAAE,KAAK;QACZ;QACA,SAAS;QACT,QAAQA,QAAO;QACf,WAAWA,QAAO,aAAa;QAC/B,aAAaA,QAAO,gBAAgB;OACrC;IACH,SAASd,QAAP;AACA,cAAQ,MAAM,kCAAkCA,MAAK;AACrD,aAAO,UAAU,GAAG,KAAK,qCAAqC,WAAW;IAC3E;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,0BAA0B,OAAO,MAAK;AAC7C,QAAI;AACF,YAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,UAAI,gBAAgB,UAAU;AAC5B,eAAO;MACT;AAEA,UAAI,CAACE,oBAAmB;AACtB,eAAO,UAAU,GAAG,KAAK,6BAA6B,gBAAgB;MACxE;AAEA,YAAM,EAAE,aAAY,IAAK,MAAM,EAAE,IAAI,KAAI;AAEzC,UAAI,CAAC,gBAAgB,OAAO,iBAAiB,UAAU;AACrD,eAAO,UAAU,GAAG,KAAK,mCAAmC,kBAAkB;MAChF;AAEA,YAAMA,mBAAkB,UAAU,YAAY;AAE9C,aAAO,EAAE,KAAK;QACZ,SAAS;QACT,SAAS;QACT,WAAW,KAAK,IAAG;OACpB;IACH,SAASJ,QAAP;AACA,cAAQ,MAAM,uBAAuBA,MAAK;AAC1C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,wBACzC,WAAW;IAEf;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,aAAa,OAAO,MAAK;AAC/B,QAAI,CAAC,EAAE,IAAI,OAAO,SAAS,GAAG,YAAW,EAAG,SAAS,WAAW,GAAG;AACjE,aAAO,UAAU,GAAG,KAAK,8BAA8B,iBAAiB;IAC1E;AAGA,UAAM,QAAQ,eAAe,CAAC;AAC9B,QAAI,CAAC,OAAO;AACV,aAAO,UAAU,GAAG,KAAK,gBAAgB,cAAc;IACzD;AAEA,UAAM,UAAU,SAAS,KAAK;AAC9B,QAAI,CAAC,WAAW,QAAQ,SAAS,UAAU;AACzC,aAAO,UAAU,GAAG,KAAK,iBAAiB,cAAc;IAC1D;AAEA,UAAM,KAAK,MAAM,CAAC;AAClB,UAAM,UAAU,MAAM,GACnB,QAAQ,kEAAkE,EAC1E,KAAK,QAAQ,MAAM,EACnB,MAAK;AAER,QAAI,CAAC,SAAS;AACZ,aAAO,UAAU,GAAG,KAAK,kBAAkB,cAAc;IAC3D;AAEA,UAAM,OAAa;MACjB,IAAI,QAAQ;MACZ,OAAO,QAAQ;MACf,WAAW,QAAQ;MACnB,WAAW,QAAQ;;AAIrB,QAAI,CAAC,qBAAqB;AACxB,YAAM,SAAS,IAAI,eAAe,EAAE;AACpC,4BAAsB,IAAI,oBAAoB,MAAM;AACpD,uBAAiB,IAAI,eAAe,mBAAmB;AACvD,YAAM,oBAAoB,iBAAgB;IAC5C;AAEA,UAAM,eAAe,QAAQ,KAAK,IAAG,KAAM,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;AAEjF,QAAI;AAEF,YAAM,gBAAgB,EAAE,IAAI,OAAO,SAAS;AAC5C,UAAI,CAAC,eAAe,YAAW,EAAG,SAAS,WAAW,GAAG;AACvD,eAAO,UAAU,GAAG,KAAK,8BAA8B,iBAAiB;MAC1E;AAIA,YAAM,EAAE,GAAG,QAAQ,GAAG,OAAM,IAAK,IAAI,cAAa;AAGlD,YAAM,WAAW;QACf,KAAK,SAAe;AAClB,iBAAO,KAAK,OAAO;QACrB;QACA,QAAK;AACH,iBAAO,MAAK;QACd;QACA,SAAM;AACJ,iBAAO,OAAO,eAAe;QAC/B;;AAGF,qBAAgB,eAAe,cAAc,QAAQ;AAGrD,aAAO,iBAAiB,WAAW,OAAO,UAAc;AACtD,YAAI;AACF,gBAAM,UAAU,KAAK,MAAM,MAAM,IAAc;AAE/C,kBAAQ,QAAQ,MAAM;YACpB,KAAK;AACH,oBAAM,oBAAqB,UACzB,KAAK,IACL,cACA,QAAQ,QACR,QAAQ,OAAO;AAEjB,qBAAO,KACL,KAAK,UAAU;gBACb,MAAM;gBACN,gBAAgB,GAAG,QAAQ,UAAU;gBACrC,QAAQ,QAAQ;gBAChB,WAAW,KAAK,IAAG;eACpB,CAAC;AAEJ;YAEF,KAAK;AACH,oBAAM,OAAO,oBAAqB,8BAA8B,YAAY;AAC5E,yBAAW,OAAO,MAAM;AACtB,oBAAI,IAAI,WAAW,QAAQ,UAAU,IAAI,WAAW,KAAK,IAAI;AAC3D,wBAAM,oBAAqB,YAAY,IAAI,cAAc;gBAC3D;cACF;AACA,qBAAO,KACL,KAAK,UAAU;gBACb,MAAM;gBACN,QAAQ,QAAQ;gBAChB,WAAW,KAAK,IAAG;eACpB,CAAC;AAEJ;YAEF,KAAK;AACH,oBAAM,WAAW,oBAAqB,8BAA8B,YAAY;AAChF,yBAAW,OAAO,UAAU;AAC1B,sBAAM,oBAAqB,gBAAgB,IAAI,cAAc;cAC/D;AACA;YAEF;AACE,qBAAO,KACL,KAAK,UAAU;gBACb,MAAM;gBACN,MAAM;gBACN,SAAS,yBAAyB,QAAQ;eAC3C,CAAC;UAER;QACF,SAASF,QAAP;AACA,kBAAQ,MAAM,4BAA4BA,MAAK;AAC/C,iBAAO,KACL,KAAK,UAAU;YACb,MAAM;YACN,MAAM;YACN,SAAS;WACV,CAAC;QAEN;MACF,CAAC;AAGD,aAAO,iBAAiB,SAAS,YAAW;AAC1C,gBAAQ,IAAI,UAAU,2BAA2B;AACjD,cAAM,oBAAqB,iBAAiB,YAAY;AACxD,uBAAgB,iBAAiB,YAAY;MAC/C,CAAC;AAGD,aAAO,iBAAiB,SAAS,CAACA,WAAc;AAC9C,gBAAQ,MAAM,8BAA8B,iBAAiBA,MAAK;AAClE,uBAAgB,iBAAiB,YAAY;MAC/C,CAAC;AAGD,aAAO,KACL,KAAK,UAAU;QACb,MAAM;QACN;QACA,WAAW,KAAK,IAAG;OACpB,CAAC;AAGJ,aAAO,IAAI,SAAS,QAA+B;QACjD,QAAQ;QACR,YAAY;QACZ,SAAS;UACP,SAAS;UACT,YAAY;;OAEf;IACH,SAASA,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UAAU,GAAG,KAAK,4CAA4C,kBAAkB;IACzF;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,mBAAmB,OAAO,MAAK;AACrC,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI,CAAC,uBAAuB,CAAC,gBAAgB;AAC3C,aAAO,EAAE,KAAK;QACZ,kBAAkB;QAClB,eAAe;UACb,oBAAoB;UACpB,mBAAmB;UACnB,2BAA2B;;OAE9B;IACH;AAEA,WAAO,EAAE,KAAK;MACZ,kBAAkB,eAAe,yBAAwB;MACzD,eAAe,oBAAoB,SAAQ;MAC3C,WAAW,KAAK,IAAG;KACpB;EACH,CAAC;AAMD,EAAAA,KAAI,KAAK,uBAAuB,OAAO,MAAK;AAC1C,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI,CAAC,oBAAoB;AACvB,aAAO,UAAU,GAAG,KAAK,qCAAqC,qBAAqB;IACrF;AAEA,QAAI;AACF,YAAM,OAAO,MAAM,EAAE,IAAI,KAAI;AAC7B,YAAM,iBAAiB,KAAK,kBAAkB;AAE9C,YAAM,gBAAgB,MAAM,mBAAmB,MAAM,KAAK,MAAM,cAAc;AAE9E,aAAO,EAAE,KAAK;QACZ;QACA,QAAQ,KAAK,KAAK;QAClB;QACA,WAAW,KAAK,IAAG;OACpB;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,4BAA4BA,MAAK;AAC/C,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,+BACzC,mBAAmB;IAEvB;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,+BAA+B,OAAO,MAAK;AAClD,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI,CAAC,oBAAoB;AACvB,aAAO,UAAU,GAAG,KAAK,qCAAqC,qBAAqB;IACrF;AAEA,QAAI;AACF,YAAM,gBAAgB,EAAE,IAAI,MAAM,OAAO;AACzC,YAAM,cAAc,mBAAmB,eAAe,aAAa;AAEnE,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,yBAAyB,WAAW;MAC/D;AAEA,UAAI,YAAY,WAAW,KAAK,KAAK,IAAI;AACvC,eAAO,UAAU,GAAG,KAAK,6CAA6C,WAAW;MACnF;AAEA,YAAM,SAAS,MAAM,mBAAmB,OAAO,aAAa;AAE5D,aAAO,EAAE,KAAK;QACZ;QACA,QAAQ;QACR,cAAc,OAAO;QACrB,QAAQ,OAAO;QACf,WAAW,KAAK,IAAG;OACpB;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,gCACzC,mBAAmB;IAEvB;EACF,CAAC;AAMD,EAAAE,KAAI,KAAK,iCAAiC,OAAO,MAAK;AACpD,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI,CAAC,oBAAoB;AACvB,aAAO,UAAU,GAAG,KAAK,qCAAqC,qBAAqB;IACrF;AAEA,QAAI;AACF,YAAM,gBAAgB,EAAE,IAAI,MAAM,OAAO;AACzC,YAAM,cAAc,mBAAmB,eAAe,aAAa;AAEnE,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,yBAAyB,WAAW;MAC/D;AAEA,UAAI,YAAY,WAAW,KAAK,KAAK,IAAI;AACvC,eAAO,UAAU,GAAG,KAAK,+CAA+C,WAAW;MACrF;AAEA,YAAM,mBAAmB,SAAS,aAAa;AAE/C,aAAO,EAAE,KAAK;QACZ;QACA,QAAQ;QACR,WAAW,KAAK,IAAG;OACpB;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,+BAA+BA,MAAK;AAClD,aAAO,UACL,GACA,KACAA,kBAAiB,QAAQA,OAAM,UAAU,kCACzC,mBAAmB;IAEvB;EACF,CAAC;AAMD,EAAAE,KAAI,IAAI,wBAAwB,OAAO,MAAK;AAC1C,UAAM,OAAO,MAAM,kBAAkB,CAAC;AACtC,QAAI,gBAAgB,UAAU;AAC5B,aAAO;IACT;AAEA,QAAI,CAAC,oBAAoB;AACvB,aAAO,UAAU,GAAG,KAAK,qCAAqC,qBAAqB;IACrF;AAEA,QAAI;AACF,YAAM,gBAAgB,EAAE,IAAI,MAAM,OAAO;AACzC,YAAM,cAAc,mBAAmB,eAAe,aAAa;AAEnE,UAAI,CAAC,aAAa;AAChB,eAAO,UAAU,GAAG,KAAK,yBAAyB,WAAW;MAC/D;AAEA,UAAI,YAAY,WAAW,KAAK,KAAK,IAAI;AACvC,eAAO,UAAU,GAAG,KAAK,6CAA6C,WAAW;MACnF;AAEA,aAAO,EAAE,KAAK;QACZ,eAAe,YAAY;QAC3B,QAAQ,YAAY;QACpB,gBAAgB,YAAY;QAC5B,aAAa,YAAY,QAAQ;QACjC,WAAW,YAAY;QACvB,WAAW,YAAY;QACvB,aAAa,YAAY;OAC1B;IACH,SAASF,QAAP;AACA,cAAQ,MAAM,6BAA6BA,MAAK;AAChD,aAAO,UAAU,GAAG,KAAK,oCAAoC,mBAAmB;IAClF;EACF,CAAC;AAID,MAAI,cAAc;AAChB,UAAM,4BAA4B,wBAAC,MAAU;AAC3C,UAAI,OAAO,iBAAiB,WAAW;AACrC,eAAO,EAAE,SAAS,cAAc,MAAM,UAAU,KAAK,OAA+B;MACtF;AAEA,UAAI,OAAO,iBAAiB,YAAY;AACtC,cAAMc,UAAS,aAAa,CAAC;AAC7B,eAAO;UACL,SAASA,QAAO;UAChB,MAAMA,QAAO,QAAQ;UACrB,KAAKA,QAAO;;MAEhB;AAEA,aAAO;QACL,SAAS,aAAa;QACtB,MAAM,aAAa,QAAQ;QAC3B,KAAK,aAAa;;IAEtB,GAnBkC;AAqBlC,UAAM,0BAA0B,wBAAC,MAAU;AACzC,YAAMA,UAAS,0BAA0B,CAAC;AAC1C,UAAI,CAACA,QAAO,SAAS;AACnB,eAAO,EAAE,SAAQ;MACnB;AAEA,YAAM,YAAYA,QAAO,QAAQ,UAAU,QAAQ,QAAQ,EAAE,KAAK;AAClE,YAAM,eAAe,EAAE,IAAI,SAAS,YAAY,EAAE,IAAI,KAAK,WAAW,GAAG,WAAW;AACpF,UAAI,CAAC,cAAc;AACjB,eAAO,EAAE,SAAQ;MACnB;AAEA,UAAI,CAACA,QAAO,KAAK;AACf,eAAO,EAAE,KACP,iIACA,GAAG;MAEP;AAEA,YAAM,SAAS,IAAI,IAAIA,QAAO,GAAG;AACjC,YAAM,iBAAiB,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACzD,YAAM,gBACJ,EAAE,IAAI,SAAS,WACX,MACA,EAAE,IAAI,KAAK,WAAW,GAAG,WAAW,IAClC,EAAE,IAAI,KAAK,MAAM,SAAS,MAAM,IAChC;AAER,aAAO,WAAW,GAAG,iBAAiB,mBAAmB;AACzD,aAAO,SAAS,IAAI,IAAI,EAAE,IAAI,GAAG,EAAE;AAEnC,aAAO,EAAE,SAAS,OAAO,SAAQ,GAAI,GAAG;IAC1C,GAhCgC;AAkChC,IAAAZ,KAAI,IAAI,KAAK,uBAAuB;EACtC;AAEA,SAAOA;AACT;AAz8IgB;;;ACvEhB,IAAM,SAAyB;AAAA,EAC7B,UAAU;AAAA,IACR,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,IAAI;AAAA,UACF,MAAM;AAAA,UACN,UAAU;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACA,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,WAAW;AAAA,UACX,UAAU;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,QACA,WAAW;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACA,WAAW;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,QACA,WAAW;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,aAAa;AAAA,QACX,QAAQ,CAAC,MAAW,SAAc,KAAK,WAAW,KAAK;AAAA,QACvD,MAAM,CAAC,MAAW,SAAc,KAAK,WAAW,KAAK;AAAA,QACrD,QAAQ,CAAC,MAAW,UAAe,YACjC,SAAS,WAAW,KAAK,OAAO,CAAC,QAAQ,UAAU,QAAQ,WAAW,SAAS;AAAA,QACjF,QAAQ,CAAC,MAAW,aAAkB,SAAS,WAAW,KAAK;AAAA,MACjE;AAAA,MACA,SAAS,CAAC,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEA,IAAO,0BAAQ;;;AC5Cf,IAAM,MAAM,qBAAqB;AAAA,EAC/B;AAAA,EACA,OAAO,CAAC,MAAM,EAAE,IAAI;AAAA,EACpB,cAAc,CAAC,MAAM,EAAE,IAAI;AAAA,EAC3B,gBAAgB,CAAC,MAAM,EAAE,IAAI;AAAA,EAC7B,aAAa,CAAC,MAAM,EAAE,IAAI;AAAA,EAC1B,YAAY;AAAA;AAAA,EAEZ,gBAAgB;AAAA;AAAA;AAAA,EAGhB,cAAc;AAChB,CAAC;AAED,IAAO,cAAQ;;;ACff,IAAM,YAAwB,8BAAO,SAASa,MAAK,MAAM,kBAAkB;AAC1E,MAAI;AACH,WAAO,MAAM,cAAc,KAAK,SAASA,IAAG;AAAA,EAC7C,UAAE;AACD,QAAI;AACH,UAAI,QAAQ,SAAS,QAAQ,CAAC,QAAQ,UAAU;AAC/C,cAAM,SAAS,QAAQ,KAAK,UAAU;AACtC,eAAO,EAAE,MAAM,OAAO,KAAK,GAAG,MAAM;AAAA,QAAC;AAAA,MACtC;AAAA,IACD,SAAS,GAAP;AACD,cAAQ,MAAM,4CAA4C,CAAC;AAAA,IAC5D;AAAA,EACD;AACD,GAb8B;AAe9B,IAAO,6CAAQ;;;ACRf,SAAS,YAAY,GAAmB;AACvC,SAAO;AAAA,IACN,MAAM,GAAG;AAAA,IACT,SAAS,GAAG,WAAW,OAAO,CAAC;AAAA,IAC/B,OAAO,GAAG;AAAA,IACV,OAAO,GAAG,UAAU,SAAY,SAAY,YAAY,EAAE,KAAK;AAAA,EAChE;AACD;AAPS;AAUT,IAAMC,aAAwB,8BAAO,SAASC,MAAK,MAAM,kBAAkB;AAC1E,MAAI;AACH,WAAO,MAAM,cAAc,KAAK,SAASA,IAAG;AAAA,EAC7C,SAAS,GAAP;AACD,UAAMC,SAAQ,YAAY,CAAC;AAC3B,WAAO,SAAS,KAAKA,QAAO;AAAA,MAC3B,QAAQ;AAAA,MACR,SAAS,EAAE,+BAA+B,OAAO;AAAA,IAClD,CAAC;AAAA,EACF;AACD,GAV8B;AAY9B,IAAO,2CAAQF;;;ACzBJ,IAAM,mCAAmC;AAAA,EAE9B;AAAA,EAAyB;AAC3C;AACA,IAAO,sCAAQ;;;ACcnB,IAAM,wBAAsC,CAAC;AAKtC,SAAS,uBAAuB,MAAqC;AAC3E,wBAAsB,KAAK,GAAG,KAAK,KAAK,CAAC;AAC1C;AAFgB;AAShB,SAAS,uBACR,SACAG,MACA,KACA,UACA,iBACsB;AACtB,QAAM,CAAC,MAAM,GAAG,IAAI,IAAI;AACxB,QAAM,gBAAmC;AAAA,IACxC;AAAA,IACA,KAAK,YAAY,QAAQ;AACxB,aAAO,uBAAuB,YAAY,QAAQ,KAAK,UAAU,IAAI;AAAA,IACtE;AAAA,EACD;AACA,SAAO,KAAK,SAASA,MAAK,KAAK,aAAa;AAC7C;AAfS;AAiBF,SAAS,kBACf,SACAA,MACA,KACA,UACA,iBACsB;AACtB,SAAO,uBAAuB,SAASA,MAAK,KAAK,UAAU;AAAA,IAC1D,GAAG;AAAA,IACH;AAAA,EACD,CAAC;AACF;AAXgB;;;AC3ChB,IAAM,iCAAN,MAAoE;AAAA,EAGnE,YACU,eACA,MACT,SACC;AAHQ;AACA;AAGT,SAAK,WAAW;AAAA,EACjB;AAAA,EARS;AAAA,EAUT,UAAU;AACT,QAAI,EAAE,gBAAgB,iCAAiC;AACtD,YAAM,IAAI,UAAU,oBAAoB;AAAA,IACzC;AAEA,SAAK,SAAS;AAAA,EACf;AACD;AAlBM;AAoBN,SAAS,oBAAoB,QAA0C;AAEtE,MACC,qCAAqC,UACrC,iCAAiC,WAAW,GAC3C;AACD,WAAO;AAAA,EACR;AAEA,aAAW,cAAc,kCAAkC;AAC1D,wBAAoB,UAAU;AAAA,EAC/B;AAEA,QAAM,kBAA+C,gCACpD,SACAC,MACA,KACC;AACD,QAAI,OAAO,UAAU,QAAW;AAC/B,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC9D;AACA,WAAO,OAAO,MAAM,SAASA,MAAK,GAAG;AAAA,EACtC,GATqD;AAWrD,SAAO;AAAA,IACN,GAAG;AAAA,IACH,MAAM,SAASA,MAAK,KAAK;AACxB,YAAM,aAAyB,gCAAU,MAAM,MAAM;AACpD,YAAI,SAAS,eAAe,OAAO,cAAc,QAAW;AAC3D,gBAAM,aAAa,IAAI;AAAA,YACtB,KAAK,IAAI;AAAA,YACT,KAAK,QAAQ;AAAA,YACb,MAAM;AAAA,YAAC;AAAA,UACR;AACA,iBAAO,OAAO,UAAU,YAAYA,MAAK,GAAG;AAAA,QAC7C;AAAA,MACD,GAT+B;AAU/B,aAAO,kBAAkB,SAASA,MAAK,KAAK,YAAY,eAAe;AAAA,IACxE;AAAA,EACD;AACD;AAxCS;AA0CT,SAAS,qBACR,OAC8B;AAE9B,MACC,qCAAqC,UACrC,iCAAiC,WAAW,GAC3C;AACD,WAAO;AAAA,EACR;AAEA,aAAW,cAAc,kCAAkC;AAC1D,wBAAoB,UAAU;AAAA,EAC/B;AAGA,SAAO,cAAc,MAAM;AAAA,IAC1B,mBAAyE,CACxE,SACAA,MACA,QACI;AACJ,WAAK,MAAMA;AACX,WAAK,MAAM;AACX,UAAI,MAAM,UAAU,QAAW;AAC9B,cAAM,IAAI,MAAM,sDAAsD;AAAA,MACvE;AACA,aAAO,MAAM,MAAM,OAAO;AAAA,IAC3B;AAAA,IAEA,cAA0B,CAAC,MAAM,SAAS;AACzC,UAAI,SAAS,eAAe,MAAM,cAAc,QAAW;AAC1D,cAAM,aAAa,IAAI;AAAA,UACtB,KAAK,IAAI;AAAA,UACT,KAAK,QAAQ;AAAA,UACb,MAAM;AAAA,UAAC;AAAA,QACR;AACA,eAAO,MAAM,UAAU,UAAU;AAAA,MAClC;AAAA,IACD;AAAA,IAEA,MAAM,SAAwD;AAC7D,aAAO;AAAA,QACN;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACD;AAAA,EACD;AACD;AAnDS;AAqDT,IAAI;AACJ,IAAI,OAAO,wCAAU,UAAU;AAC9B,kBAAgB,oBAAoB,mCAAK;AAC1C,WAAW,OAAO,wCAAU,YAAY;AACvC,kBAAgB,qBAAqB,mCAAK;AAC3C;AACA,IAAO,kCAAQ;",
7
+ "names": ["PerformanceMark", "clear", "count", "countReset", "createTask", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "profile", "profileEnd", "table", "time", "timeEnd", "timeLog", "timeStamp", "trace", "warn", "hrtime", "Socket", "Socket", "dir", "env", "count", "cwd", "hrtime", "assert", "context", "match", "raw", "context", "app", "env", "context", "context", "Node", "_Node", "Node", "Hono", "util", "objectUtil", "error", "errorUtil", "error", "errorMap", "version", "ctx", "result", "schema", "issues", "elements", "processed", "result", "r", "ZodFirstPartyTypeKind", "error", "context", "error", "schema", "error", "version", "context", "error", "version", "error", "version", "error", "version", "error", "schema", "error", "error", "error", "count", "config", "version", "error", "platform", "notification", "error", "count", "error", "schema", "error", "schema", "app", "Hono", "encryptionManager", "version", "row", "isValid", "metadata", "file", "count", "log", "platform", "title", "config", "env", "jsonError", "env", "error", "env", "env"]
8
+ }