@hot-updater/cloudflare 0.30.5 → 0.30.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/worker/dist/index.js.map
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/_internal/utils.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/perf_hooks/performance.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/perf_hooks.mjs", "../../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.4.1_unenv@2.0.0-rc.17_workerd@1.20250712.0/node_modules/@cloudflare/unenv-preset/dist/runtime/polyfill/performance.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/mock/noop.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/console.mjs", "../../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.4.1_unenv@2.0.0-rc.17_workerd@1.20250712.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/console.mjs", "../../../../node_modules/.pnpm/wrangler@4.26.0_@cloudflare+workers-types@4.20260313.1/node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-console", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/process/hrtime.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/tty/write-stream.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/tty/read-stream.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/tty.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/process/node-version.mjs", "../../../../node_modules/.pnpm/unenv@2.0.0-rc.17/node_modules/unenv/dist/runtime/node/internal/process/process.mjs", "../../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.4.1_unenv@2.0.0-rc.17_workerd@1.20250712.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/process.mjs", "../../../../node_modules/.pnpm/wrangler@4.26.0_@cloudflare+workers-types@4.20260313.1/node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-process", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js", "../../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js", "../src/index.ts", "../../../../packages/server/src/runtime.ts", "../../../../packages/server/src/db/pluginCore.ts", "../../../../packages/core/dist/index.mjs", "../../../plugin-core/dist/index.mjs", "../../../plugin-core/dist/calculatePagination.mjs", "../../../plugin-core/dist/createDatabasePlugin.mjs", "../../../../node_modules/.pnpm/es-toolkit@1.32.0/node_modules/es-toolkit/dist/index.mjs", "../../../../node_modules/.pnpm/es-toolkit@1.32.0/node_modules/es-toolkit/dist/object/mergeWith.mjs", "../../../../node_modules/.pnpm/es-toolkit@1.32.0/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs", "../../../plugin-core/dist/semverSatisfies.mjs", "../../../plugin-core/dist/filterCompatibleAppVersions.mjs", "../../../js/dist/index.mjs", "../../../plugin-core/dist/createDatabasePluginGetUpdateInfo.mjs", "../../../../packages/server/src/db/types.ts", "../../../../packages/server/src/handler.ts", "../../../../packages/server/src/internalRouter.ts", "../../../../packages/server/src/version.ts", "../../../../packages/server/package.json", "../../../../packages/server/src/route.ts", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/index.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/hono.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/hono-base.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/compose.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/context.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/request.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/http-exception.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/request/constants.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/utils/body.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/utils/url.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/utils/html.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/utils/constants.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/index.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/reg-exp-router/prepared-router.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/smart-router/index.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/smart-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/trie-router/index.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/trie-router/router.js", "../../../../node_modules/.pnpm/hono@4.12.9/node_modules/hono/dist/router/trie-router/node.js", "../../src/worker/index.ts", "../../src/cloudflareWorkerDatabase.ts", "../../src/r2WorkerStorage.ts"],
|
|
4
4
|
"sourceRoot": "./worker/dist",
|
|
5
|
-
"sourcesContent": ["/* @__NO_SIDE_EFFECTS__ */\nexport 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__ */\nexport 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__ */\nexport function createNotImplementedError(name) {\n\treturn new Error(`[unenv] ${name} is not implemented yet!`);\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport 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__ */\nexport 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__ */\nexport 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 { IntervalHistogram, RecordableHistogram } from \"./internal/perf_hooks/histogram.mjs\";\nimport { performance, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserverEntryList, PerformanceObserver, PerformanceResourceTiming } from \"./internal/perf_hooks/performance.mjs\";\nexport * from \"./internal/perf_hooks/performance.mjs\";\nimport { NODE_PERFORMANCE_GC_MAJOR, NODE_PERFORMANCE_GC_MINOR, NODE_PERFORMANCE_GC_INCREMENTAL, NODE_PERFORMANCE_GC_WEAKCB, NODE_PERFORMANCE_GC_FLAGS_NO, NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED, NODE_PERFORMANCE_GC_FLAGS_FORCED, NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING, NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE, NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY, NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE, NODE_PERFORMANCE_ENTRY_TYPE_GC, NODE_PERFORMANCE_ENTRY_TYPE_HTTP, NODE_PERFORMANCE_ENTRY_TYPE_HTTP2, NODE_PERFORMANCE_ENTRY_TYPE_NET, NODE_PERFORMANCE_ENTRY_TYPE_DNS, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN, NODE_PERFORMANCE_MILESTONE_ENVIRONMENT, NODE_PERFORMANCE_MILESTONE_NODE_START, NODE_PERFORMANCE_MILESTONE_V8_START, NODE_PERFORMANCE_MILESTONE_LOOP_START, NODE_PERFORMANCE_MILESTONE_LOOP_EXIT, NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE } from \"./internal/perf_hooks/constants.mjs\";\nexport const constants = {\n\tNODE_PERFORMANCE_GC_MAJOR,\n\tNODE_PERFORMANCE_GC_MINOR,\n\tNODE_PERFORMANCE_GC_INCREMENTAL,\n\tNODE_PERFORMANCE_GC_WEAKCB,\n\tNODE_PERFORMANCE_GC_FLAGS_NO,\n\tNODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED,\n\tNODE_PERFORMANCE_GC_FLAGS_FORCED,\n\tNODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY,\n\tNODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE,\n\tNODE_PERFORMANCE_ENTRY_TYPE_GC,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP2,\n\tNODE_PERFORMANCE_ENTRY_TYPE_NET,\n\tNODE_PERFORMANCE_ENTRY_TYPE_DNS,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN,\n\tNODE_PERFORMANCE_MILESTONE_ENVIRONMENT,\n\tNODE_PERFORMANCE_MILESTONE_NODE_START,\n\tNODE_PERFORMANCE_MILESTONE_V8_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_EXIT,\n\tNODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE\n};\nexport const monitorEventLoopDelay = function(_options) {\n\treturn new IntervalHistogram();\n};\nexport const createHistogram = function(_options) {\n\treturn new RecordableHistogram();\n};\nexport default {\n\tPerformance,\n\tPerformanceMark,\n\tPerformanceEntry,\n\tPerformanceMeasure,\n\tPerformanceObserverEntryList,\n\tPerformanceObserver,\n\tPerformanceResourceTiming,\n\tperformance,\n\tconstants,\n\tcreateHistogram,\n\tmonitorEventLoopDelay\n};\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", "export default Object.assign(() => {}, { __unenv__: true });\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", "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", "export class WriteStream {\n\tfd;\n\tcolumns = 80;\n\trows = 24;\n\tisTTY = false;\n\tconstructor(fd) {\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\twrite(str, encoding, cb) {\n\t\tif (str instanceof Uint8Array) {\n\t\t\tstr = new TextDecoder().decode(str);\n\t\t}\n\t\ttry {\n\t\t\tconsole.log(str);\n\t\t} catch {}\n\t\tcb && typeof cb === \"function\" && cb();\n\t\treturn false;\n\t}\n}\n", "export class ReadStream {\n\tfd;\n\tisRaw = false;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tsetRawMode(mode) {\n\t\tthis.isRaw = mode;\n\t\treturn this;\n\t}\n}\n", "import { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport { ReadStream } from \"./internal/tty/read-stream.mjs\";\nexport { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport const isatty = function() {\n\treturn false;\n};\nexport default {\n\tReadStream: WriteStream,\n\tWriteStream,\n\tisatty\n};\n", "export const NODE_VERSION = \"22.14.0\";\n", "import { EventEmitter } from \"node:events\";\nimport { ReadStream, WriteStream } from \"node:tty\";\nimport { notImplemented, createNotImplementedError } from \"../../../_internal/utils.mjs\";\nimport { NODE_VERSION } from \"./node-version.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 `v${NODE_VERSION}`;\n\t}\n\tget versions() {\n\t\treturn { node: NODE_VERSION };\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 { 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;", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "import { createHotUpdater } from \"@hot-updater/server/runtime\";\nimport { Hono } from \"hono\";\n\nimport {\n d1Database,\n type RequestEnvContext,\n r2Storage,\n verifyJwtSignedUrl,\n} from \"../../src/worker\";\n\nexport type CloudflareWorkerEnv = {\n DB: {\n prepare: D1Database[\"prepare\"];\n };\n BUCKET: R2Bucket;\n JWT_SECRET: string;\n};\n\nexport const HOT_UPDATER_BASE_PATH = \"/api/check-update\";\n\nconst resolveRequestOrigin = (context?: RequestEnvContext) => {\n const request = context?.request;\n\n if (!request) {\n throw new Error(\n \"r2WorkerStorage requires a request to resolve publicBaseUrl.\",\n );\n }\n\n return new URL(request.url).origin;\n};\n\nconst hotUpdater = createHotUpdater({\n database: d1Database(),\n storages: [\n r2Storage({\n publicBaseUrl: resolveRequestOrigin,\n }),\n ],\n basePath: HOT_UPDATER_BASE_PATH,\n routes: {\n updateCheck: true,\n version: true,\n bundles: false,\n },\n});\n\nconst app = new Hono<{ Bindings: CloudflareWorkerEnv }>();\n\napp.mount(\n HOT_UPDATER_BASE_PATH,\n (request: Request, env: CloudflareWorkerEnv) => {\n return hotUpdater.handler(request, {\n request,\n env,\n });\n },\n {\n optionHandler: (c) => [c.env],\n },\n);\n\napp.get(\"*\", async (c) => {\n const result = await verifyJwtSignedUrl({\n path: c.req.path,\n token: c.req.query(\"token\"),\n jwtSecret: c.env.JWT_SECRET,\n handler: async (storageUri) => {\n const [, ...key] = storageUri.split(\"/\");\n const object = await c.env.BUCKET.get(key.join(\"/\"));\n if (!object) {\n return null;\n }\n\n return {\n body: object.body,\n contentType: object.httpMetadata?.contentType,\n };\n },\n });\n\n if (result.status !== 200) {\n return c.json({ error: result.error }, result.status);\n }\n\n return c.body(result.responseBody, 200, result.responseHeaders);\n});\n\nexport default app;\n", "import type {\n HotUpdaterContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\n\nimport { createPluginDatabaseCore } from \"./db/pluginCore\";\nimport {\n type DatabaseAdapter,\n type DatabaseAPI,\n isDatabasePlugin,\n isDatabasePluginFactory,\n type StoragePluginFactory,\n} from \"./db/types\";\nimport { createHandler, type HandlerRoutes } from \"./handler\";\nimport { normalizeBasePath } from \"./route\";\n\nexport type HotUpdaterAPI<TContext = unknown> = DatabaseAPI<TContext> & {\n basePath: string;\n handler: (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<Response>;\n adapterName: string;\n};\n\nexport interface CreateHotUpdaterOptions<TContext = unknown> {\n database: DatabaseAdapter<TContext>;\n storages?: (StoragePlugin<TContext> | StoragePluginFactory<TContext>)[];\n storagePlugins?: (StoragePlugin<TContext> | StoragePluginFactory<TContext>)[];\n basePath?: string;\n cwd?: string;\n routes?: HandlerRoutes;\n}\n\nexport function createHotUpdater<TContext = unknown>(\n options: CreateHotUpdaterOptions<TContext>,\n): HotUpdaterAPI<TContext> {\n const database = options.database;\n const basePath = normalizeBasePath(options.basePath ?? \"/api\");\n const storagePlugins = (options.storages ?? options.storagePlugins ?? []).map(\n (plugin) => (typeof plugin === \"function\" ? plugin() : plugin),\n );\n\n const resolveStoragePluginUrl = async (\n storageUri: string | null,\n context?: HotUpdaterContext<TContext>,\n ): Promise<string | null> => {\n if (!storageUri) {\n return null;\n }\n\n const url = new URL(storageUri);\n const protocol = url.protocol.replace(\":\", \"\");\n\n if (protocol === \"http\" || protocol === \"https\") {\n return storageUri;\n }\n\n const plugin = storagePlugins.find(\n (item) => item.supportedProtocol === protocol,\n );\n\n if (!plugin) {\n throw new Error(`No storage plugin for protocol: ${protocol}`);\n }\n\n const { fileUrl } = await plugin.getDownloadUrl(storageUri, context);\n if (!fileUrl) {\n throw new Error(\"Storage plugin returned empty fileUrl\");\n }\n\n return fileUrl;\n };\n\n if (!isDatabasePluginFactory(database) && !isDatabasePlugin(database)) {\n throw new Error(\n \"@hot-updater/server/runtime only supports database plugins.\",\n );\n }\n\n const plugin = isDatabasePluginFactory(database) ? database() : database;\n const core = createPluginDatabaseCore<TContext>(\n () => plugin,\n resolveStoragePluginUrl,\n isDatabasePluginFactory(database)\n ? {\n createMutationPlugin: () => database(),\n }\n : undefined,\n );\n\n const api = {\n ...core.api,\n handler: createHandler(core.api, {\n basePath,\n routes: options.routes,\n }),\n adapterName: core.adapterName,\n };\n\n // Some framework adapters strip the mounted base path or pass extra\n // bindings/execution context arguments. Ignore those extras here so the\n // handler can still be mounted directly as a plain Request handler.\n const handler: HotUpdaterAPI<TContext>[\"handler\"] = (\n request,\n context,\n ...extraArgs: unknown[]\n ) => {\n if (extraArgs.length > 0) {\n return api.handler(request);\n }\n\n return api.handler(request, context);\n };\n\n return {\n ...api,\n basePath,\n handler,\n };\n}\n\nexport { createHandler };\nexport { HOT_UPDATER_SERVER_VERSION } from \"./version\";\n", "import type {\n AppUpdateInfo,\n AppVersionGetBundlesArgs,\n Bundle,\n FingerprintGetBundlesArgs,\n GetBundlesArgs,\n Platform,\n UpdateInfo,\n} from \"@hot-updater/core\";\nimport { isCohortEligibleForUpdate, NIL_UUID } from \"@hot-updater/core\";\nimport {\n type DatabaseBundleQueryOptions,\n type DatabaseBundleQueryOrder,\n type DatabaseBundleQueryWhere,\n type DatabasePlugin,\n type HotUpdaterContext,\n semverSatisfies,\n} from \"@hot-updater/plugin-core\";\n\nimport type { DatabaseAPI } from \"./types\";\n\nconst PAGE_SIZE = 100;\nconst DESC_ORDER = { field: \"id\", direction: \"desc\" } as const;\n\nconst bundleMatchesQueryWhere = (\n bundle: Bundle,\n where: DatabaseBundleQueryWhere | undefined,\n) => {\n if (!where) return true;\n if (where.channel !== undefined && bundle.channel !== where.channel)\n return false;\n if (where.platform !== undefined && bundle.platform !== where.platform)\n return false;\n if (where.enabled !== undefined && bundle.enabled !== where.enabled)\n return false;\n if (where.id?.eq !== undefined && bundle.id !== where.id.eq) return false;\n if (where.id?.gt !== undefined && bundle.id.localeCompare(where.id.gt) <= 0)\n return false;\n if (where.id?.gte !== undefined && bundle.id.localeCompare(where.id.gte) < 0)\n return false;\n if (where.id?.lt !== undefined && bundle.id.localeCompare(where.id.lt) >= 0)\n return false;\n if (where.id?.lte !== undefined && bundle.id.localeCompare(where.id.lte) > 0)\n return false;\n if (where.id?.in && !where.id.in.includes(bundle.id)) return false;\n if (where.targetAppVersionNotNull && bundle.targetAppVersion === null) {\n return false;\n }\n if (\n where.targetAppVersion !== undefined &&\n bundle.targetAppVersion !== where.targetAppVersion\n ) {\n return false;\n }\n if (\n where.targetAppVersionIn &&\n !where.targetAppVersionIn.includes(bundle.targetAppVersion ?? \"\")\n ) {\n return false;\n }\n if (\n where.fingerprintHash !== undefined &&\n bundle.fingerprintHash !== where.fingerprintHash\n ) {\n return false;\n }\n return true;\n};\n\nconst sortBundles = (\n bundles: Bundle[],\n orderBy: DatabaseBundleQueryOrder | undefined,\n) => {\n const direction = orderBy?.direction ?? \"desc\";\n return bundles.slice().sort((a, b) => {\n const result = a.id.localeCompare(b.id);\n return direction === \"asc\" ? result : -result;\n });\n};\n\nconst makeResponse = (\n bundle: Bundle,\n status: \"UPDATE\" | \"ROLLBACK\",\n): UpdateInfo => ({\n id: bundle.id,\n message: bundle.message,\n shouldForceUpdate: status === \"ROLLBACK\" ? true : bundle.shouldForceUpdate,\n status,\n storageUri: bundle.storageUri,\n fileHash: bundle.fileHash,\n});\n\nconst INIT_BUNDLE_ROLLBACK_UPDATE_INFO: UpdateInfo = {\n message: null,\n id: NIL_UUID,\n shouldForceUpdate: true,\n status: \"ROLLBACK\",\n storageUri: null,\n fileHash: null,\n};\n\nexport function createPluginDatabaseCore<TContext = unknown>(\n getPlugin: () => DatabasePlugin<TContext>,\n resolveFileUrl: (\n storageUri: string | null,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<string | null>,\n options?: {\n createMutationPlugin?: () => DatabasePlugin<TContext>;\n cleanupMutationPlugin?: (\n plugin: DatabasePlugin<TContext>,\n ) => Promise<void> | void;\n },\n): {\n api: DatabaseAPI<TContext>;\n adapterName: string;\n createMigrator: () => never;\n generateSchema: () => never;\n} {\n const runWithMutationPlugin = async <T>(\n operation: (plugin: DatabasePlugin<TContext>) => Promise<T>,\n ): Promise<T> => {\n const plugin = options?.createMutationPlugin?.() ?? getPlugin();\n\n try {\n return await operation(plugin);\n } finally {\n if (options?.createMutationPlugin) {\n await options.cleanupMutationPlugin?.(plugin);\n }\n }\n };\n\n const getSortedBundlePage = async (\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Awaited<ReturnType<DatabasePlugin<TContext>[\"getBundles\"]>>> => {\n const result = await getPlugin().getBundles(\n {\n ...options,\n orderBy: options.orderBy ?? DESC_ORDER,\n },\n context,\n );\n\n return {\n ...result,\n data: sortBundles(result.data, options.orderBy ?? DESC_ORDER),\n };\n };\n\n const isEligibleForUpdate = (\n bundle: Bundle,\n cohort: string | undefined,\n ): boolean => {\n return isCohortEligibleForUpdate(\n bundle.id,\n cohort,\n bundle.rolloutCohortCount,\n bundle.targetCohorts,\n );\n };\n\n const findUpdateInfoByScanning = async ({\n args,\n queryWhere,\n isCandidate,\n context,\n }: {\n args: AppVersionGetBundlesArgs | FingerprintGetBundlesArgs;\n queryWhere: DatabaseBundleQueryWhere;\n isCandidate: (bundle: Bundle) => boolean;\n context?: HotUpdaterContext<TContext>;\n }): Promise<UpdateInfo | null> => {\n let after: string | undefined;\n\n while (true) {\n const { data, pagination } = await getSortedBundlePage(\n {\n where: queryWhere,\n limit: PAGE_SIZE,\n orderBy: DESC_ORDER,\n ...(after\n ? {\n cursor: {\n after,\n },\n }\n : {}),\n },\n context,\n );\n\n for (const bundle of data) {\n if (\n !bundleMatchesQueryWhere(bundle, queryWhere) ||\n !isCandidate(bundle)\n ) {\n continue;\n }\n\n if (args.bundleId === NIL_UUID) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return makeResponse(bundle, \"UPDATE\");\n }\n continue;\n }\n\n const compareResult = bundle.id.localeCompare(args.bundleId);\n\n if (compareResult > 0) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return makeResponse(bundle, \"UPDATE\");\n }\n continue;\n }\n\n if (compareResult === 0) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return null;\n }\n continue;\n }\n\n return makeResponse(bundle, \"ROLLBACK\");\n }\n\n if (!pagination.hasNextPage) {\n break;\n }\n\n after = data.at(-1)?.id;\n if (!after) {\n break;\n }\n }\n\n if (args.bundleId === NIL_UUID) {\n return null;\n }\n\n if (\n args.minBundleId &&\n args.bundleId.localeCompare(args.minBundleId) <= 0\n ) {\n return null;\n }\n\n return INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n };\n\n const getBaseWhere = ({\n platform,\n channel,\n minBundleId,\n }: {\n platform: Platform;\n channel: string;\n minBundleId: string;\n }): DatabaseBundleQueryWhere => ({\n platform,\n channel,\n enabled: true,\n id: {\n gte: minBundleId,\n },\n });\n\n const api: DatabaseAPI<TContext> = {\n async getBundleById(\n id: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle | null> {\n return getPlugin().getBundleById(id, context);\n },\n\n async getUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<UpdateInfo | null> {\n const plugin = getPlugin();\n const directGetUpdateInfo = plugin.getUpdateInfo;\n if (directGetUpdateInfo) {\n return context === undefined\n ? await directGetUpdateInfo(args)\n : await directGetUpdateInfo(args, context);\n }\n\n const channel = args.channel ?? \"production\";\n const minBundleId = args.minBundleId ?? NIL_UUID;\n const baseWhere = getBaseWhere({\n platform: args.platform,\n channel,\n minBundleId,\n });\n\n if (args._updateStrategy === \"fingerprint\") {\n return findUpdateInfoByScanning({\n args,\n queryWhere: {\n ...baseWhere,\n fingerprintHash: args.fingerprintHash,\n },\n context,\n isCandidate: (bundle) => {\n return (\n bundle.enabled &&\n bundle.platform === args.platform &&\n bundle.channel === channel &&\n bundle.id.localeCompare(minBundleId) >= 0 &&\n bundle.fingerprintHash === args.fingerprintHash\n );\n },\n });\n }\n\n return findUpdateInfoByScanning({\n args,\n queryWhere: {\n ...baseWhere,\n },\n context,\n isCandidate: (bundle) => {\n return (\n bundle.enabled &&\n bundle.platform === args.platform &&\n bundle.channel === channel &&\n bundle.id.localeCompare(minBundleId) >= 0 &&\n !!bundle.targetAppVersion &&\n semverSatisfies(bundle.targetAppVersion, args.appVersion)\n );\n },\n });\n },\n\n async getAppUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<AppUpdateInfo | null> {\n const info = await this.getUpdateInfo(args, context);\n if (!info) {\n return null;\n }\n const { storageUri, ...rest } = info as UpdateInfo & {\n storageUri: string | null;\n };\n const fileUrl = await resolveFileUrl(storageUri ?? null, context);\n return { ...rest, fileUrl };\n },\n\n async getChannels(\n context?: HotUpdaterContext<TContext>,\n ): Promise<string[]> {\n return getPlugin().getChannels(context);\n },\n\n async getBundles(options, context?: HotUpdaterContext<TContext>) {\n return getPlugin().getBundles(options, context);\n },\n\n async insertBundle(\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n await plugin.appendBundle(bundle, context);\n await plugin.commitBundle(context);\n });\n },\n\n async updateBundleById(\n bundleId: string,\n newBundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n await plugin.updateBundle(bundleId, newBundle, context);\n await plugin.commitBundle(context);\n });\n },\n\n async deleteBundleById(\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n const bundle = await plugin.getBundleById(bundleId, context);\n if (!bundle) {\n return;\n }\n await plugin.deleteBundle(bundle, context);\n await plugin.commitBundle(context);\n });\n },\n };\n\n return {\n api,\n adapterName: getPlugin().name,\n createMigrator: () => {\n throw new Error(\n \"createMigrator is only available for Kysely/Prisma/Drizzle database adapters.\",\n );\n },\n generateSchema: () => {\n throw new Error(\n \"generateSchema is only available for Kysely/Prisma/Drizzle database adapters.\",\n );\n },\n };\n}\n", "//#region src/rollout.ts\nconst NUMERIC_COHORT_SIZE = 1e3;\nconst DEFAULT_ROLLOUT_COHORT_COUNT = NUMERIC_COHORT_SIZE;\nconst MAX_COHORT_LENGTH = 64;\nconst INVALID_COHORT_ERROR_MESSAGE = `Invalid cohort. Use 1-1000 or a lowercase slug without spaces, up to 64 characters.`;\nconst CUSTOM_COHORT_PATTERN = /^[a-z0-9-]+$/;\nfunction parseNumericCohortValue(cohort) {\n\tif (!/^\\d+$/.test(cohort)) return null;\n\tconst parsed = Number.parseInt(cohort, 10);\n\tif (Number.isNaN(parsed) || parsed < 1 || parsed > 1e3) return null;\n\treturn parsed;\n}\nfunction positiveMod(value, modulus) {\n\treturn (value % modulus + modulus) % modulus;\n}\nfunction hashString(value) {\n\tlet hash = 0;\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst char = value.charCodeAt(i);\n\t\thash = (hash << 5) - hash + char;\n\t\thash |= 0;\n\t}\n\treturn hash;\n}\nfunction gcd(a, b) {\n\tlet x = Math.abs(a);\n\tlet y = Math.abs(b);\n\twhile (y !== 0) {\n\t\tconst next = x % y;\n\t\tx = y;\n\t\ty = next;\n\t}\n\treturn x;\n}\nfunction modularInverse(value, modulus) {\n\tlet t = 0;\n\tlet newT = 1;\n\tlet r = modulus;\n\tlet newR = positiveMod(value, modulus);\n\twhile (newR !== 0) {\n\t\tconst quotient = Math.floor(r / newR);\n\t\t[t, newT] = [newT, t - quotient * newT];\n\t\t[r, newR] = [newR, r - quotient * newR];\n\t}\n\tif (r > 1) throw new Error(`No modular inverse for ${value} mod ${modulus}`);\n\treturn positiveMod(t, modulus);\n}\nfunction getRolloutShuffleParameters(bundleId) {\n\tlet multiplier = positiveMod(hashString(`${bundleId}:multiplier`), 997);\n\tif (multiplier === 0) multiplier = 1;\n\twhile (gcd(multiplier, NUMERIC_COHORT_SIZE) !== 1) {\n\t\tmultiplier = positiveMod(multiplier + 1, NUMERIC_COHORT_SIZE);\n\t\tif (multiplier === 0) multiplier = 1;\n\t}\n\tconst offset = positiveMod(hashString(`${bundleId}:offset`), NUMERIC_COHORT_SIZE);\n\treturn {\n\t\tmultiplier,\n\t\toffset,\n\t\tinverseMultiplier: modularInverse(multiplier, NUMERIC_COHORT_SIZE)\n\t};\n}\nfunction normalizeRolloutCohortCount(rolloutCohortCount) {\n\tif (rolloutCohortCount === null || rolloutCohortCount === void 0) return DEFAULT_ROLLOUT_COHORT_COUNT;\n\tif (rolloutCohortCount <= 0) return 0;\n\tif (rolloutCohortCount >= 1e3) return NUMERIC_COHORT_SIZE;\n\treturn Math.floor(rolloutCohortCount);\n}\nfunction normalizeCohortValue(cohort) {\n\tconst normalized = cohort.trim().toLowerCase();\n\tconst numericCohort = parseNumericCohortValue(normalized);\n\tif (numericCohort !== null) return String(numericCohort);\n\treturn normalized;\n}\nfunction getNumericCohortValue(cohort) {\n\treturn parseNumericCohortValue(normalizeCohortValue(cohort));\n}\nfunction isNumericCohort(cohort) {\n\treturn getNumericCohortValue(cohort) !== null;\n}\nfunction isCustomCohort(cohort) {\n\tconst normalized = normalizeCohortValue(cohort);\n\treturn normalized.length > 0 && normalized.length <= 64 && !/^\\d+$/.test(normalized) && CUSTOM_COHORT_PATTERN.test(normalized);\n}\nfunction isValidCohort(cohort) {\n\tconst normalized = normalizeCohortValue(cohort);\n\treturn isNumericCohort(normalized) || isCustomCohort(normalized);\n}\nfunction getDefaultNumericCohort(identifier) {\n\tconst cohortValue = positiveMod(hashString(identifier), NUMERIC_COHORT_SIZE) + 1;\n\treturn String(cohortValue);\n}\nfunction getNumericCohortRolloutPosition(bundleId, cohortValue) {\n\tif (cohortValue < 1 || cohortValue > 1e3) throw new Error(`Invalid numeric cohort: ${cohortValue}`);\n\tconst { offset, inverseMultiplier } = getRolloutShuffleParameters(bundleId);\n\treturn positiveMod(inverseMultiplier * (cohortValue - 1 - offset), NUMERIC_COHORT_SIZE);\n}\nfunction getRolledOutNumericCohorts(bundleId, rolloutCohortCount) {\n\tconst normalizedRolloutCount = normalizeRolloutCohortCount(rolloutCohortCount);\n\tif (normalizedRolloutCount <= 0) return [];\n\treturn Array.from({ length: NUMERIC_COHORT_SIZE }, (_, index) => index + 1).filter((cohortValue) => {\n\t\tif (normalizedRolloutCount >= 1e3) return true;\n\t\treturn getNumericCohortRolloutPosition(bundleId, cohortValue) < normalizedRolloutCount;\n\t});\n}\nfunction isCohortEligibleForUpdate(bundleId, cohort, rolloutCohortCount, targetCohorts) {\n\tconst normalizedCohort = cohort === null || cohort === void 0 ? void 0 : normalizeCohortValue(cohort);\n\tconst normalizedTargetCohorts = targetCohorts?.map((targetCohort) => normalizeCohortValue(targetCohort)) ?? [];\n\tif (normalizedCohort !== void 0 && normalizedTargetCohorts.includes(normalizedCohort)) return true;\n\tconst normalizedRolloutCount = normalizeRolloutCohortCount(rolloutCohortCount);\n\tif (normalizedRolloutCount <= 0) return false;\n\tif (normalizedCohort === void 0) return normalizedRolloutCount >= NUMERIC_COHORT_SIZE;\n\tconst numericCohort = getNumericCohortValue(normalizedCohort);\n\tif (numericCohort === null) return false;\n\tif (normalizedRolloutCount >= 1e3) return true;\n\treturn getNumericCohortRolloutPosition(bundleId, numericCohort) < normalizedRolloutCount;\n}\n//#endregion\n//#region src/uuid.ts\nconst NIL_UUID = \"00000000-0000-0000-0000-000000000000\";\n//#endregion\nexport { DEFAULT_ROLLOUT_COHORT_COUNT, INVALID_COHORT_ERROR_MESSAGE, MAX_COHORT_LENGTH, NIL_UUID, NUMERIC_COHORT_SIZE, getDefaultNumericCohort, getNumericCohortRolloutPosition, getNumericCohortValue, getRolledOutNumericCohorts, isCohortEligibleForUpdate, isCustomCohort, isNumericCohort, isValidCohort, normalizeCohortValue, normalizeRolloutCohortCount };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { detectCompressionFormat, getCompressionMimeType, getContentType } from \"./compressionFormat.mjs\";\nimport { createDatabasePlugin } from \"./createDatabasePlugin.mjs\";\nimport { semverSatisfies } from \"./semverSatisfies.mjs\";\nimport { filterCompatibleAppVersions } from \"./filterCompatibleAppVersions.mjs\";\nimport { bundleIdMatchesFilter, bundleMatchesQueryWhere, sortBundles } from \"./queryBundles.mjs\";\nimport { paginateBundles } from \"./paginateBundles.mjs\";\nimport { createBlobDatabasePlugin } from \"./createBlobDatabasePlugin.mjs\";\nimport { createDatabasePluginGetUpdateInfo } from \"./createDatabasePluginGetUpdateInfo.mjs\";\nimport { createStorageKeyBuilder } from \"./createStorageKeyBuilder.mjs\";\nimport { createStoragePlugin } from \"./createStoragePlugin.mjs\";\nimport { generateMinBundleId } from \"./generateMinBundleId.mjs\";\nimport { parseStorageUri } from \"./parseStorageUri.mjs\";\nimport { supportedIosPlatforms } from \"./types/index.mjs\";\nexport { bundleIdMatchesFilter, bundleMatchesQueryWhere, calculatePagination, createBlobDatabasePlugin, createDatabasePlugin, createDatabasePluginGetUpdateInfo, createStorageKeyBuilder, createStoragePlugin, detectCompressionFormat, filterCompatibleAppVersions, generateMinBundleId, getCompressionMimeType, getContentType, paginateBundles, parseStorageUri, semverSatisfies, sortBundles, supportedIosPlatforms };\n", "//#region src/calculatePagination.ts\n/**\n* Calculate pagination information based on total count, limit, and offset\n*/\nfunction calculatePagination(total, options) {\n\tconst { limit, offset } = options;\n\tif (total === 0) return {\n\t\ttotal: 0,\n\t\thasNextPage: false,\n\t\thasPreviousPage: false,\n\t\tcurrentPage: 1,\n\t\ttotalPages: 0\n\t};\n\tconst currentPage = Math.floor(offset / limit) + 1;\n\tconst totalPages = Math.ceil(total / limit);\n\treturn {\n\t\ttotal,\n\t\thasNextPage: offset + limit < total,\n\t\thasPreviousPage: offset > 0,\n\t\tcurrentPage,\n\t\ttotalPages\n\t};\n}\n//#endregion\nexport { calculatePagination };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { mergeWith } from \"es-toolkit\";\n//#region src/createDatabasePlugin.ts\nconst REPLACE_ON_UPDATE_KEYS = [\"targetCohorts\"];\nconst DEFAULT_DESC_ORDER = {\n\tfield: \"id\",\n\tdirection: \"desc\"\n};\nfunction normalizePage(value) {\n\tif (!Number.isInteger(value) || value === void 0 || value < 1) return;\n\treturn value;\n}\nfunction mergeBundleUpdate(baseBundle, patch) {\n\treturn mergeWith(baseBundle, patch, (_targetValue, sourceValue, key) => {\n\t\tif (REPLACE_ON_UPDATE_KEYS.includes(key)) return sourceValue;\n\t});\n}\nfunction mergeIdFilter(base, patch) {\n\treturn {\n\t\t...base,\n\t\t...patch\n\t};\n}\nfunction mergeWhereWithIdFilter(where, idFilter) {\n\treturn {\n\t\t...where,\n\t\tid: mergeIdFilter(where?.id, idFilter)\n\t};\n}\nfunction buildCursorPageQuery(where, cursor, orderBy) {\n\tconst direction = orderBy.direction;\n\tif (cursor.after) return {\n\t\treverseData: false,\n\t\twhere: mergeWhereWithIdFilter(where, { [direction === \"desc\" ? \"lt\" : \"gt\"]: cursor.after }),\n\t\torderBy\n\t};\n\tif (cursor.before) return {\n\t\treverseData: true,\n\t\twhere: mergeWhereWithIdFilter(where, { [direction === \"desc\" ? \"gt\" : \"lt\"]: cursor.before }),\n\t\torderBy: {\n\t\t\tfield: orderBy.field,\n\t\t\tdirection: direction === \"desc\" ? \"asc\" : \"desc\"\n\t\t}\n\t};\n\treturn {\n\t\treverseData: false,\n\t\twhere: where ?? {},\n\t\torderBy\n\t};\n}\nfunction buildCountBeforeWhere(where, firstBundleId, orderBy) {\n\treturn mergeWhereWithIdFilter(where, { [orderBy.direction === \"desc\" ? \"gt\" : \"lt\"]: firstBundleId });\n}\nfunction createPaginatedResult(total, limit, startIndex, data) {\n\tconst pagination = calculatePagination(total, {\n\t\tlimit,\n\t\toffset: startIndex\n\t});\n\tconst nextCursor = data.length > 0 && startIndex + data.length < total ? data.at(-1)?.id : void 0;\n\tconst previousCursor = data.length > 0 && startIndex > 0 ? data[0]?.id : void 0;\n\treturn {\n\t\tdata,\n\t\tpagination: {\n\t\t\t...pagination,\n\t\t\t...nextCursor ? { nextCursor } : {},\n\t\t\t...previousCursor ? { previousCursor } : {}\n\t\t}\n\t};\n}\n/**\n* Creates a database plugin with lazy initialization and automatic hook execution.\n*\n* This factory function abstracts the double currying pattern used by all database plugins,\n* ensuring consistent lazy initialization behavior across different database providers.\n* Hooks are automatically executed at appropriate times without requiring manual invocation.\n*\n* @param options - Configuration options for the database plugin\n* @returns A double-curried function that lazily initializes the database plugin\n*\n* @example\n* ```typescript\n* export const postgres = createDatabasePlugin<PostgresConfig>({\n* name: \"postgres\",\n* factory: (config) => {\n* const db = new Kysely(config);\n* return {\n* async getBundleById(bundleId) { ... },\n* async getBundles(options) { ... },\n* async getChannels() { ... },\n* async commitBundle({ changedSets }) { ... }\n* };\n* }\n* });\n* ```\n*/\nfunction createDatabasePlugin(options) {\n\treturn (config, hooks) => {\n\t\tlet cachedMethods = null;\n\t\tconst getMethods = () => {\n\t\t\tif (!cachedMethods) cachedMethods = options.factory(config);\n\t\t\treturn cachedMethods;\n\t\t};\n\t\treturn () => {\n\t\t\tconst changedMap = /* @__PURE__ */ new Map();\n\t\t\tconst markChanged = (operation, data) => {\n\t\t\t\tchangedMap.set(data.id, {\n\t\t\t\t\toperation,\n\t\t\t\t\tdata\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst runGetBundles = async (options, context) => {\n\t\t\t\tif (context === void 0) return getMethods().getBundles(options);\n\t\t\t\treturn getMethods().getBundles(options, context);\n\t\t\t};\n\t\t\tconst getBundlesWithLegacyCursorFallback = async (options, context) => {\n\t\t\t\tconst orderBy = options.orderBy ?? DEFAULT_DESC_ORDER;\n\t\t\t\tconst baseWhere = options.where;\n\t\t\t\tconst total = (await runGetBundles({\n\t\t\t\t\twhere: baseWhere,\n\t\t\t\t\tlimit: 1,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy\n\t\t\t\t}, context)).pagination.total;\n\t\t\t\tif (!options.cursor?.after && !options.cursor?.before) {\n\t\t\t\t\tconst firstPage = await runGetBundles({\n\t\t\t\t\t\twhere: baseWhere,\n\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy\n\t\t\t\t\t}, context);\n\t\t\t\t\treturn createPaginatedResult(total, options.limit, 0, firstPage.data);\n\t\t\t\t}\n\t\t\t\tconst { where, orderBy: queryOrderBy, reverseData } = buildCursorPageQuery(baseWhere, options.cursor, orderBy);\n\t\t\t\tconst cursorPage = await runGetBundles({\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy: queryOrderBy\n\t\t\t\t}, context);\n\t\t\t\tconst data = reverseData ? cursorPage.data.slice().reverse() : cursorPage.data;\n\t\t\t\tif (data.length === 0) {\n\t\t\t\t\tconst emptyStartIndex = options.cursor.after ? total : 0;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\t...calculatePagination(total, {\n\t\t\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\t\t\toffset: emptyStartIndex\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...options.cursor.after ? { previousCursor: options.cursor.after } : {},\n\t\t\t\t\t\t\t...options.cursor.before ? { nextCursor: options.cursor.before } : {}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst firstBundleId = data[0].id;\n\t\t\t\tconst countBeforeResult = await runGetBundles({\n\t\t\t\t\twhere: buildCountBeforeWhere(baseWhere, firstBundleId, orderBy),\n\t\t\t\t\tlimit: 1,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy\n\t\t\t\t}, context);\n\t\t\t\treturn createPaginatedResult(total, options.limit, countBeforeResult.pagination.total, data);\n\t\t\t};\n\t\t\tconst plugin = {\n\t\t\t\tname: options.name,\n\t\t\t\tasync getBundleById(bundleId, context) {\n\t\t\t\t\tif (context === void 0) return getMethods().getBundleById(bundleId);\n\t\t\t\t\treturn getMethods().getBundleById(bundleId, context);\n\t\t\t\t},\n\t\t\t\tasync getBundles(options, context) {\n\t\t\t\t\tif (typeof options === \"object\" && options !== null && \"offset\" in options && options.offset !== void 0) throw new Error(\"Bundle offset pagination has been removed. Use cursor.after or cursor.before instead.\");\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tconst normalizedOptions = {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tpage: normalizePage(options.page),\n\t\t\t\t\t\torderBy: options.orderBy ?? DEFAULT_DESC_ORDER\n\t\t\t\t\t};\n\t\t\t\t\tif (normalizedOptions.page !== void 0) {\n\t\t\t\t\t\tconst { page, ...pageOptions } = normalizedOptions;\n\t\t\t\t\t\tconst requestedOffset = (page - 1) * normalizedOptions.limit;\n\t\t\t\t\t\tlet pageResult = await runGetBundles({\n\t\t\t\t\t\t\t...pageOptions,\n\t\t\t\t\t\t\toffset: requestedOffset\n\t\t\t\t\t\t}, context);\n\t\t\t\t\t\tconst total = pageResult.pagination.total;\n\t\t\t\t\t\tconst totalPages = total === 0 ? 0 : Math.ceil(total / normalizedOptions.limit);\n\t\t\t\t\t\tconst maxOffset = totalPages === 0 ? 0 : (Math.max(1, totalPages) - 1) * normalizedOptions.limit;\n\t\t\t\t\t\tconst resolvedOffset = Math.min(requestedOffset, maxOffset);\n\t\t\t\t\t\tif (resolvedOffset !== requestedOffset) pageResult = await runGetBundles({\n\t\t\t\t\t\t\t...pageOptions,\n\t\t\t\t\t\t\toffset: resolvedOffset\n\t\t\t\t\t\t}, context);\n\t\t\t\t\t\treturn createPaginatedResult(total, normalizedOptions.limit, resolvedOffset, pageResult.data);\n\t\t\t\t\t}\n\t\t\t\t\tif (methods.supportsCursorPagination) {\n\t\t\t\t\t\tif (context === void 0) return methods.getBundles(normalizedOptions);\n\t\t\t\t\t\treturn methods.getBundles(normalizedOptions, context);\n\t\t\t\t\t}\n\t\t\t\t\treturn getBundlesWithLegacyCursorFallback(normalizedOptions, context);\n\t\t\t\t},\n\t\t\t\tasync getChannels(context) {\n\t\t\t\t\tif (context === void 0) return getMethods().getChannels();\n\t\t\t\t\treturn getMethods().getChannels(context);\n\t\t\t\t},\n\t\t\t\tasync onUnmount() {\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tif (methods.onUnmount) return methods.onUnmount();\n\t\t\t\t},\n\t\t\t\tasync commitBundle(context) {\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tconst params = { changedSets: Array.from(changedMap.values()) };\n\t\t\t\t\tif (context === void 0) await methods.commitBundle(params);\n\t\t\t\t\telse await methods.commitBundle(params, context);\n\t\t\t\t\tchangedMap.clear();\n\t\t\t\t\tawait hooks?.onDatabaseUpdated?.();\n\t\t\t\t},\n\t\t\t\tasync updateBundle(targetBundleId, newBundle, context) {\n\t\t\t\t\tconst pendingChange = changedMap.get(targetBundleId);\n\t\t\t\t\tif (pendingChange) {\n\t\t\t\t\t\tconst updatedData = mergeBundleUpdate(pendingChange.data, newBundle);\n\t\t\t\t\t\tchangedMap.set(targetBundleId, {\n\t\t\t\t\t\t\toperation: pendingChange.operation,\n\t\t\t\t\t\t\tdata: updatedData\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst currentBundle = context === void 0 ? await getMethods().getBundleById(targetBundleId) : await getMethods().getBundleById(targetBundleId, context);\n\t\t\t\t\tif (!currentBundle) throw new Error(\"targetBundleId not found\");\n\t\t\t\t\tmarkChanged(\"update\", mergeBundleUpdate(currentBundle, newBundle));\n\t\t\t\t},\n\t\t\t\tasync appendBundle(inputBundle) {\n\t\t\t\t\tmarkChanged(\"insert\", inputBundle);\n\t\t\t\t},\n\t\t\t\tasync deleteBundle(deleteBundle) {\n\t\t\t\t\tmarkChanged(\"delete\", deleteBundle);\n\t\t\t\t}\n\t\t\t};\n\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst directGetUpdateInfo = getMethods().getUpdateInfo;\n\t\t\t\t\tif (!directGetUpdateInfo) {\n\t\t\t\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\tvalue: void 0\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst wrappedGetUpdateInfo = async (args, context) => {\n\t\t\t\t\t\tif (context === void 0) return directGetUpdateInfo(args);\n\t\t\t\t\t\treturn directGetUpdateInfo(args, context);\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tvalue: wrappedGetUpdateInfo\n\t\t\t\t\t});\n\t\t\t\t\treturn wrappedGetUpdateInfo;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn plugin;\n\t\t};\n\t};\n}\n//#endregion\nexport { createDatabasePlugin };\n", "export { at } from './array/at.mjs';\nexport { chunk } from './array/chunk.mjs';\nexport { compact } from './array/compact.mjs';\nexport { countBy } from './array/countBy.mjs';\nexport { difference } from './array/difference.mjs';\nexport { differenceBy } from './array/differenceBy.mjs';\nexport { differenceWith } from './array/differenceWith.mjs';\nexport { drop } from './array/drop.mjs';\nexport { dropRight } from './array/dropRight.mjs';\nexport { dropRightWhile } from './array/dropRightWhile.mjs';\nexport { dropWhile } from './array/dropWhile.mjs';\nexport { fill } from './array/fill.mjs';\nexport { flatMap } from './array/flatMap.mjs';\nexport { flatMapDeep } from './array/flatMapDeep.mjs';\nexport { flatten } from './array/flatten.mjs';\nexport { flattenDeep } from './array/flattenDeep.mjs';\nexport { forEachRight } from './array/forEachRight.mjs';\nexport { groupBy } from './array/groupBy.mjs';\nexport { head } from './array/head.mjs';\nexport { initial } from './array/initial.mjs';\nexport { intersection } from './array/intersection.mjs';\nexport { intersectionBy } from './array/intersectionBy.mjs';\nexport { intersectionWith } from './array/intersectionWith.mjs';\nexport { isSubset } from './array/isSubset.mjs';\nexport { isSubsetWith } from './array/isSubsetWith.mjs';\nexport { keyBy } from './array/keyBy.mjs';\nexport { last } from './array/last.mjs';\nexport { maxBy } from './array/maxBy.mjs';\nexport { minBy } from './array/minBy.mjs';\nexport { orderBy } from './array/orderBy.mjs';\nexport { partition } from './array/partition.mjs';\nexport { pull } from './array/pull.mjs';\nexport { pullAt } from './array/pullAt.mjs';\nexport { remove } from './array/remove.mjs';\nexport { sample } from './array/sample.mjs';\nexport { sampleSize } from './array/sampleSize.mjs';\nexport { shuffle } from './array/shuffle.mjs';\nexport { sortBy } from './array/sortBy.mjs';\nexport { tail } from './array/tail.mjs';\nexport { take } from './array/take.mjs';\nexport { takeRight } from './array/takeRight.mjs';\nexport { takeRightWhile } from './array/takeRightWhile.mjs';\nexport { takeWhile } from './array/takeWhile.mjs';\nexport { toFilled } from './array/toFilled.mjs';\nexport { union } from './array/union.mjs';\nexport { unionBy } from './array/unionBy.mjs';\nexport { unionWith } from './array/unionWith.mjs';\nexport { uniq } from './array/uniq.mjs';\nexport { uniqBy } from './array/uniqBy.mjs';\nexport { uniqWith } from './array/uniqWith.mjs';\nexport { unzip } from './array/unzip.mjs';\nexport { unzipWith } from './array/unzipWith.mjs';\nexport { windowed } from './array/windowed.mjs';\nexport { without } from './array/without.mjs';\nexport { xor } from './array/xor.mjs';\nexport { xorBy } from './array/xorBy.mjs';\nexport { xorWith } from './array/xorWith.mjs';\nexport { zip } from './array/zip.mjs';\nexport { zipObject } from './array/zipObject.mjs';\nexport { zipWith } from './array/zipWith.mjs';\nexport { AbortError } from './error/AbortError.mjs';\nexport { TimeoutError } from './error/TimeoutError.mjs';\nexport { after } from './function/after.mjs';\nexport { ary } from './function/ary.mjs';\nexport { asyncNoop } from './function/asyncNoop.mjs';\nexport { before } from './function/before.mjs';\nexport { curry } from './function/curry.mjs';\nexport { curryRight } from './function/curryRight.mjs';\nexport { debounce } from './function/debounce.mjs';\nexport { flow } from './function/flow.mjs';\nexport { flowRight } from './function/flowRight.mjs';\nexport { identity } from './function/identity.mjs';\nexport { memoize } from './function/memoize.mjs';\nexport { negate } from './function/negate.mjs';\nexport { noop } from './function/noop.mjs';\nexport { once } from './function/once.mjs';\nexport { partial } from './function/partial.mjs';\nexport { partialRight } from './function/partialRight.mjs';\nexport { rest } from './function/rest.mjs';\nexport { retry } from './function/retry.mjs';\nexport { spread } from './function/spread.mjs';\nexport { throttle } from './function/throttle.mjs';\nexport { unary } from './function/unary.mjs';\nexport { clamp } from './math/clamp.mjs';\nexport { inRange } from './math/inRange.mjs';\nexport { mean } from './math/mean.mjs';\nexport { meanBy } from './math/meanBy.mjs';\nexport { median } from './math/median.mjs';\nexport { medianBy } from './math/medianBy.mjs';\nexport { random } from './math/random.mjs';\nexport { randomInt } from './math/randomInt.mjs';\nexport { range } from './math/range.mjs';\nexport { rangeRight } from './math/rangeRight.mjs';\nexport { round } from './math/round.mjs';\nexport { sum } from './math/sum.mjs';\nexport { sumBy } from './math/sumBy.mjs';\nexport { clone } from './object/clone.mjs';\nexport { cloneDeep } from './object/cloneDeep.mjs';\nexport { cloneDeepWith } from './object/cloneDeepWith.mjs';\nexport { findKey } from './object/findKey.mjs';\nexport { flattenObject } from './object/flattenObject.mjs';\nexport { invert } from './object/invert.mjs';\nexport { mapKeys } from './object/mapKeys.mjs';\nexport { mapValues } from './object/mapValues.mjs';\nexport { merge } from './object/merge.mjs';\nexport { mergeWith } from './object/mergeWith.mjs';\nexport { omit } from './object/omit.mjs';\nexport { omitBy } from './object/omitBy.mjs';\nexport { pick } from './object/pick.mjs';\nexport { pickBy } from './object/pickBy.mjs';\nexport { toMerged } from './object/toMerged.mjs';\nexport { isArrayBuffer } from './predicate/isArrayBuffer.mjs';\nexport { isBlob } from './predicate/isBlob.mjs';\nexport { isBoolean } from './predicate/isBoolean.mjs';\nexport { isBuffer } from './predicate/isBuffer.mjs';\nexport { isDate } from './predicate/isDate.mjs';\nexport { isEqual } from './predicate/isEqual.mjs';\nexport { isEqualWith } from './predicate/isEqualWith.mjs';\nexport { isError } from './predicate/isError.mjs';\nexport { isFile } from './predicate/isFile.mjs';\nexport { isFunction } from './predicate/isFunction.mjs';\nexport { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';\nexport { isLength } from './predicate/isLength.mjs';\nexport { isMap } from './predicate/isMap.mjs';\nexport { isNil } from './predicate/isNil.mjs';\nexport { isNotNil } from './predicate/isNotNil.mjs';\nexport { isNull } from './predicate/isNull.mjs';\nexport { isPlainObject } from './predicate/isPlainObject.mjs';\nexport { isPrimitive } from './predicate/isPrimitive.mjs';\nexport { isPromise } from './predicate/isPromise.mjs';\nexport { isRegExp } from './predicate/isRegExp.mjs';\nexport { isSet } from './predicate/isSet.mjs';\nexport { isString } from './predicate/isString.mjs';\nexport { isSymbol } from './predicate/isSymbol.mjs';\nexport { isTypedArray } from './predicate/isTypedArray.mjs';\nexport { isUndefined } from './predicate/isUndefined.mjs';\nexport { isWeakMap } from './predicate/isWeakMap.mjs';\nexport { isWeakSet } from './predicate/isWeakSet.mjs';\nexport { delay } from './promise/delay.mjs';\nexport { Mutex } from './promise/mutex.mjs';\nexport { Semaphore } from './promise/semaphore.mjs';\nexport { timeout } from './promise/timeout.mjs';\nexport { withTimeout } from './promise/withTimeout.mjs';\nexport { camelCase } from './string/camelCase.mjs';\nexport { capitalize } from './string/capitalize.mjs';\nexport { constantCase } from './string/constantCase.mjs';\nexport { deburr } from './string/deburr.mjs';\nexport { escape } from './string/escape.mjs';\nexport { escapeRegExp } from './string/escapeRegExp.mjs';\nexport { kebabCase } from './string/kebabCase.mjs';\nexport { lowerCase } from './string/lowerCase.mjs';\nexport { lowerFirst } from './string/lowerFirst.mjs';\nexport { pad } from './string/pad.mjs';\nexport { pascalCase } from './string/pascalCase.mjs';\nexport { snakeCase } from './string/snakeCase.mjs';\nexport { startCase } from './string/startCase.mjs';\nexport { trim } from './string/trim.mjs';\nexport { trimEnd } from './string/trimEnd.mjs';\nexport { trimStart } from './string/trimStart.mjs';\nexport { unescape } from './string/unescape.mjs';\nexport { upperCase } from './string/upperCase.mjs';\nexport { upperFirst } from './string/upperFirst.mjs';\nexport { words } from './string/words.mjs';\nexport { invariant } from './util/invariant.mjs';\n", "import { isObjectLike } from '../compat/predicate/isObjectLike.mjs';\n\nfunction mergeWith(target, source, merge) {\n const sourceKeys = Object.keys(source);\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n const sourceValue = source[key];\n const targetValue = target[key];\n const merged = merge(targetValue, sourceValue, key, target, source);\n if (merged != null) {\n target[key] = merged;\n }\n else if (Array.isArray(sourceValue)) {\n target[key] = mergeWith(targetValue ?? [], sourceValue, merge);\n }\n else if (isObjectLike(targetValue) && isObjectLike(sourceValue)) {\n target[key] = mergeWith(targetValue ?? {}, sourceValue, merge);\n }\n else if (targetValue === undefined || sourceValue !== undefined) {\n target[key] = sourceValue;\n }\n }\n return target;\n}\n\nexport { mergeWith };\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\n\nexport { isObjectLike };\n", "import semver from \"semver\";\n//#region src/semverSatisfies.ts\nconst semverSatisfies = (targetAppVersion, currentVersion) => {\n\tconst currentCoerce = semver.coerce(currentVersion);\n\tif (!currentCoerce) return false;\n\treturn semver.satisfies(currentCoerce.version, targetAppVersion);\n};\n//#endregion\nexport { semverSatisfies };\n", "import { semverSatisfies } from \"./semverSatisfies.mjs\";\n//#region src/filterCompatibleAppVersions.ts\n/**\n* Filters target app versions that are compatible with the current app version.\n* Returns only versions that are compatible with the current version according to semver rules.\n*\n* @param targetAppVersionList - List of target app versions to filter\n* @param currentVersion - Current app version\n* @returns Array of target app versions compatible with the current version\n*/\nconst filterCompatibleAppVersions = (targetAppVersionList, currentVersion) => {\n\treturn targetAppVersionList.filter((version) => semverSatisfies(version, currentVersion)).sort((a, b) => b.localeCompare(a));\n};\n//#endregion\nexport { filterCompatibleAppVersions };\n", "import { NIL_UUID, isCohortEligibleForUpdate } from \"@hot-updater/core\";\n//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js\nvar require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SEMVER_SPEC_VERSION = \"2.0.0\";\n\tconst MAX_LENGTH = 256;\n\tconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\tmodule.exports = {\n\t\tMAX_LENGTH,\n\t\tMAX_SAFE_COMPONENT_LENGTH: 16,\n\t\tMAX_SAFE_BUILD_LENGTH: MAX_LENGTH - 6,\n\t\tMAX_SAFE_INTEGER,\n\t\tRELEASE_TYPES: [\n\t\t\t\"major\",\n\t\t\t\"premajor\",\n\t\t\t\"minor\",\n\t\t\t\"preminor\",\n\t\t\t\"patch\",\n\t\t\t\"prepatch\",\n\t\t\t\"prerelease\"\n\t\t],\n\t\tSEMVER_SPEC_VERSION,\n\t\tFLAG_INCLUDE_PRERELEASE: 1,\n\t\tFLAG_LOOSE: 2\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js\nvar require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js\nvar require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();\n\tconst debug = require_debug();\n\texports = module.exports = {};\n\tconst re = exports.re = [];\n\tconst safeRe = exports.safeRe = [];\n\tconst src = exports.src = [];\n\tconst safeSrc = exports.safeSrc = [];\n\tconst t = exports.t = {};\n\tlet R = 0;\n\tconst LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n\tconst safeRegexReplacements = [\n\t\t[\"\\\\s\", 1],\n\t\t[\"\\\\d\", MAX_LENGTH],\n\t\t[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]\n\t];\n\tconst makeSafeRegex = (value) => {\n\t\tfor (const [token, max] of safeRegexReplacements) value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n\t\treturn value;\n\t};\n\tconst createToken = (name, value, isGlobal) => {\n\t\tconst safe = makeSafeRegex(value);\n\t\tconst index = R++;\n\t\tdebug(name, index, value);\n\t\tt[name] = index;\n\t\tsrc[index] = value;\n\t\tsafeSrc[index] = safe;\n\t\tre[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n\t\tsafeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n\t};\n\tcreateToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n\tcreateToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n\tcreateToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n\tcreateToken(\"MAINVERSION\", `(${src[t.NUMERICIDENTIFIER]})\\\\.(${src[t.NUMERICIDENTIFIER]})\\\\.(${src[t.NUMERICIDENTIFIER]})`);\n\tcreateToken(\"MAINVERSIONLOOSE\", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);\n\tcreateToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);\n\tcreateToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);\n\tcreateToken(\"PRERELEASE\", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`);\n\tcreateToken(\"PRERELEASELOOSE\", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);\n\tcreateToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n\tcreateToken(\"BUILD\", `(?:\\\\+(${src[t.BUILDIDENTIFIER]}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`);\n\tcreateToken(\"FULLPLAIN\", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);\n\tcreateToken(\"FULL\", `^${src[t.FULLPLAIN]}$`);\n\tcreateToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);\n\tcreateToken(\"LOOSE\", `^${src[t.LOOSEPLAIN]}$`);\n\tcreateToken(\"GTLT\", \"((?:<|>)?=?)\");\n\tcreateToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n\tcreateToken(\"XRANGEIDENTIFIER\", `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n\tcreateToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\\\.(${src[t.XRANGEIDENTIFIER]})(?:\\\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);\n\tcreateToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);\n\tcreateToken(\"XRANGE\", `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"XRANGELOOSE\", `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"COERCEPLAIN\", `(^|[^\\\\d])(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);\n\tcreateToken(\"COERCE\", `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`);\n\tcreateToken(\"COERCEFULL\", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\\\d])`);\n\tcreateToken(\"COERCERTL\", src[t.COERCE], true);\n\tcreateToken(\"COERCERTLFULL\", src[t.COERCEFULL], true);\n\tcreateToken(\"LONETILDE\", \"(?:~>?)\");\n\tcreateToken(\"TILDETRIM\", `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true);\n\texports.tildeTrimReplace = \"$1~\";\n\tcreateToken(\"TILDE\", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"TILDELOOSE\", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"LONECARET\", \"(?:\\\\^)\");\n\tcreateToken(\"CARETTRIM\", `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true);\n\texports.caretTrimReplace = \"$1^\";\n\tcreateToken(\"CARET\", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"CARETLOOSE\", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"COMPARATORLOOSE\", `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`);\n\tcreateToken(\"COMPARATOR\", `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`);\n\tcreateToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);\n\texports.comparatorTrimReplace = \"$1$2$3\";\n\tcreateToken(\"HYPHENRANGE\", `^\\\\s*(${src[t.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t.XRANGEPLAIN]})\\\\s*$`);\n\tcreateToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t.XRANGEPLAINLOOSE]})\\\\s*$`);\n\tcreateToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n\tcreateToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n\tcreateToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js\nvar require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst looseOption = Object.freeze({ loose: true });\n\tconst emptyOpts = Object.freeze({});\n\tconst parseOptions = (options) => {\n\t\tif (!options) return emptyOpts;\n\t\tif (typeof options !== \"object\") return looseOption;\n\t\treturn options;\n\t};\n\tmodule.exports = parseOptions;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js\nvar require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst numeric = /^[0-9]+$/;\n\tconst compareIdentifiers = (a, b) => {\n\t\tconst anum = numeric.test(a);\n\t\tconst bnum = numeric.test(b);\n\t\tif (anum && bnum) {\n\t\t\ta = +a;\n\t\t\tb = +b;\n\t\t}\n\t\treturn a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n\t};\n\tconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);\n\tmodule.exports = {\n\t\tcompareIdentifiers,\n\t\trcompareIdentifiers\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js\nvar require_semver$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst debug = require_debug();\n\tconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();\n\tconst { safeRe: re, t } = require_re();\n\tconst parseOptions = require_parse_options();\n\tconst { compareIdentifiers } = require_identifiers();\n\tmodule.exports = class SemVer {\n\t\tconstructor(version, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (version instanceof SemVer) if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) return version;\n\t\t\telse version = version.version;\n\t\t\telse if (typeof version !== \"string\") throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n\t\t\tif (version.length > MAX_LENGTH) throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);\n\t\t\tdebug(\"SemVer\", version, options);\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.includePrerelease = !!options.includePrerelease;\n\t\t\tconst m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n\t\t\tif (!m) throw new TypeError(`Invalid Version: ${version}`);\n\t\t\tthis.raw = version;\n\t\t\tthis.major = +m[1];\n\t\t\tthis.minor = +m[2];\n\t\t\tthis.patch = +m[3];\n\t\t\tif (this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError(\"Invalid major version\");\n\t\t\tif (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError(\"Invalid minor version\");\n\t\t\tif (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError(\"Invalid patch version\");\n\t\t\tif (!m[4]) this.prerelease = [];\n\t\t\telse this.prerelease = m[4].split(\".\").map((id) => {\n\t\t\t\tif (/^[0-9]+$/.test(id)) {\n\t\t\t\t\tconst num = +id;\n\t\t\t\t\tif (num >= 0 && num < MAX_SAFE_INTEGER) return num;\n\t\t\t\t}\n\t\t\t\treturn id;\n\t\t\t});\n\t\t\tthis.build = m[5] ? m[5].split(\".\") : [];\n\t\t\tthis.format();\n\t\t}\n\t\tformat() {\n\t\t\tthis.version = `${this.major}.${this.minor}.${this.patch}`;\n\t\t\tif (this.prerelease.length) this.version += `-${this.prerelease.join(\".\")}`;\n\t\t\treturn this.version;\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.version;\n\t\t}\n\t\tcompare(other) {\n\t\t\tdebug(\"SemVer.compare\", this.version, this.options, other);\n\t\t\tif (!(other instanceof SemVer)) {\n\t\t\t\tif (typeof other === \"string\" && other === this.version) return 0;\n\t\t\t\tother = new SemVer(other, this.options);\n\t\t\t}\n\t\t\tif (other.version === this.version) return 0;\n\t\t\treturn this.compareMain(other) || this.comparePre(other);\n\t\t}\n\t\tcompareMain(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\treturn compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n\t\t}\n\t\tcomparePre(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\tif (this.prerelease.length && !other.prerelease.length) return -1;\n\t\t\telse if (!this.prerelease.length && other.prerelease.length) return 1;\n\t\t\telse if (!this.prerelease.length && !other.prerelease.length) return 0;\n\t\t\tlet i = 0;\n\t\t\tdo {\n\t\t\t\tconst a = this.prerelease[i];\n\t\t\t\tconst b = other.prerelease[i];\n\t\t\t\tdebug(\"prerelease compare\", i, a, b);\n\t\t\t\tif (a === void 0 && b === void 0) return 0;\n\t\t\t\telse if (b === void 0) return 1;\n\t\t\t\telse if (a === void 0) return -1;\n\t\t\t\telse if (a === b) continue;\n\t\t\t\telse return compareIdentifiers(a, b);\n\t\t\t} while (++i);\n\t\t}\n\t\tcompareBuild(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\tlet i = 0;\n\t\t\tdo {\n\t\t\t\tconst a = this.build[i];\n\t\t\t\tconst b = other.build[i];\n\t\t\t\tdebug(\"build compare\", i, a, b);\n\t\t\t\tif (a === void 0 && b === void 0) return 0;\n\t\t\t\telse if (b === void 0) return 1;\n\t\t\t\telse if (a === void 0) return -1;\n\t\t\t\telse if (a === b) continue;\n\t\t\t\telse return compareIdentifiers(a, b);\n\t\t\t} while (++i);\n\t\t}\n\t\tinc(release, identifier, identifierBase) {\n\t\t\tif (release.startsWith(\"pre\")) {\n\t\t\t\tif (!identifier && identifierBase === false) throw new Error(\"invalid increment argument: identifier is empty\");\n\t\t\t\tif (identifier) {\n\t\t\t\t\tconst match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);\n\t\t\t\t\tif (!match || match[1] !== identifier) throw new Error(`invalid identifier: ${identifier}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (release) {\n\t\t\t\tcase \"premajor\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.minor = 0;\n\t\t\t\t\tthis.major++;\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"preminor\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.minor++;\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepatch\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.inc(\"patch\", identifier, identifierBase);\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prerelease\":\n\t\t\t\t\tif (this.prerelease.length === 0) this.inc(\"patch\", identifier, identifierBase);\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"release\":\n\t\t\t\t\tif (this.prerelease.length === 0) throw new Error(`version ${this.raw} is not a prerelease`);\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"major\":\n\t\t\t\t\tif (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) this.major++;\n\t\t\t\t\tthis.minor = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"minor\":\n\t\t\t\t\tif (this.patch !== 0 || this.prerelease.length === 0) this.minor++;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"patch\":\n\t\t\t\t\tif (this.prerelease.length === 0) this.patch++;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pre\": {\n\t\t\t\t\tconst base = Number(identifierBase) ? 1 : 0;\n\t\t\t\t\tif (this.prerelease.length === 0) this.prerelease = [base];\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet i = this.prerelease.length;\n\t\t\t\t\t\twhile (--i >= 0) if (typeof this.prerelease[i] === \"number\") {\n\t\t\t\t\t\t\tthis.prerelease[i]++;\n\t\t\t\t\t\t\ti = -2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i === -1) {\n\t\t\t\t\t\t\tif (identifier === this.prerelease.join(\".\") && identifierBase === false) throw new Error(\"invalid increment argument: identifier already exists\");\n\t\t\t\t\t\t\tthis.prerelease.push(base);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (identifier) {\n\t\t\t\t\t\tlet prerelease = [identifier, base];\n\t\t\t\t\t\tif (identifierBase === false) prerelease = [identifier];\n\t\t\t\t\t\tif (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n\t\t\t\t\t\t\tif (isNaN(this.prerelease[1])) this.prerelease = prerelease;\n\t\t\t\t\t\t} else this.prerelease = prerelease;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: throw new Error(`invalid increment argument: ${release}`);\n\t\t\t}\n\t\t\tthis.raw = this.format();\n\t\t\tif (this.build.length) this.raw += `+${this.build.join(\".\")}`;\n\t\t\treturn this;\n\t\t}\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js\nvar require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst parse = (version, options, throwErrors = false) => {\n\t\tif (version instanceof SemVer) return version;\n\t\ttry {\n\t\t\treturn new SemVer(version, options);\n\t\t} catch (er) {\n\t\t\tif (!throwErrors) return null;\n\t\t\tthrow er;\n\t\t}\n\t};\n\tmodule.exports = parse;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js\nvar require_valid$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst valid = (version, options) => {\n\t\tconst v = parse(version, options);\n\t\treturn v ? v.version : null;\n\t};\n\tmodule.exports = valid;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js\nvar require_clean = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst clean = (version, options) => {\n\t\tconst s = parse(version.trim().replace(/^[=v]+/, \"\"), options);\n\t\treturn s ? s.version : null;\n\t};\n\tmodule.exports = clean;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js\nvar require_inc = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst inc = (version, release, options, identifier, identifierBase) => {\n\t\tif (typeof options === \"string\") {\n\t\t\tidentifierBase = identifier;\n\t\t\tidentifier = options;\n\t\t\toptions = void 0;\n\t\t}\n\t\ttry {\n\t\t\treturn new SemVer(version instanceof SemVer ? version.version : version, options).inc(release, identifier, identifierBase).version;\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t};\n\tmodule.exports = inc;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js\nvar require_diff = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst diff = (version1, version2) => {\n\t\tconst v1 = parse(version1, null, true);\n\t\tconst v2 = parse(version2, null, true);\n\t\tconst comparison = v1.compare(v2);\n\t\tif (comparison === 0) return null;\n\t\tconst v1Higher = comparison > 0;\n\t\tconst highVersion = v1Higher ? v1 : v2;\n\t\tconst lowVersion = v1Higher ? v2 : v1;\n\t\tconst highHasPre = !!highVersion.prerelease.length;\n\t\tif (!!lowVersion.prerelease.length && !highHasPre) {\n\t\t\tif (!lowVersion.patch && !lowVersion.minor) return \"major\";\n\t\t\tif (lowVersion.compareMain(highVersion) === 0) {\n\t\t\t\tif (lowVersion.minor && !lowVersion.patch) return \"minor\";\n\t\t\t\treturn \"patch\";\n\t\t\t}\n\t\t}\n\t\tconst prefix = highHasPre ? \"pre\" : \"\";\n\t\tif (v1.major !== v2.major) return prefix + \"major\";\n\t\tif (v1.minor !== v2.minor) return prefix + \"minor\";\n\t\tif (v1.patch !== v2.patch) return prefix + \"patch\";\n\t\treturn \"prerelease\";\n\t};\n\tmodule.exports = diff;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js\nvar require_major = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst major = (a, loose) => new SemVer(a, loose).major;\n\tmodule.exports = major;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js\nvar require_minor = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst minor = (a, loose) => new SemVer(a, loose).minor;\n\tmodule.exports = minor;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js\nvar require_patch = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst patch = (a, loose) => new SemVer(a, loose).patch;\n\tmodule.exports = patch;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js\nvar require_prerelease = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst prerelease = (version, options) => {\n\t\tconst parsed = parse(version, options);\n\t\treturn parsed && parsed.prerelease.length ? parsed.prerelease : null;\n\t};\n\tmodule.exports = prerelease;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js\nvar require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));\n\tmodule.exports = compare;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js\nvar require_rcompare = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst rcompare = (a, b, loose) => compare(b, a, loose);\n\tmodule.exports = rcompare;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js\nvar require_compare_loose = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst compareLoose = (a, b) => compare(a, b, true);\n\tmodule.exports = compareLoose;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js\nvar require_compare_build = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst compareBuild = (a, b, loose) => {\n\t\tconst versionA = new SemVer(a, loose);\n\t\tconst versionB = new SemVer(b, loose);\n\t\treturn versionA.compare(versionB) || versionA.compareBuild(versionB);\n\t};\n\tmodule.exports = compareBuild;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js\nvar require_sort = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compareBuild = require_compare_build();\n\tconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));\n\tmodule.exports = sort;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js\nvar require_rsort = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compareBuild = require_compare_build();\n\tconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));\n\tmodule.exports = rsort;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js\nvar require_gt = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst gt = (a, b, loose) => compare(a, b, loose) > 0;\n\tmodule.exports = gt;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js\nvar require_lt = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst lt = (a, b, loose) => compare(a, b, loose) < 0;\n\tmodule.exports = lt;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js\nvar require_eq = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst eq = (a, b, loose) => compare(a, b, loose) === 0;\n\tmodule.exports = eq;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js\nvar require_neq = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst neq = (a, b, loose) => compare(a, b, loose) !== 0;\n\tmodule.exports = neq;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js\nvar require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst gte = (a, b, loose) => compare(a, b, loose) >= 0;\n\tmodule.exports = gte;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js\nvar require_lte = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst lte = (a, b, loose) => compare(a, b, loose) <= 0;\n\tmodule.exports = lte;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js\nvar require_cmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst eq = require_eq();\n\tconst neq = require_neq();\n\tconst gt = require_gt();\n\tconst gte = require_gte();\n\tconst lt = require_lt();\n\tconst lte = require_lte();\n\tconst cmp = (a, op, b, loose) => {\n\t\tswitch (op) {\n\t\t\tcase \"===\":\n\t\t\t\tif (typeof a === \"object\") a = a.version;\n\t\t\t\tif (typeof b === \"object\") b = b.version;\n\t\t\t\treturn a === b;\n\t\t\tcase \"!==\":\n\t\t\t\tif (typeof a === \"object\") a = a.version;\n\t\t\t\tif (typeof b === \"object\") b = b.version;\n\t\t\t\treturn a !== b;\n\t\t\tcase \"\":\n\t\t\tcase \"=\":\n\t\t\tcase \"==\": return eq(a, b, loose);\n\t\t\tcase \"!=\": return neq(a, b, loose);\n\t\t\tcase \">\": return gt(a, b, loose);\n\t\t\tcase \">=\": return gte(a, b, loose);\n\t\t\tcase \"<\": return lt(a, b, loose);\n\t\t\tcase \"<=\": return lte(a, b, loose);\n\t\t\tdefault: throw new TypeError(`Invalid operator: ${op}`);\n\t\t}\n\t};\n\tmodule.exports = cmp;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js\nvar require_coerce = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst parse = require_parse();\n\tconst { safeRe: re, t } = require_re();\n\tconst coerce = (version, options) => {\n\t\tif (version instanceof SemVer) return version;\n\t\tif (typeof version === \"number\") version = String(version);\n\t\tif (typeof version !== \"string\") return null;\n\t\toptions = options || {};\n\t\tlet match = null;\n\t\tif (!options.rtl) match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);\n\t\telse {\n\t\t\tconst coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];\n\t\t\tlet next;\n\t\t\twhile ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {\n\t\t\t\tif (!match || next.index + next[0].length !== match.index + match[0].length) match = next;\n\t\t\t\tcoerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;\n\t\t\t}\n\t\t\tcoerceRtlRegex.lastIndex = -1;\n\t\t}\n\t\tif (match === null) return null;\n\t\tconst major = match[2];\n\t\treturn parse(`${major}.${match[3] || \"0\"}.${match[4] || \"0\"}${options.includePrerelease && match[5] ? `-${match[5]}` : \"\"}${options.includePrerelease && match[6] ? `+${match[6]}` : \"\"}`, options);\n\t};\n\tmodule.exports = coerce;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js\nvar require_lrucache = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar LRUCache = class {\n\t\tconstructor() {\n\t\t\tthis.max = 1e3;\n\t\t\tthis.map = /* @__PURE__ */ new Map();\n\t\t}\n\t\tget(key) {\n\t\t\tconst value = this.map.get(key);\n\t\t\tif (value === void 0) return;\n\t\t\telse {\n\t\t\t\tthis.map.delete(key);\n\t\t\t\tthis.map.set(key, value);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tdelete(key) {\n\t\t\treturn this.map.delete(key);\n\t\t}\n\t\tset(key, value) {\n\t\t\tif (!this.delete(key) && value !== void 0) {\n\t\t\t\tif (this.map.size >= this.max) {\n\t\t\t\t\tconst firstKey = this.map.keys().next().value;\n\t\t\t\t\tthis.delete(firstKey);\n\t\t\t\t}\n\t\t\t\tthis.map.set(key, value);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\tmodule.exports = LRUCache;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js\nvar require_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SPACE_CHARACTERS = /\\s+/g;\n\tmodule.exports = class Range {\n\t\tconstructor(range, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (range instanceof Range) if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) return range;\n\t\t\telse return new Range(range.raw, options);\n\t\t\tif (range instanceof Comparator) {\n\t\t\t\tthis.raw = range.value;\n\t\t\t\tthis.set = [[range]];\n\t\t\t\tthis.formatted = void 0;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.includePrerelease = !!options.includePrerelease;\n\t\t\tthis.raw = range.trim().replace(SPACE_CHARACTERS, \" \");\n\t\t\tthis.set = this.raw.split(\"||\").map((r) => this.parseRange(r.trim())).filter((c) => c.length);\n\t\t\tif (!this.set.length) throw new TypeError(`Invalid SemVer Range: ${this.raw}`);\n\t\t\tif (this.set.length > 1) {\n\t\t\t\tconst first = this.set[0];\n\t\t\t\tthis.set = this.set.filter((c) => !isNullSet(c[0]));\n\t\t\t\tif (this.set.length === 0) this.set = [first];\n\t\t\t\telse if (this.set.length > 1) {\n\t\t\t\t\tfor (const c of this.set) if (c.length === 1 && isAny(c[0])) {\n\t\t\t\t\t\tthis.set = [c];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.formatted = void 0;\n\t\t}\n\t\tget range() {\n\t\t\tif (this.formatted === void 0) {\n\t\t\t\tthis.formatted = \"\";\n\t\t\t\tfor (let i = 0; i < this.set.length; i++) {\n\t\t\t\t\tif (i > 0) this.formatted += \"||\";\n\t\t\t\t\tconst comps = this.set[i];\n\t\t\t\t\tfor (let k = 0; k < comps.length; k++) {\n\t\t\t\t\t\tif (k > 0) this.formatted += \" \";\n\t\t\t\t\t\tthis.formatted += comps[k].toString().trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.formatted;\n\t\t}\n\t\tformat() {\n\t\t\treturn this.range;\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.range;\n\t\t}\n\t\tparseRange(range) {\n\t\t\tconst memoKey = ((this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE)) + \":\" + range;\n\t\t\tconst cached = cache.get(memoKey);\n\t\t\tif (cached) return cached;\n\t\t\tconst loose = this.options.loose;\n\t\t\tconst hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];\n\t\t\trange = range.replace(hr, hyphenReplace(this.options.includePrerelease));\n\t\t\tdebug(\"hyphen replace\", range);\n\t\t\trange = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);\n\t\t\tdebug(\"comparator trim\", range);\n\t\t\trange = range.replace(re[t.TILDETRIM], tildeTrimReplace);\n\t\t\tdebug(\"tilde trim\", range);\n\t\t\trange = range.replace(re[t.CARETTRIM], caretTrimReplace);\n\t\t\tdebug(\"caret trim\", range);\n\t\t\tlet rangeList = range.split(\" \").map((comp) => parseComparator(comp, this.options)).join(\" \").split(/\\s+/).map((comp) => replaceGTE0(comp, this.options));\n\t\t\tif (loose) rangeList = rangeList.filter((comp) => {\n\t\t\t\tdebug(\"loose invalid filter\", comp, this.options);\n\t\t\t\treturn !!comp.match(re[t.COMPARATORLOOSE]);\n\t\t\t});\n\t\t\tdebug(\"range list\", rangeList);\n\t\t\tconst rangeMap = /* @__PURE__ */ new Map();\n\t\t\tconst comparators = rangeList.map((comp) => new Comparator(comp, this.options));\n\t\t\tfor (const comp of comparators) {\n\t\t\t\tif (isNullSet(comp)) return [comp];\n\t\t\t\trangeMap.set(comp.value, comp);\n\t\t\t}\n\t\t\tif (rangeMap.size > 1 && rangeMap.has(\"\")) rangeMap.delete(\"\");\n\t\t\tconst result = [...rangeMap.values()];\n\t\t\tcache.set(memoKey, result);\n\t\t\treturn result;\n\t\t}\n\t\tintersects(range, options) {\n\t\t\tif (!(range instanceof Range)) throw new TypeError(\"a Range is required\");\n\t\t\treturn this.set.some((thisComparators) => {\n\t\t\t\treturn isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {\n\t\t\t\t\treturn isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {\n\t\t\t\t\t\treturn rangeComparators.every((rangeComparator) => {\n\t\t\t\t\t\t\treturn thisComparator.intersects(rangeComparator, options);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\ttest(version) {\n\t\t\tif (!version) return false;\n\t\t\tif (typeof version === \"string\") try {\n\t\t\t\tversion = new SemVer(version, this.options);\n\t\t\t} catch (er) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < this.set.length; i++) if (testSet(this.set[i], version, this.options)) return true;\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst cache = new (require_lrucache())();\n\tconst parseOptions = require_parse_options();\n\tconst Comparator = require_comparator();\n\tconst debug = require_debug();\n\tconst SemVer = require_semver$1();\n\tconst { safeRe: re, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require_re();\n\tconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();\n\tconst isNullSet = (c) => c.value === \"<0.0.0-0\";\n\tconst isAny = (c) => c.value === \"\";\n\tconst isSatisfiable = (comparators, options) => {\n\t\tlet result = true;\n\t\tconst remainingComparators = comparators.slice();\n\t\tlet testComparator = remainingComparators.pop();\n\t\twhile (result && remainingComparators.length) {\n\t\t\tresult = remainingComparators.every((otherComparator) => {\n\t\t\t\treturn testComparator.intersects(otherComparator, options);\n\t\t\t});\n\t\t\ttestComparator = remainingComparators.pop();\n\t\t}\n\t\treturn result;\n\t};\n\tconst parseComparator = (comp, options) => {\n\t\tdebug(\"comp\", comp, options);\n\t\tcomp = replaceCarets(comp, options);\n\t\tdebug(\"caret\", comp);\n\t\tcomp = replaceTildes(comp, options);\n\t\tdebug(\"tildes\", comp);\n\t\tcomp = replaceXRanges(comp, options);\n\t\tdebug(\"xrange\", comp);\n\t\tcomp = replaceStars(comp, options);\n\t\tdebug(\"stars\", comp);\n\t\treturn comp;\n\t};\n\tconst isX = (id) => !id || id.toLowerCase() === \"x\" || id === \"*\";\n\tconst replaceTildes = (comp, options) => {\n\t\treturn comp.trim().split(/\\s+/).map((c) => replaceTilde(c, options)).join(\" \");\n\t};\n\tconst replaceTilde = (comp, options) => {\n\t\tconst r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];\n\t\treturn comp.replace(r, (_, M, m, p, pr) => {\n\t\t\tdebug(\"tilde\", comp, _, M, m, p, pr);\n\t\t\tlet ret;\n\t\t\tif (isX(M)) ret = \"\";\n\t\t\telse if (isX(m)) ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;\n\t\t\telse if (isX(p)) ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;\n\t\t\telse if (pr) {\n\t\t\t\tdebug(\"replaceTilde pr\", pr);\n\t\t\t\tret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n\t\t\t} else ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;\n\t\t\tdebug(\"tilde return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceCarets = (comp, options) => {\n\t\treturn comp.trim().split(/\\s+/).map((c) => replaceCaret(c, options)).join(\" \");\n\t};\n\tconst replaceCaret = (comp, options) => {\n\t\tdebug(\"caret\", comp, options);\n\t\tconst r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];\n\t\tconst z = options.includePrerelease ? \"-0\" : \"\";\n\t\treturn comp.replace(r, (_, M, m, p, pr) => {\n\t\t\tdebug(\"caret\", comp, _, M, m, p, pr);\n\t\t\tlet ret;\n\t\t\tif (isX(M)) ret = \"\";\n\t\t\telse if (isX(m)) ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;\n\t\t\telse if (isX(p)) if (M === \"0\") ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;\n\t\t\telse ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;\n\t\t\telse if (pr) {\n\t\t\t\tdebug(\"replaceCaret pr\", pr);\n\t\t\t\tif (M === \"0\") if (m === \"0\") ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;\n\t\t\t} else {\n\t\t\t\tdebug(\"no pr\");\n\t\t\t\tif (M === \"0\") if (m === \"0\") ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;\n\t\t\t}\n\t\t\tdebug(\"caret return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceXRanges = (comp, options) => {\n\t\tdebug(\"replaceXRanges\", comp, options);\n\t\treturn comp.split(/\\s+/).map((c) => replaceXRange(c, options)).join(\" \");\n\t};\n\tconst replaceXRange = (comp, options) => {\n\t\tcomp = comp.trim();\n\t\tconst r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];\n\t\treturn comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n\t\t\tdebug(\"xRange\", comp, ret, gtlt, M, m, p, pr);\n\t\t\tconst xM = isX(M);\n\t\t\tconst xm = xM || isX(m);\n\t\t\tconst xp = xm || isX(p);\n\t\t\tconst anyX = xp;\n\t\t\tif (gtlt === \"=\" && anyX) gtlt = \"\";\n\t\t\tpr = options.includePrerelease ? \"-0\" : \"\";\n\t\t\tif (xM) if (gtlt === \">\" || gtlt === \"<\") ret = \"<0.0.0-0\";\n\t\t\telse ret = \"*\";\n\t\t\telse if (gtlt && anyX) {\n\t\t\t\tif (xm) m = 0;\n\t\t\t\tp = 0;\n\t\t\t\tif (gtlt === \">\") {\n\t\t\t\t\tgtlt = \">=\";\n\t\t\t\t\tif (xm) {\n\t\t\t\t\t\tM = +M + 1;\n\t\t\t\t\t\tm = 0;\n\t\t\t\t\t\tp = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm = +m + 1;\n\t\t\t\t\t\tp = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (gtlt === \"<=\") {\n\t\t\t\t\tgtlt = \"<\";\n\t\t\t\t\tif (xm) M = +M + 1;\n\t\t\t\t\telse m = +m + 1;\n\t\t\t\t}\n\t\t\t\tif (gtlt === \"<\") pr = \"-0\";\n\t\t\t\tret = `${gtlt + M}.${m}.${p}${pr}`;\n\t\t\t} else if (xm) ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;\n\t\t\telse if (xp) ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;\n\t\t\tdebug(\"xRange return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceStars = (comp, options) => {\n\t\tdebug(\"replaceStars\", comp, options);\n\t\treturn comp.trim().replace(re[t.STAR], \"\");\n\t};\n\tconst replaceGTE0 = (comp, options) => {\n\t\tdebug(\"replaceGTE0\", comp, options);\n\t\treturn comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], \"\");\n\t};\n\tconst hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {\n\t\tif (isX(fM)) from = \"\";\n\t\telse if (isX(fm)) from = `>=${fM}.0.0${incPr ? \"-0\" : \"\"}`;\n\t\telse if (isX(fp)) from = `>=${fM}.${fm}.0${incPr ? \"-0\" : \"\"}`;\n\t\telse if (fpr) from = `>=${from}`;\n\t\telse from = `>=${from}${incPr ? \"-0\" : \"\"}`;\n\t\tif (isX(tM)) to = \"\";\n\t\telse if (isX(tm)) to = `<${+tM + 1}.0.0-0`;\n\t\telse if (isX(tp)) to = `<${tM}.${+tm + 1}.0-0`;\n\t\telse if (tpr) to = `<=${tM}.${tm}.${tp}-${tpr}`;\n\t\telse if (incPr) to = `<${tM}.${tm}.${+tp + 1}-0`;\n\t\telse to = `<=${to}`;\n\t\treturn `${from} ${to}`.trim();\n\t};\n\tconst testSet = (set, version, options) => {\n\t\tfor (let i = 0; i < set.length; i++) if (!set[i].test(version)) return false;\n\t\tif (version.prerelease.length && !options.includePrerelease) {\n\t\t\tfor (let i = 0; i < set.length; i++) {\n\t\t\t\tdebug(set[i].semver);\n\t\t\t\tif (set[i].semver === Comparator.ANY) continue;\n\t\t\t\tif (set[i].semver.prerelease.length > 0) {\n\t\t\t\t\tconst allowed = set[i].semver;\n\t\t\t\t\tif (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) return true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js\nvar require_comparator = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst ANY = Symbol(\"SemVer ANY\");\n\tmodule.exports = class Comparator {\n\t\tstatic get ANY() {\n\t\t\treturn ANY;\n\t\t}\n\t\tconstructor(comp, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (comp instanceof Comparator) if (comp.loose === !!options.loose) return comp;\n\t\t\telse comp = comp.value;\n\t\t\tcomp = comp.trim().split(/\\s+/).join(\" \");\n\t\t\tdebug(\"comparator\", comp, options);\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.parse(comp);\n\t\t\tif (this.semver === ANY) this.value = \"\";\n\t\t\telse this.value = this.operator + this.semver.version;\n\t\t\tdebug(\"comp\", this);\n\t\t}\n\t\tparse(comp) {\n\t\t\tconst r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];\n\t\t\tconst m = comp.match(r);\n\t\t\tif (!m) throw new TypeError(`Invalid comparator: ${comp}`);\n\t\t\tthis.operator = m[1] !== void 0 ? m[1] : \"\";\n\t\t\tif (this.operator === \"=\") this.operator = \"\";\n\t\t\tif (!m[2]) this.semver = ANY;\n\t\t\telse this.semver = new SemVer(m[2], this.options.loose);\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.value;\n\t\t}\n\t\ttest(version) {\n\t\t\tdebug(\"Comparator.test\", version, this.options.loose);\n\t\t\tif (this.semver === ANY || version === ANY) return true;\n\t\t\tif (typeof version === \"string\") try {\n\t\t\t\tversion = new SemVer(version, this.options);\n\t\t\t} catch (er) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn cmp(version, this.operator, this.semver, this.options);\n\t\t}\n\t\tintersects(comp, options) {\n\t\t\tif (!(comp instanceof Comparator)) throw new TypeError(\"a Comparator is required\");\n\t\t\tif (this.operator === \"\") {\n\t\t\t\tif (this.value === \"\") return true;\n\t\t\t\treturn new Range(comp.value, options).test(this.value);\n\t\t\t} else if (comp.operator === \"\") {\n\t\t\t\tif (comp.value === \"\") return true;\n\t\t\t\treturn new Range(this.value, options).test(comp.semver);\n\t\t\t}\n\t\t\toptions = parseOptions(options);\n\t\t\tif (options.includePrerelease && (this.value === \"<0.0.0-0\" || comp.value === \"<0.0.0-0\")) return false;\n\t\t\tif (!options.includePrerelease && (this.value.startsWith(\"<0.0.0\") || comp.value.startsWith(\"<0.0.0\"))) return false;\n\t\t\tif (this.operator.startsWith(\">\") && comp.operator.startsWith(\">\")) return true;\n\t\t\tif (this.operator.startsWith(\"<\") && comp.operator.startsWith(\"<\")) return true;\n\t\t\tif (this.semver.version === comp.semver.version && this.operator.includes(\"=\") && comp.operator.includes(\"=\")) return true;\n\t\t\tif (cmp(this.semver, \"<\", comp.semver, options) && this.operator.startsWith(\">\") && comp.operator.startsWith(\"<\")) return true;\n\t\t\tif (cmp(this.semver, \">\", comp.semver, options) && this.operator.startsWith(\"<\") && comp.operator.startsWith(\">\")) return true;\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst parseOptions = require_parse_options();\n\tconst { safeRe: re, t } = require_re();\n\tconst cmp = require_cmp();\n\tconst debug = require_debug();\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js\nvar require_satisfies = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst satisfies = (version, range, options) => {\n\t\ttry {\n\t\t\trange = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn false;\n\t\t}\n\t\treturn range.test(version);\n\t};\n\tmodule.exports = satisfies;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js\nvar require_to_comparators = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(\" \").trim().split(\" \"));\n\tmodule.exports = toComparators;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js\nvar require_max_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst maxSatisfying = (versions, range, options) => {\n\t\tlet max = null;\n\t\tlet maxSV = null;\n\t\tlet rangeObj = null;\n\t\ttry {\n\t\t\trangeObj = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t\tversions.forEach((v) => {\n\t\t\tif (rangeObj.test(v)) {\n\t\t\t\tif (!max || maxSV.compare(v) === -1) {\n\t\t\t\t\tmax = v;\n\t\t\t\t\tmaxSV = new SemVer(max, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn max;\n\t};\n\tmodule.exports = maxSatisfying;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js\nvar require_min_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst minSatisfying = (versions, range, options) => {\n\t\tlet min = null;\n\t\tlet minSV = null;\n\t\tlet rangeObj = null;\n\t\ttry {\n\t\t\trangeObj = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t\tversions.forEach((v) => {\n\t\t\tif (rangeObj.test(v)) {\n\t\t\t\tif (!min || minSV.compare(v) === 1) {\n\t\t\t\t\tmin = v;\n\t\t\t\t\tminSV = new SemVer(min, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn min;\n\t};\n\tmodule.exports = minSatisfying;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js\nvar require_min_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst gt = require_gt();\n\tconst minVersion = (range, loose) => {\n\t\trange = new Range(range, loose);\n\t\tlet minver = new SemVer(\"0.0.0\");\n\t\tif (range.test(minver)) return minver;\n\t\tminver = new SemVer(\"0.0.0-0\");\n\t\tif (range.test(minver)) return minver;\n\t\tminver = null;\n\t\tfor (let i = 0; i < range.set.length; ++i) {\n\t\t\tconst comparators = range.set[i];\n\t\t\tlet setMin = null;\n\t\t\tcomparators.forEach((comparator) => {\n\t\t\t\tconst compver = new SemVer(comparator.semver.version);\n\t\t\t\tswitch (comparator.operator) {\n\t\t\t\t\tcase \">\":\n\t\t\t\t\t\tif (compver.prerelease.length === 0) compver.patch++;\n\t\t\t\t\t\telse compver.prerelease.push(0);\n\t\t\t\t\t\tcompver.raw = compver.format();\n\t\t\t\t\tcase \"\":\n\t\t\t\t\tcase \">=\":\n\t\t\t\t\t\tif (!setMin || gt(compver, setMin)) setMin = compver;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"<\":\n\t\t\t\t\tcase \"<=\": break;\n\t\t\t\t\tdefault: throw new Error(`Unexpected operation: ${comparator.operator}`);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (setMin && (!minver || gt(minver, setMin))) minver = setMin;\n\t\t}\n\t\tif (minver && range.test(minver)) return minver;\n\t\treturn null;\n\t};\n\tmodule.exports = minVersion;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js\nvar require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst validRange = (range, options) => {\n\t\ttry {\n\t\t\treturn new Range(range, options).range || \"*\";\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t};\n\tmodule.exports = validRange;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js\nvar require_outside = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Comparator = require_comparator();\n\tconst { ANY } = Comparator;\n\tconst Range = require_range();\n\tconst satisfies = require_satisfies();\n\tconst gt = require_gt();\n\tconst lt = require_lt();\n\tconst lte = require_lte();\n\tconst gte = require_gte();\n\tconst outside = (version, range, hilo, options) => {\n\t\tversion = new SemVer(version, options);\n\t\trange = new Range(range, options);\n\t\tlet gtfn, ltefn, ltfn, comp, ecomp;\n\t\tswitch (hilo) {\n\t\t\tcase \">\":\n\t\t\t\tgtfn = gt;\n\t\t\t\tltefn = lte;\n\t\t\t\tltfn = lt;\n\t\t\t\tcomp = \">\";\n\t\t\t\tecomp = \">=\";\n\t\t\t\tbreak;\n\t\t\tcase \"<\":\n\t\t\t\tgtfn = lt;\n\t\t\t\tltefn = gte;\n\t\t\t\tltfn = gt;\n\t\t\t\tcomp = \"<\";\n\t\t\t\tecomp = \"<=\";\n\t\t\t\tbreak;\n\t\t\tdefault: throw new TypeError(\"Must provide a hilo val of \\\"<\\\" or \\\">\\\"\");\n\t\t}\n\t\tif (satisfies(version, range, options)) return false;\n\t\tfor (let i = 0; i < range.set.length; ++i) {\n\t\t\tconst comparators = range.set[i];\n\t\t\tlet high = null;\n\t\t\tlet low = null;\n\t\t\tcomparators.forEach((comparator) => {\n\t\t\t\tif (comparator.semver === ANY) comparator = new Comparator(\">=0.0.0\");\n\t\t\t\thigh = high || comparator;\n\t\t\t\tlow = low || comparator;\n\t\t\t\tif (gtfn(comparator.semver, high.semver, options)) high = comparator;\n\t\t\t\telse if (ltfn(comparator.semver, low.semver, options)) low = comparator;\n\t\t\t});\n\t\t\tif (high.operator === comp || high.operator === ecomp) return false;\n\t\t\tif ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) return false;\n\t\t\telse if (low.operator === ecomp && ltfn(version, low.semver)) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tmodule.exports = outside;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js\nvar require_gtr = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst outside = require_outside();\n\tconst gtr = (version, range, options) => outside(version, range, \">\", options);\n\tmodule.exports = gtr;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js\nvar require_ltr = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst outside = require_outside();\n\tconst ltr = (version, range, options) => outside(version, range, \"<\", options);\n\tmodule.exports = ltr;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js\nvar require_intersects = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst intersects = (r1, r2, options) => {\n\t\tr1 = new Range(r1, options);\n\t\tr2 = new Range(r2, options);\n\t\treturn r1.intersects(r2, options);\n\t};\n\tmodule.exports = intersects;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js\nvar require_simplify = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst satisfies = require_satisfies();\n\tconst compare = require_compare();\n\tmodule.exports = (versions, range, options) => {\n\t\tconst set = [];\n\t\tlet first = null;\n\t\tlet prev = null;\n\t\tconst v = versions.sort((a, b) => compare(a, b, options));\n\t\tfor (const version of v) if (satisfies(version, range, options)) {\n\t\t\tprev = version;\n\t\t\tif (!first) first = version;\n\t\t} else {\n\t\t\tif (prev) set.push([first, prev]);\n\t\t\tprev = null;\n\t\t\tfirst = null;\n\t\t}\n\t\tif (first) set.push([first, null]);\n\t\tconst ranges = [];\n\t\tfor (const [min, max] of set) if (min === max) ranges.push(min);\n\t\telse if (!max && min === v[0]) ranges.push(\"*\");\n\t\telse if (!max) ranges.push(`>=${min}`);\n\t\telse if (min === v[0]) ranges.push(`<=${max}`);\n\t\telse ranges.push(`${min} - ${max}`);\n\t\tconst simplified = ranges.join(\" || \");\n\t\tconst original = typeof range.raw === \"string\" ? range.raw : String(range);\n\t\treturn simplified.length < original.length ? simplified : range;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js\nvar require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst Comparator = require_comparator();\n\tconst { ANY } = Comparator;\n\tconst satisfies = require_satisfies();\n\tconst compare = require_compare();\n\tconst subset = (sub, dom, options = {}) => {\n\t\tif (sub === dom) return true;\n\t\tsub = new Range(sub, options);\n\t\tdom = new Range(dom, options);\n\t\tlet sawNonNull = false;\n\t\tOUTER: for (const simpleSub of sub.set) {\n\t\t\tfor (const simpleDom of dom.set) {\n\t\t\t\tconst isSub = simpleSubset(simpleSub, simpleDom, options);\n\t\t\t\tsawNonNull = sawNonNull || isSub !== null;\n\t\t\t\tif (isSub) continue OUTER;\n\t\t\t}\n\t\t\tif (sawNonNull) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tconst minimumVersionWithPreRelease = [new Comparator(\">=0.0.0-0\")];\n\tconst minimumVersion = [new Comparator(\">=0.0.0\")];\n\tconst simpleSubset = (sub, dom, options) => {\n\t\tif (sub === dom) return true;\n\t\tif (sub.length === 1 && sub[0].semver === ANY) if (dom.length === 1 && dom[0].semver === ANY) return true;\n\t\telse if (options.includePrerelease) sub = minimumVersionWithPreRelease;\n\t\telse sub = minimumVersion;\n\t\tif (dom.length === 1 && dom[0].semver === ANY) if (options.includePrerelease) return true;\n\t\telse dom = minimumVersion;\n\t\tconst eqSet = /* @__PURE__ */ new Set();\n\t\tlet gt, lt;\n\t\tfor (const c of sub) if (c.operator === \">\" || c.operator === \">=\") gt = higherGT(gt, c, options);\n\t\telse if (c.operator === \"<\" || c.operator === \"<=\") lt = lowerLT(lt, c, options);\n\t\telse eqSet.add(c.semver);\n\t\tif (eqSet.size > 1) return null;\n\t\tlet gtltComp;\n\t\tif (gt && lt) {\n\t\t\tgtltComp = compare(gt.semver, lt.semver, options);\n\t\t\tif (gtltComp > 0) return null;\n\t\t\telse if (gtltComp === 0 && (gt.operator !== \">=\" || lt.operator !== \"<=\")) return null;\n\t\t}\n\t\tfor (const eq of eqSet) {\n\t\t\tif (gt && !satisfies(eq, String(gt), options)) return null;\n\t\t\tif (lt && !satisfies(eq, String(lt), options)) return null;\n\t\t\tfor (const c of dom) if (!satisfies(eq, String(c), options)) return false;\n\t\t\treturn true;\n\t\t}\n\t\tlet higher, lower;\n\t\tlet hasDomLT, hasDomGT;\n\t\tlet needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;\n\t\tlet needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;\n\t\tif (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === \"<\" && needDomLTPre.prerelease[0] === 0) needDomLTPre = false;\n\t\tfor (const c of dom) {\n\t\t\thasDomGT = hasDomGT || c.operator === \">\" || c.operator === \">=\";\n\t\t\thasDomLT = hasDomLT || c.operator === \"<\" || c.operator === \"<=\";\n\t\t\tif (gt) {\n\t\t\t\tif (needDomGTPre) {\n\t\t\t\t\tif (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) needDomGTPre = false;\n\t\t\t\t}\n\t\t\t\tif (c.operator === \">\" || c.operator === \">=\") {\n\t\t\t\t\thigher = higherGT(gt, c, options);\n\t\t\t\t\tif (higher === c && higher !== gt) return false;\n\t\t\t\t} else if (gt.operator === \">=\" && !satisfies(gt.semver, String(c), options)) return false;\n\t\t\t}\n\t\t\tif (lt) {\n\t\t\t\tif (needDomLTPre) {\n\t\t\t\t\tif (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) needDomLTPre = false;\n\t\t\t\t}\n\t\t\t\tif (c.operator === \"<\" || c.operator === \"<=\") {\n\t\t\t\t\tlower = lowerLT(lt, c, options);\n\t\t\t\t\tif (lower === c && lower !== lt) return false;\n\t\t\t\t} else if (lt.operator === \"<=\" && !satisfies(lt.semver, String(c), options)) return false;\n\t\t\t}\n\t\t\tif (!c.operator && (lt || gt) && gtltComp !== 0) return false;\n\t\t}\n\t\tif (gt && hasDomLT && !lt && gtltComp !== 0) return false;\n\t\tif (lt && hasDomGT && !gt && gtltComp !== 0) return false;\n\t\tif (needDomGTPre || needDomLTPre) return false;\n\t\treturn true;\n\t};\n\tconst higherGT = (a, b, options) => {\n\t\tif (!a) return b;\n\t\tconst comp = compare(a.semver, b.semver, options);\n\t\treturn comp > 0 ? a : comp < 0 ? b : b.operator === \">\" && a.operator === \">=\" ? b : a;\n\t};\n\tconst lowerLT = (a, b, options) => {\n\t\tif (!a) return b;\n\t\tconst comp = compare(a.semver, b.semver, options);\n\t\treturn comp < 0 ? a : comp > 0 ? b : b.operator === \"<\" && a.operator === \"<=\" ? b : a;\n\t};\n\tmodule.exports = subset;\n}));\n//#endregion\n//#region src/semverSatisfies.ts\nvar import_semver = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst internalRe = require_re();\n\tconst constants = require_constants();\n\tconst SemVer = require_semver$1();\n\tconst identifiers = require_identifiers();\n\tmodule.exports = {\n\t\tparse: require_parse(),\n\t\tvalid: require_valid$1(),\n\t\tclean: require_clean(),\n\t\tinc: require_inc(),\n\t\tdiff: require_diff(),\n\t\tmajor: require_major(),\n\t\tminor: require_minor(),\n\t\tpatch: require_patch(),\n\t\tprerelease: require_prerelease(),\n\t\tcompare: require_compare(),\n\t\trcompare: require_rcompare(),\n\t\tcompareLoose: require_compare_loose(),\n\t\tcompareBuild: require_compare_build(),\n\t\tsort: require_sort(),\n\t\trsort: require_rsort(),\n\t\tgt: require_gt(),\n\t\tlt: require_lt(),\n\t\teq: require_eq(),\n\t\tneq: require_neq(),\n\t\tgte: require_gte(),\n\t\tlte: require_lte(),\n\t\tcmp: require_cmp(),\n\t\tcoerce: require_coerce(),\n\t\tComparator: require_comparator(),\n\t\tRange: require_range(),\n\t\tsatisfies: require_satisfies(),\n\t\ttoComparators: require_to_comparators(),\n\t\tmaxSatisfying: require_max_satisfying(),\n\t\tminSatisfying: require_min_satisfying(),\n\t\tminVersion: require_min_version(),\n\t\tvalidRange: require_valid(),\n\t\toutside: require_outside(),\n\t\tgtr: require_gtr(),\n\t\tltr: require_ltr(),\n\t\tintersects: require_intersects(),\n\t\tsimplifyRange: require_simplify(),\n\t\tsubset: require_subset(),\n\t\tSemVer,\n\t\tre: internalRe.re,\n\t\tsrc: internalRe.src,\n\t\ttokens: internalRe.t,\n\t\tSEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n\t\tRELEASE_TYPES: constants.RELEASE_TYPES,\n\t\tcompareIdentifiers: identifiers.compareIdentifiers,\n\t\trcompareIdentifiers: identifiers.rcompareIdentifiers\n\t};\n})))(), 1);\nconst semverSatisfies = (targetAppVersion, currentVersion) => {\n\tconst currentCoerce = import_semver.default.coerce(currentVersion);\n\tif (!currentCoerce) return false;\n\treturn import_semver.default.satisfies(currentCoerce.version, targetAppVersion);\n};\n//#endregion\n//#region src/filterCompatibleAppVersions.ts\n/**\n* Filters target app versions that are compatible with the current app version.\n* Returns only versions that are compatible with the current version according to semver rules.\n*\n* @param targetAppVersionList - List of target app versions to filter\n* @param currentVersion - Current app version\n* @returns Array of target app versions compatible with the current version\n*/\nconst filterCompatibleAppVersions = (targetAppVersionList, currentVersion) => {\n\treturn targetAppVersionList.filter((version) => semverSatisfies(version, currentVersion)).sort((a, b) => b.localeCompare(a));\n};\n//#endregion\n//#region src/getUpdateInfo.ts\nconst INIT_BUNDLE_ROLLBACK_UPDATE_INFO = {\n\tmessage: null,\n\tid: NIL_UUID,\n\tshouldForceUpdate: true,\n\tstatus: \"ROLLBACK\",\n\tstorageUri: null,\n\tfileHash: null\n};\nconst makeResponse = (bundle, status) => ({\n\tid: bundle.id,\n\tmessage: bundle.message,\n\tshouldForceUpdate: status === \"ROLLBACK\" ? true : bundle.shouldForceUpdate,\n\tstatus,\n\tstorageUri: bundle.storageUri,\n\tfileHash: bundle.fileHash\n});\nconst isEligibleUpdateCandidate = (bundle, cohort) => {\n\treturn isCohortEligibleForUpdate(bundle.id, cohort, bundle.rolloutCohortCount, bundle.targetCohorts);\n};\nconst findLatestEligibleUpdateCandidate = (bundles, bundleId, cohort) => {\n\tlet updateCandidate = null;\n\tfor (const bundle of bundles) if (bundle.id.localeCompare(bundleId) > 0 && isEligibleUpdateCandidate(bundle, cohort) && (!updateCandidate || bundle.id.localeCompare(updateCandidate.id) > 0)) updateCandidate = bundle;\n\treturn updateCandidate;\n};\nconst getUpdateInfo = async (bundles, args) => {\n\tswitch (args._updateStrategy) {\n\t\tcase \"appVersion\": return appVersionStrategy(bundles, args);\n\t\tcase \"fingerprint\": return fingerprintStrategy(bundles, args);\n\t\tdefault: return null;\n\t}\n};\nconst appVersionStrategy = async (bundles, { channel = \"production\", minBundleId = NIL_UUID, platform, appVersion, bundleId, cohort }) => {\n\tconst candidateBundles = [];\n\tfor (const b of bundles) {\n\t\tif (b.platform !== platform || b.channel !== channel || !b.targetAppVersion || !semverSatisfies(b.targetAppVersion, appVersion) || !b.enabled || minBundleId && b.id.localeCompare(minBundleId) < 0) continue;\n\t\tcandidateBundles.push(b);\n\t}\n\tif (candidateBundles.length === 0) {\n\t\tif (bundleId === NIL_UUID || minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\t\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n\t}\n\tlet rollbackCandidate = null;\n\tlet currentBundle;\n\tfor (const b of candidateBundles) if (b.id === bundleId) currentBundle = b;\n\telse if (bundleId !== NIL_UUID && b.id.localeCompare(bundleId) < 0) {\n\t\tif (!rollbackCandidate || b.id.localeCompare(rollbackCandidate.id) > 0) rollbackCandidate = b;\n\t}\n\tconst updateCandidate = findLatestEligibleUpdateCandidate(candidateBundles, bundleId, cohort);\n\tconst currentBundleEligible = currentBundle ? isEligibleUpdateCandidate(currentBundle, cohort) : false;\n\tif (bundleId === NIL_UUID) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (currentBundleEligible) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\tif (rollbackCandidate) return makeResponse(rollbackCandidate, \"ROLLBACK\");\n\tif (minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n};\nconst fingerprintStrategy = async (bundles, { channel = \"production\", minBundleId = NIL_UUID, platform, fingerprintHash, bundleId, cohort }) => {\n\tconst candidateBundles = [];\n\tfor (const b of bundles) {\n\t\tif (b.platform !== platform || b.channel !== channel || !b.fingerprintHash || b.fingerprintHash !== fingerprintHash || !b.enabled || minBundleId && b.id.localeCompare(minBundleId) < 0) continue;\n\t\tcandidateBundles.push(b);\n\t}\n\tif (candidateBundles.length === 0) {\n\t\tif (bundleId === NIL_UUID || minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\t\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n\t}\n\tlet rollbackCandidate = null;\n\tlet currentBundle;\n\tfor (const b of candidateBundles) if (b.id === bundleId) currentBundle = b;\n\telse if (bundleId !== NIL_UUID && b.id.localeCompare(bundleId) < 0) {\n\t\tif (!rollbackCandidate || b.id.localeCompare(rollbackCandidate.id) > 0) rollbackCandidate = b;\n\t}\n\tconst updateCandidate = findLatestEligibleUpdateCandidate(candidateBundles, bundleId, cohort);\n\tconst currentBundleEligible = currentBundle ? isEligibleUpdateCandidate(currentBundle, cohort) : false;\n\tif (bundleId === NIL_UUID) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (currentBundleEligible) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\tif (rollbackCandidate) return makeResponse(rollbackCandidate, \"ROLLBACK\");\n\tif (minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/buffer_utils.js\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nfunction concat(...buffers) {\n\tconst size = buffers.reduce((acc, { length }) => acc + length, 0);\n\tconst buf = new Uint8Array(size);\n\tlet i = 0;\n\tfor (const buffer of buffers) {\n\t\tbuf.set(buffer, i);\n\t\ti += buffer.length;\n\t}\n\treturn buf;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/base64.js\nfunction encodeBase64(input) {\n\tif (Uint8Array.prototype.toBase64) return input.toBase64();\n\tconst CHUNK_SIZE = 32768;\n\tconst arr = [];\n\tfor (let i = 0; i < input.length; i += CHUNK_SIZE) arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n\treturn btoa(arr.join(\"\"));\n}\nfunction decodeBase64(encoded) {\n\tif (Uint8Array.fromBase64) return Uint8Array.fromBase64(encoded);\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n\treturn bytes;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/util/base64url.js\nfunction decode(input) {\n\tif (Uint8Array.fromBase64) return Uint8Array.fromBase64(typeof input === \"string\" ? input : decoder.decode(input), { alphabet: \"base64url\" });\n\tlet encoded = input;\n\tif (encoded instanceof Uint8Array) encoded = decoder.decode(encoded);\n\tencoded = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\").replace(/\\s/g, \"\");\n\ttry {\n\t\treturn decodeBase64(encoded);\n\t} catch {\n\t\tthrow new TypeError(\"The input to be decoded is not correctly encoded.\");\n\t}\n}\nfunction encode(input) {\n\tlet unencoded = input;\n\tif (typeof unencoded === \"string\") unencoded = encoder.encode(unencoded);\n\tif (Uint8Array.prototype.toBase64) return unencoded.toBase64({\n\t\talphabet: \"base64url\",\n\t\tomitPadding: true\n\t});\n\treturn encodeBase64(unencoded).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/util/errors.js\nvar JOSEError = class extends Error {\n\tstatic code = \"ERR_JOSE_GENERIC\";\n\tcode = \"ERR_JOSE_GENERIC\";\n\tconstructor(message, options) {\n\t\tsuper(message, options);\n\t\tthis.name = this.constructor.name;\n\t\tError.captureStackTrace?.(this, this.constructor);\n\t}\n};\nvar JWTClaimValidationFailed = class extends JOSEError {\n\tstatic code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n\tcode = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n\tclaim;\n\treason;\n\tpayload;\n\tconstructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n\t\tsuper(message, { cause: {\n\t\t\tclaim,\n\t\t\treason,\n\t\t\tpayload\n\t\t} });\n\t\tthis.claim = claim;\n\t\tthis.reason = reason;\n\t\tthis.payload = payload;\n\t}\n};\nvar JWTExpired = class extends JOSEError {\n\tstatic code = \"ERR_JWT_EXPIRED\";\n\tcode = \"ERR_JWT_EXPIRED\";\n\tclaim;\n\treason;\n\tpayload;\n\tconstructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n\t\tsuper(message, { cause: {\n\t\t\tclaim,\n\t\t\treason,\n\t\t\tpayload\n\t\t} });\n\t\tthis.claim = claim;\n\t\tthis.reason = reason;\n\t\tthis.payload = payload;\n\t}\n};\nvar JOSEAlgNotAllowed = class extends JOSEError {\n\tstatic code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n\tcode = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n};\nvar JOSENotSupported = class extends JOSEError {\n\tstatic code = \"ERR_JOSE_NOT_SUPPORTED\";\n\tcode = \"ERR_JOSE_NOT_SUPPORTED\";\n};\nvar JWSInvalid = class extends JOSEError {\n\tstatic code = \"ERR_JWS_INVALID\";\n\tcode = \"ERR_JWS_INVALID\";\n};\nvar JWTInvalid = class extends JOSEError {\n\tstatic code = \"ERR_JWT_INVALID\";\n\tcode = \"ERR_JWT_INVALID\";\n};\nvar JWSSignatureVerificationFailed = class extends JOSEError {\n\tstatic code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n\tcode = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n\tconstructor(message = \"signature verification failed\", options) {\n\t\tsuper(message, options);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/crypto_key.js\nfunction unusable(name, prop = \"algorithm.name\") {\n\treturn /* @__PURE__ */ new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n\treturn algorithm.name === name;\n}\nfunction getHashLength(hash) {\n\treturn parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n\tswitch (alg) {\n\t\tcase \"ES256\": return \"P-256\";\n\t\tcase \"ES384\": return \"P-384\";\n\t\tcase \"ES512\": return \"P-521\";\n\t\tdefault: throw new Error(\"unreachable\");\n\t}\n}\nfunction checkUsage(key, usage) {\n\tif (usage && !key.usages.includes(usage)) throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n}\nfunction checkSigCryptoKey(key, alg, usage) {\n\tswitch (alg) {\n\t\tcase \"HS256\":\n\t\tcase \"HS384\":\n\t\tcase \"HS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"HMAC\")) throw unusable(\"HMAC\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"RS256\":\n\t\tcase \"RS384\":\n\t\tcase \"RS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"RSASSA-PKCS1-v1_5\")) throw unusable(\"RSASSA-PKCS1-v1_5\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"PS256\":\n\t\tcase \"PS384\":\n\t\tcase \"PS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"RSA-PSS\")) throw unusable(\"RSA-PSS\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Ed25519\":\n\t\tcase \"EdDSA\":\n\t\t\tif (!isAlgorithm(key.algorithm, \"Ed25519\")) throw unusable(\"Ed25519\");\n\t\t\tbreak;\n\t\tcase \"ES256\":\n\t\tcase \"ES384\":\n\t\tcase \"ES512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"ECDSA\")) throw unusable(\"ECDSA\");\n\t\t\tconst expected = getNamedCurve(alg);\n\t\t\tif (key.algorithm.namedCurve !== expected) throw unusable(expected, \"algorithm.namedCurve\");\n\t\t\tbreak;\n\t\t}\n\t\tdefault: throw new TypeError(\"CryptoKey does not support this operation\");\n\t}\n\tcheckUsage(key, usage);\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/invalid_key_input.js\nfunction message(msg, actual, ...types) {\n\ttypes = types.filter(Boolean);\n\tif (types.length > 2) {\n\t\tconst last = types.pop();\n\t\tmsg += `one of type ${types.join(\", \")}, or ${last}.`;\n\t} else if (types.length === 2) msg += `one of type ${types[0]} or ${types[1]}.`;\n\telse msg += `of type ${types[0]}.`;\n\tif (actual == null) msg += ` Received ${actual}`;\n\telse if (typeof actual === \"function\" && actual.name) msg += ` Received function ${actual.name}`;\n\telse if (typeof actual === \"object\" && actual != null) {\n\t\tif (actual.constructor?.name) msg += ` Received an instance of ${actual.constructor.name}`;\n\t}\n\treturn msg;\n}\nvar invalid_key_input_default = (actual, ...types) => {\n\treturn message(\"Key must be \", actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n\treturn message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_key_like.js\nfunction isCryptoKey(key) {\n\treturn key?.[Symbol.toStringTag] === \"CryptoKey\";\n}\nfunction isKeyObject(key) {\n\treturn key?.[Symbol.toStringTag] === \"KeyObject\";\n}\nvar is_key_like_default = (key) => {\n\treturn isCryptoKey(key) || isKeyObject(key);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_disjoint.js\nvar is_disjoint_default = (...headers) => {\n\tconst sources = headers.filter(Boolean);\n\tif (sources.length === 0 || sources.length === 1) return true;\n\tlet acc;\n\tfor (const header of sources) {\n\t\tconst parameters = Object.keys(header);\n\t\tif (!acc || acc.size === 0) {\n\t\t\tacc = new Set(parameters);\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const parameter of parameters) {\n\t\t\tif (acc.has(parameter)) return false;\n\t\t\tacc.add(parameter);\n\t\t}\n\t}\n\treturn true;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_object.js\nfunction isObjectLike(value) {\n\treturn typeof value === \"object\" && value !== null;\n}\nvar is_object_default = (input) => {\n\tif (!isObjectLike(input) || Object.prototype.toString.call(input) !== \"[object Object]\") return false;\n\tif (Object.getPrototypeOf(input) === null) return true;\n\tlet proto = input;\n\twhile (Object.getPrototypeOf(proto) !== null) proto = Object.getPrototypeOf(proto);\n\treturn Object.getPrototypeOf(input) === proto;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/check_key_length.js\nvar check_key_length_default = (alg, key) => {\n\tif (alg.startsWith(\"RS\") || alg.startsWith(\"PS\")) {\n\t\tconst { modulusLength } = key.algorithm;\n\t\tif (typeof modulusLength !== \"number\" || modulusLength < 2048) throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/jwk_to_key.js\nfunction subtleMapping(jwk) {\n\tlet algorithm;\n\tlet keyUsages;\n\tswitch (jwk.kty) {\n\t\tcase \"RSA\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"PS256\":\n\t\t\t\tcase \"PS384\":\n\t\t\t\tcase \"PS512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSA-PSS\",\n\t\t\t\t\t\thash: `SHA-${jwk.alg.slice(-3)}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RS256\":\n\t\t\t\tcase \"RS384\":\n\t\t\t\tcase \"RS512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\n\t\t\t\t\t\thash: `SHA-${jwk.alg.slice(-3)}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RSA-OAEP\":\n\t\t\t\tcase \"RSA-OAEP-256\":\n\t\t\t\tcase \"RSA-OAEP-384\":\n\t\t\t\tcase \"RSA-OAEP-512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSA-OAEP\",\n\t\t\t\t\t\thash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"decrypt\", \"unwrapKey\"] : [\"encrypt\", \"wrapKey\"];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"EC\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"ES256\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-256\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ES384\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-384\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ES512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-521\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ECDH-ES\":\n\t\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\t\tcase \"ECDH-ES+A256KW\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDH\",\n\t\t\t\t\t\tnamedCurve: jwk.crv\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"deriveBits\"] : [];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"OKP\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"Ed25519\":\n\t\t\t\tcase \"EdDSA\":\n\t\t\t\t\talgorithm = { name: \"Ed25519\" };\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ECDH-ES\":\n\t\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\t\tcase \"ECDH-ES+A256KW\":\n\t\t\t\t\talgorithm = { name: jwk.crv };\n\t\t\t\t\tkeyUsages = jwk.d ? [\"deriveBits\"] : [];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"kty\\\" (Key Type) Parameter value\");\n\t}\n\treturn {\n\t\talgorithm,\n\t\tkeyUsages\n\t};\n}\nvar jwk_to_key_default = async (jwk) => {\n\tif (!jwk.alg) throw new TypeError(\"\\\"alg\\\" argument is required when \\\"jwk.alg\\\" is not present\");\n\tconst { algorithm, keyUsages } = subtleMapping(jwk);\n\tconst keyData = { ...jwk };\n\tdelete keyData.alg;\n\tdelete keyData.use;\n\treturn crypto.subtle.importKey(\"jwk\", keyData, algorithm, jwk.ext ?? (jwk.d ? false : true), jwk.key_ops ?? keyUsages);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/validate_crit.js\nvar validate_crit_default = (Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) => {\n\tif (joseHeader.crit !== void 0 && protectedHeader?.crit === void 0) throw new Err(\"\\\"crit\\\" (Critical) Header Parameter MUST be integrity protected\");\n\tif (!protectedHeader || protectedHeader.crit === void 0) return /* @__PURE__ */ new Set();\n\tif (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input) => typeof input !== \"string\" || input.length === 0)) throw new Err(\"\\\"crit\\\" (Critical) Header Parameter MUST be an array of non-empty strings when present\");\n\tlet recognized;\n\tif (recognizedOption !== void 0) recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n\telse recognized = recognizedDefault;\n\tfor (const parameter of protectedHeader.crit) {\n\t\tif (!recognized.has(parameter)) throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n\t\tif (joseHeader[parameter] === void 0) throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n\t\tif (recognized.get(parameter) && protectedHeader[parameter] === void 0) throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n\t}\n\treturn new Set(protectedHeader.crit);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/validate_algorithms.js\nvar validate_algorithms_default = (option, algorithms) => {\n\tif (algorithms !== void 0 && (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== \"string\"))) throw new TypeError(`\"${option}\" option must be an array of strings`);\n\tif (!algorithms) return;\n\treturn new Set(algorithms);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_jwk.js\nfunction isJWK(key) {\n\treturn is_object_default(key) && typeof key.kty === \"string\";\n}\nfunction isPrivateJWK(key) {\n\treturn key.kty !== \"oct\" && typeof key.d === \"string\";\n}\nfunction isPublicJWK(key) {\n\treturn key.kty !== \"oct\" && typeof key.d === \"undefined\";\n}\nfunction isSecretJWK(key) {\n\treturn key.kty === \"oct\" && typeof key.k === \"string\";\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/normalize_key.js\nlet cache;\nconst handleJWK = async (key, jwk, alg, freeze = false) => {\n\tcache ||= /* @__PURE__ */ new WeakMap();\n\tlet cached = cache.get(key);\n\tif (cached?.[alg]) return cached[alg];\n\tconst cryptoKey = await jwk_to_key_default({\n\t\t...jwk,\n\t\talg\n\t});\n\tif (freeze) Object.freeze(key);\n\tif (!cached) cache.set(key, { [alg]: cryptoKey });\n\telse cached[alg] = cryptoKey;\n\treturn cryptoKey;\n};\nconst handleKeyObject = (keyObject, alg) => {\n\tcache ||= /* @__PURE__ */ new WeakMap();\n\tlet cached = cache.get(keyObject);\n\tif (cached?.[alg]) return cached[alg];\n\tconst isPublic = keyObject.type === \"public\";\n\tconst extractable = isPublic ? true : false;\n\tlet cryptoKey;\n\tif (keyObject.asymmetricKeyType === \"x25519\") {\n\t\tswitch (alg) {\n\t\t\tcase \"ECDH-ES\":\n\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\tcase \"ECDH-ES+A256KW\": break;\n\t\t\tdefault: throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\t}\n\t\tcryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : [\"deriveBits\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"ed25519\") {\n\t\tif (alg !== \"EdDSA\" && alg !== \"Ed25519\") throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\tcryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"rsa\") {\n\t\tlet hash;\n\t\tswitch (alg) {\n\t\t\tcase \"RSA-OAEP\":\n\t\t\t\thash = \"SHA-1\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS256\":\n\t\t\tcase \"PS256\":\n\t\t\tcase \"RSA-OAEP-256\":\n\t\t\t\thash = \"SHA-256\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS384\":\n\t\t\tcase \"PS384\":\n\t\t\tcase \"RSA-OAEP-384\":\n\t\t\t\thash = \"SHA-384\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS512\":\n\t\t\tcase \"PS512\":\n\t\t\tcase \"RSA-OAEP-512\":\n\t\t\t\thash = \"SHA-512\";\n\t\t\t\tbreak;\n\t\t\tdefault: throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\t}\n\t\tif (alg.startsWith(\"RSA-OAEP\")) return keyObject.toCryptoKey({\n\t\t\tname: \"RSA-OAEP\",\n\t\t\thash\n\t\t}, extractable, isPublic ? [\"encrypt\"] : [\"decrypt\"]);\n\t\tcryptoKey = keyObject.toCryptoKey({\n\t\t\tname: alg.startsWith(\"PS\") ? \"RSA-PSS\" : \"RSASSA-PKCS1-v1_5\",\n\t\t\thash\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"ec\") {\n\t\tconst namedCurve = new Map([\n\t\t\t[\"prime256v1\", \"P-256\"],\n\t\t\t[\"secp384r1\", \"P-384\"],\n\t\t\t[\"secp521r1\", \"P-521\"]\n\t\t]).get(keyObject.asymmetricKeyDetails?.namedCurve);\n\t\tif (!namedCurve) throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\tif (alg === \"ES256\" && namedCurve === \"P-256\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg === \"ES384\" && namedCurve === \"P-384\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg === \"ES512\" && namedCurve === \"P-521\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg.startsWith(\"ECDH-ES\")) cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDH\",\n\t\t\tnamedCurve\n\t\t}, extractable, isPublic ? [] : [\"deriveBits\"]);\n\t}\n\tif (!cryptoKey) throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\tif (!cached) cache.set(keyObject, { [alg]: cryptoKey });\n\telse cached[alg] = cryptoKey;\n\treturn cryptoKey;\n};\nvar normalize_key_default = async (key, alg) => {\n\tif (key instanceof Uint8Array) return key;\n\tif (isCryptoKey(key)) return key;\n\tif (isKeyObject(key)) {\n\t\tif (key.type === \"secret\") return key.export();\n\t\tif (\"toCryptoKey\" in key && typeof key.toCryptoKey === \"function\") try {\n\t\t\treturn handleKeyObject(key, alg);\n\t\t} catch (err) {\n\t\t\tif (err instanceof TypeError) throw err;\n\t\t}\n\t\treturn handleJWK(key, key.export({ format: \"jwk\" }), alg);\n\t}\n\tif (isJWK(key)) {\n\t\tif (key.k) return decode(key.k);\n\t\treturn handleJWK(key, key, alg, true);\n\t}\n\tthrow new Error(\"unreachable\");\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/check_key_type.js\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n\tif (key.use !== void 0) {\n\t\tlet expected;\n\t\tswitch (usage) {\n\t\t\tcase \"sign\":\n\t\t\tcase \"verify\":\n\t\t\t\texpected = \"sig\";\n\t\t\t\tbreak;\n\t\t\tcase \"encrypt\":\n\t\t\tcase \"decrypt\":\n\t\t\t\texpected = \"enc\";\n\t\t\t\tbreak;\n\t\t}\n\t\tif (key.use !== expected) throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n\t}\n\tif (key.alg !== void 0 && key.alg !== alg) throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n\tif (Array.isArray(key.key_ops)) {\n\t\tlet expectedKeyOp;\n\t\tswitch (true) {\n\t\t\tcase usage === \"sign\" || usage === \"verify\":\n\t\t\tcase alg === \"dir\":\n\t\t\tcase alg.includes(\"CBC-HS\"):\n\t\t\t\texpectedKeyOp = usage;\n\t\t\t\tbreak;\n\t\t\tcase alg.startsWith(\"PBES2\"):\n\t\t\t\texpectedKeyOp = \"deriveBits\";\n\t\t\t\tbreak;\n\t\t\tcase /^A\\d{3}(?:GCM)?(?:KW)?$/.test(alg):\n\t\t\t\tif (!alg.includes(\"GCM\") && alg.endsWith(\"KW\")) expectedKeyOp = usage === \"encrypt\" ? \"wrapKey\" : \"unwrapKey\";\n\t\t\t\telse expectedKeyOp = usage;\n\t\t\t\tbreak;\n\t\t\tcase usage === \"encrypt\" && alg.startsWith(\"RSA\"):\n\t\t\t\texpectedKeyOp = \"wrapKey\";\n\t\t\t\tbreak;\n\t\t\tcase usage === \"decrypt\":\n\t\t\t\texpectedKeyOp = alg.startsWith(\"RSA\") ? \"unwrapKey\" : \"deriveBits\";\n\t\t\t\tbreak;\n\t\t}\n\t\tif (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n\t}\n\treturn true;\n};\nconst symmetricTypeCheck = (alg, key, usage) => {\n\tif (key instanceof Uint8Array) return;\n\tif (isJWK(key)) {\n\t\tif (isSecretJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\tthrow new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n\t}\n\tif (!is_key_like_default(key)) throw new TypeError(withAlg(alg, key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\", \"Uint8Array\"));\n\tif (key.type !== \"secret\") throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n\tif (isJWK(key)) switch (usage) {\n\t\tcase \"decrypt\":\n\t\tcase \"sign\":\n\t\t\tif (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\t\tthrow new TypeError(`JSON Web Key for this operation be a private JWK`);\n\t\tcase \"encrypt\":\n\t\tcase \"verify\":\n\t\t\tif (isPublicJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\t\tthrow new TypeError(`JSON Web Key for this operation be a public JWK`);\n\t}\n\tif (!is_key_like_default(key)) throw new TypeError(withAlg(alg, key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n\tif (key.type === \"secret\") throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n\tif (key.type === \"public\") switch (usage) {\n\t\tcase \"sign\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n\t\tcase \"decrypt\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n\t\tdefault: break;\n\t}\n\tif (key.type === \"private\") switch (usage) {\n\t\tcase \"verify\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n\t\tcase \"encrypt\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n\t\tdefault: break;\n\t}\n};\nvar check_key_type_default = (alg, key, usage) => {\n\tif (alg.startsWith(\"HS\") || alg === \"dir\" || alg.startsWith(\"PBES2\") || /^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(alg) || /^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(alg)) symmetricTypeCheck(alg, key, usage);\n\telse asymmetricTypeCheck(alg, key, usage);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/subtle_dsa.js\nvar subtle_dsa_default = (alg, algorithm) => {\n\tconst hash = `SHA-${alg.slice(-3)}`;\n\tswitch (alg) {\n\t\tcase \"HS256\":\n\t\tcase \"HS384\":\n\t\tcase \"HS512\": return {\n\t\t\thash,\n\t\t\tname: \"HMAC\"\n\t\t};\n\t\tcase \"PS256\":\n\t\tcase \"PS384\":\n\t\tcase \"PS512\": return {\n\t\t\thash,\n\t\t\tname: \"RSA-PSS\",\n\t\t\tsaltLength: parseInt(alg.slice(-3), 10) >> 3\n\t\t};\n\t\tcase \"RS256\":\n\t\tcase \"RS384\":\n\t\tcase \"RS512\": return {\n\t\t\thash,\n\t\t\tname: \"RSASSA-PKCS1-v1_5\"\n\t\t};\n\t\tcase \"ES256\":\n\t\tcase \"ES384\":\n\t\tcase \"ES512\": return {\n\t\t\thash,\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve: algorithm.namedCurve\n\t\t};\n\t\tcase \"Ed25519\":\n\t\tcase \"EdDSA\": return { name: \"Ed25519\" };\n\t\tdefault: throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/get_sign_verify_key.js\nvar get_sign_verify_key_default = async (alg, key, usage) => {\n\tif (key instanceof Uint8Array) {\n\t\tif (!alg.startsWith(\"HS\")) throw new TypeError(invalid_key_input_default(key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n\t\treturn crypto.subtle.importKey(\"raw\", key, {\n\t\t\thash: `SHA-${alg.slice(-3)}`,\n\t\t\tname: \"HMAC\"\n\t\t}, false, [usage]);\n\t}\n\tcheckSigCryptoKey(key, alg, usage);\n\treturn key;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/verify.js\nvar verify_default = async (alg, key, signature, data) => {\n\tconst cryptoKey = await get_sign_verify_key_default(alg, key, \"verify\");\n\tcheck_key_length_default(alg, cryptoKey);\n\tconst algorithm = subtle_dsa_default(alg, cryptoKey.algorithm);\n\ttry {\n\t\treturn await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n\t} catch {\n\t\treturn false;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/flattened/verify.js\nasync function flattenedVerify(jws, key, options) {\n\tif (!is_object_default(jws)) throw new JWSInvalid(\"Flattened JWS must be an object\");\n\tif (jws.protected === void 0 && jws.header === void 0) throw new JWSInvalid(\"Flattened JWS must have either of the \\\"protected\\\" or \\\"header\\\" members\");\n\tif (jws.protected !== void 0 && typeof jws.protected !== \"string\") throw new JWSInvalid(\"JWS Protected Header incorrect type\");\n\tif (jws.payload === void 0) throw new JWSInvalid(\"JWS Payload missing\");\n\tif (typeof jws.signature !== \"string\") throw new JWSInvalid(\"JWS Signature missing or incorrect type\");\n\tif (jws.header !== void 0 && !is_object_default(jws.header)) throw new JWSInvalid(\"JWS Unprotected Header incorrect type\");\n\tlet parsedProt = {};\n\tif (jws.protected) try {\n\t\tconst protectedHeader = decode(jws.protected);\n\t\tparsedProt = JSON.parse(decoder.decode(protectedHeader));\n\t} catch {\n\t\tthrow new JWSInvalid(\"JWS Protected Header is invalid\");\n\t}\n\tif (!is_disjoint_default(parsedProt, jws.header)) throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n\tconst joseHeader = {\n\t\t...parsedProt,\n\t\t...jws.header\n\t};\n\tconst extensions = validate_crit_default(JWSInvalid, new Map([[\"b64\", true]]), options?.crit, parsedProt, joseHeader);\n\tlet b64 = true;\n\tif (extensions.has(\"b64\")) {\n\t\tb64 = parsedProt.b64;\n\t\tif (typeof b64 !== \"boolean\") throw new JWSInvalid(\"The \\\"b64\\\" (base64url-encode payload) Header Parameter must be a boolean\");\n\t}\n\tconst { alg } = joseHeader;\n\tif (typeof alg !== \"string\" || !alg) throw new JWSInvalid(\"JWS \\\"alg\\\" (Algorithm) Header Parameter missing or invalid\");\n\tconst algorithms = options && validate_algorithms_default(\"algorithms\", options.algorithms);\n\tif (algorithms && !algorithms.has(alg)) throw new JOSEAlgNotAllowed(\"\\\"alg\\\" (Algorithm) Header Parameter value not allowed\");\n\tif (b64) {\n\t\tif (typeof jws.payload !== \"string\") throw new JWSInvalid(\"JWS Payload must be a string\");\n\t} else if (typeof jws.payload !== \"string\" && !(jws.payload instanceof Uint8Array)) throw new JWSInvalid(\"JWS Payload must be a string or an Uint8Array instance\");\n\tlet resolvedKey = false;\n\tif (typeof key === \"function\") {\n\t\tkey = await key(parsedProt, jws);\n\t\tresolvedKey = true;\n\t}\n\tcheck_key_type_default(alg, key, \"verify\");\n\tconst data = concat(encoder.encode(jws.protected ?? \"\"), encoder.encode(\".\"), typeof jws.payload === \"string\" ? encoder.encode(jws.payload) : jws.payload);\n\tlet signature;\n\ttry {\n\t\tsignature = decode(jws.signature);\n\t} catch {\n\t\tthrow new JWSInvalid(\"Failed to base64url decode the signature\");\n\t}\n\tconst k = await normalize_key_default(key, alg);\n\tif (!await verify_default(alg, k, signature, data)) throw new JWSSignatureVerificationFailed();\n\tlet payload;\n\tif (b64) try {\n\t\tpayload = decode(jws.payload);\n\t} catch {\n\t\tthrow new JWSInvalid(\"Failed to base64url decode the payload\");\n\t}\n\telse if (typeof jws.payload === \"string\") payload = encoder.encode(jws.payload);\n\telse payload = jws.payload;\n\tconst result = { payload };\n\tif (jws.protected !== void 0) result.protectedHeader = parsedProt;\n\tif (jws.header !== void 0) result.unprotectedHeader = jws.header;\n\tif (resolvedKey) return {\n\t\t...result,\n\t\tkey: k\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/compact/verify.js\nasync function compactVerify(jws, key, options) {\n\tif (jws instanceof Uint8Array) jws = decoder.decode(jws);\n\tif (typeof jws !== \"string\") throw new JWSInvalid(\"Compact JWS must be a string or Uint8Array\");\n\tconst { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split(\".\");\n\tif (length !== 3) throw new JWSInvalid(\"Invalid Compact JWS\");\n\tconst verified = await flattenedVerify({\n\t\tpayload,\n\t\tprotected: protectedHeader,\n\t\tsignature\n\t}, key, options);\n\tconst result = {\n\t\tpayload: verified.payload,\n\t\tprotectedHeader: verified.protectedHeader\n\t};\n\tif (typeof key === \"function\") return {\n\t\t...result,\n\t\tkey: verified.key\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/epoch.js\nvar epoch_default = (date) => Math.floor(date.getTime() / 1e3);\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/secs.js\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nvar secs_default = (str) => {\n\tconst matched = REGEX.exec(str);\n\tif (!matched || matched[4] && matched[1]) throw new TypeError(\"Invalid time period format\");\n\tconst value = parseFloat(matched[2]);\n\tconst unit = matched[3].toLowerCase();\n\tlet numericDate;\n\tswitch (unit) {\n\t\tcase \"sec\":\n\t\tcase \"secs\":\n\t\tcase \"second\":\n\t\tcase \"seconds\":\n\t\tcase \"s\":\n\t\t\tnumericDate = Math.round(value);\n\t\t\tbreak;\n\t\tcase \"minute\":\n\t\tcase \"minutes\":\n\t\tcase \"min\":\n\t\tcase \"mins\":\n\t\tcase \"m\":\n\t\t\tnumericDate = Math.round(value * minute);\n\t\t\tbreak;\n\t\tcase \"hour\":\n\t\tcase \"hours\":\n\t\tcase \"hr\":\n\t\tcase \"hrs\":\n\t\tcase \"h\":\n\t\t\tnumericDate = Math.round(value * hour);\n\t\t\tbreak;\n\t\tcase \"day\":\n\t\tcase \"days\":\n\t\tcase \"d\":\n\t\t\tnumericDate = Math.round(value * day);\n\t\t\tbreak;\n\t\tcase \"week\":\n\t\tcase \"weeks\":\n\t\tcase \"w\":\n\t\t\tnumericDate = Math.round(value * week);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnumericDate = Math.round(value * year);\n\t\t\tbreak;\n\t}\n\tif (matched[1] === \"-\" || matched[4] === \"ago\") return -numericDate;\n\treturn numericDate;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/jwt_claims_set.js\nfunction validateInput(label, input) {\n\tif (!Number.isFinite(input)) throw new TypeError(`Invalid ${label} input`);\n\treturn input;\n}\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, \"\");\nconst checkAudiencePresence = (audPayload, audOption) => {\n\tif (typeof audPayload === \"string\") return audOption.includes(audPayload);\n\tif (Array.isArray(audPayload)) return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n\treturn false;\n};\nfunction validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n\tlet payload;\n\ttry {\n\t\tpayload = JSON.parse(decoder.decode(encodedPayload));\n\t} catch {}\n\tif (!is_object_default(payload)) throw new JWTInvalid(\"JWT Claims Set must be a top-level JSON object\");\n\tconst { typ } = options;\n\tif (typ && (typeof protectedHeader.typ !== \"string\" || normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) throw new JWTClaimValidationFailed(\"unexpected \\\"typ\\\" JWT header value\", payload, \"typ\", \"check_failed\");\n\tconst { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n\tconst presenceCheck = [...requiredClaims];\n\tif (maxTokenAge !== void 0) presenceCheck.push(\"iat\");\n\tif (audience !== void 0) presenceCheck.push(\"aud\");\n\tif (subject !== void 0) presenceCheck.push(\"sub\");\n\tif (issuer !== void 0) presenceCheck.push(\"iss\");\n\tfor (const claim of new Set(presenceCheck.reverse())) if (!(claim in payload)) throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, \"missing\");\n\tif (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) throw new JWTClaimValidationFailed(\"unexpected \\\"iss\\\" claim value\", payload, \"iss\", \"check_failed\");\n\tif (subject && payload.sub !== subject) throw new JWTClaimValidationFailed(\"unexpected \\\"sub\\\" claim value\", payload, \"sub\", \"check_failed\");\n\tif (audience && !checkAudiencePresence(payload.aud, typeof audience === \"string\" ? [audience] : audience)) throw new JWTClaimValidationFailed(\"unexpected \\\"aud\\\" claim value\", payload, \"aud\", \"check_failed\");\n\tlet tolerance;\n\tswitch (typeof options.clockTolerance) {\n\t\tcase \"string\":\n\t\t\ttolerance = secs_default(options.clockTolerance);\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\ttolerance = options.clockTolerance;\n\t\t\tbreak;\n\t\tcase \"undefined\":\n\t\t\ttolerance = 0;\n\t\t\tbreak;\n\t\tdefault: throw new TypeError(\"Invalid clockTolerance option type\");\n\t}\n\tconst { currentDate } = options;\n\tconst now = epoch_default(currentDate || /* @__PURE__ */ new Date());\n\tif ((payload.iat !== void 0 || maxTokenAge) && typeof payload.iat !== \"number\") throw new JWTClaimValidationFailed(\"\\\"iat\\\" claim must be a number\", payload, \"iat\", \"invalid\");\n\tif (payload.nbf !== void 0) {\n\t\tif (typeof payload.nbf !== \"number\") throw new JWTClaimValidationFailed(\"\\\"nbf\\\" claim must be a number\", payload, \"nbf\", \"invalid\");\n\t\tif (payload.nbf > now + tolerance) throw new JWTClaimValidationFailed(\"\\\"nbf\\\" claim timestamp check failed\", payload, \"nbf\", \"check_failed\");\n\t}\n\tif (payload.exp !== void 0) {\n\t\tif (typeof payload.exp !== \"number\") throw new JWTClaimValidationFailed(\"\\\"exp\\\" claim must be a number\", payload, \"exp\", \"invalid\");\n\t\tif (payload.exp <= now - tolerance) throw new JWTExpired(\"\\\"exp\\\" claim timestamp check failed\", payload, \"exp\", \"check_failed\");\n\t}\n\tif (maxTokenAge) {\n\t\tconst age = now - payload.iat;\n\t\tconst max = typeof maxTokenAge === \"number\" ? maxTokenAge : secs_default(maxTokenAge);\n\t\tif (age - tolerance > max) throw new JWTExpired(\"\\\"iat\\\" claim timestamp check failed (too far in the past)\", payload, \"iat\", \"check_failed\");\n\t\tif (age < 0 - tolerance) throw new JWTClaimValidationFailed(\"\\\"iat\\\" claim timestamp check failed (it should be in the past)\", payload, \"iat\", \"check_failed\");\n\t}\n\treturn payload;\n}\nvar JWTClaimsBuilder = class {\n\t#payload;\n\tconstructor(payload) {\n\t\tif (!is_object_default(payload)) throw new TypeError(\"JWT Claims Set MUST be an object\");\n\t\tthis.#payload = structuredClone(payload);\n\t}\n\tdata() {\n\t\treturn encoder.encode(JSON.stringify(this.#payload));\n\t}\n\tget iss() {\n\t\treturn this.#payload.iss;\n\t}\n\tset iss(value) {\n\t\tthis.#payload.iss = value;\n\t}\n\tget sub() {\n\t\treturn this.#payload.sub;\n\t}\n\tset sub(value) {\n\t\tthis.#payload.sub = value;\n\t}\n\tget aud() {\n\t\treturn this.#payload.aud;\n\t}\n\tset aud(value) {\n\t\tthis.#payload.aud = value;\n\t}\n\tset jti(value) {\n\t\tthis.#payload.jti = value;\n\t}\n\tset nbf(value) {\n\t\tif (typeof value === \"number\") this.#payload.nbf = validateInput(\"setNotBefore\", value);\n\t\telse if (value instanceof Date) this.#payload.nbf = validateInput(\"setNotBefore\", epoch_default(value));\n\t\telse this.#payload.nbf = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value);\n\t}\n\tset exp(value) {\n\t\tif (typeof value === \"number\") this.#payload.exp = validateInput(\"setExpirationTime\", value);\n\t\telse if (value instanceof Date) this.#payload.exp = validateInput(\"setExpirationTime\", epoch_default(value));\n\t\telse this.#payload.exp = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value);\n\t}\n\tset iat(value) {\n\t\tif (typeof value === \"undefined\") this.#payload.iat = epoch_default(/* @__PURE__ */ new Date());\n\t\telse if (value instanceof Date) this.#payload.iat = validateInput(\"setIssuedAt\", epoch_default(value));\n\t\telse if (typeof value === \"string\") this.#payload.iat = validateInput(\"setIssuedAt\", epoch_default(/* @__PURE__ */ new Date()) + secs_default(value));\n\t\telse this.#payload.iat = validateInput(\"setIssuedAt\", value);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jwt/verify.js\nasync function jwtVerify(jwt, key, options) {\n\tconst verified = await compactVerify(jwt, key, options);\n\tif (verified.protectedHeader.crit?.includes(\"b64\") && verified.protectedHeader.b64 === false) throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n\tconst result = {\n\t\tpayload: validateClaimsSet(verified.protectedHeader, verified.payload, options),\n\t\tprotectedHeader: verified.protectedHeader\n\t};\n\tif (typeof key === \"function\") return {\n\t\t...result,\n\t\tkey: verified.key\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/sign.js\nvar sign_default = async (alg, key, data) => {\n\tconst cryptoKey = await get_sign_verify_key_default(alg, key, \"sign\");\n\tcheck_key_length_default(alg, cryptoKey);\n\tconst signature = await crypto.subtle.sign(subtle_dsa_default(alg, cryptoKey.algorithm), cryptoKey, data);\n\treturn new Uint8Array(signature);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/flattened/sign.js\nvar FlattenedSign = class {\n\t#payload;\n\t#protectedHeader;\n\t#unprotectedHeader;\n\tconstructor(payload) {\n\t\tif (!(payload instanceof Uint8Array)) throw new TypeError(\"payload must be an instance of Uint8Array\");\n\t\tthis.#payload = payload;\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tif (this.#protectedHeader) throw new TypeError(\"setProtectedHeader can only be called once\");\n\t\tthis.#protectedHeader = protectedHeader;\n\t\treturn this;\n\t}\n\tsetUnprotectedHeader(unprotectedHeader) {\n\t\tif (this.#unprotectedHeader) throw new TypeError(\"setUnprotectedHeader can only be called once\");\n\t\tthis.#unprotectedHeader = unprotectedHeader;\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tif (!this.#protectedHeader && !this.#unprotectedHeader) throw new JWSInvalid(\"either setProtectedHeader or setUnprotectedHeader must be called before #sign()\");\n\t\tif (!is_disjoint_default(this.#protectedHeader, this.#unprotectedHeader)) throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n\t\tconst joseHeader = {\n\t\t\t...this.#protectedHeader,\n\t\t\t...this.#unprotectedHeader\n\t\t};\n\t\tconst extensions = validate_crit_default(JWSInvalid, new Map([[\"b64\", true]]), options?.crit, this.#protectedHeader, joseHeader);\n\t\tlet b64 = true;\n\t\tif (extensions.has(\"b64\")) {\n\t\t\tb64 = this.#protectedHeader.b64;\n\t\t\tif (typeof b64 !== \"boolean\") throw new JWSInvalid(\"The \\\"b64\\\" (base64url-encode payload) Header Parameter must be a boolean\");\n\t\t}\n\t\tconst { alg } = joseHeader;\n\t\tif (typeof alg !== \"string\" || !alg) throw new JWSInvalid(\"JWS \\\"alg\\\" (Algorithm) Header Parameter missing or invalid\");\n\t\tcheck_key_type_default(alg, key, \"sign\");\n\t\tlet payload = this.#payload;\n\t\tif (b64) payload = encoder.encode(encode(payload));\n\t\tlet protectedHeader;\n\t\tif (this.#protectedHeader) protectedHeader = encoder.encode(encode(JSON.stringify(this.#protectedHeader)));\n\t\telse protectedHeader = encoder.encode(\"\");\n\t\tconst data = concat(protectedHeader, encoder.encode(\".\"), payload);\n\t\tconst jws = {\n\t\t\tsignature: encode(await sign_default(alg, await normalize_key_default(key, alg), data)),\n\t\t\tpayload: \"\"\n\t\t};\n\t\tif (b64) jws.payload = decoder.decode(payload);\n\t\tif (this.#unprotectedHeader) jws.header = this.#unprotectedHeader;\n\t\tif (this.#protectedHeader) jws.protected = decoder.decode(protectedHeader);\n\t\treturn jws;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/compact/sign.js\nvar CompactSign = class {\n\t#flattened;\n\tconstructor(payload) {\n\t\tthis.#flattened = new FlattenedSign(payload);\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tthis.#flattened.setProtectedHeader(protectedHeader);\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tconst jws = await this.#flattened.sign(key, options);\n\t\tif (jws.payload === void 0) throw new TypeError(\"use the flattened module for creating JWS with b64: false\");\n\t\treturn `${jws.protected}.${jws.payload}.${jws.signature}`;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jwt/sign.js\nvar SignJWT = class {\n\t#protectedHeader;\n\t#jwt;\n\tconstructor(payload = {}) {\n\t\tthis.#jwt = new JWTClaimsBuilder(payload);\n\t}\n\tsetIssuer(issuer) {\n\t\tthis.#jwt.iss = issuer;\n\t\treturn this;\n\t}\n\tsetSubject(subject) {\n\t\tthis.#jwt.sub = subject;\n\t\treturn this;\n\t}\n\tsetAudience(audience) {\n\t\tthis.#jwt.aud = audience;\n\t\treturn this;\n\t}\n\tsetJti(jwtId) {\n\t\tthis.#jwt.jti = jwtId;\n\t\treturn this;\n\t}\n\tsetNotBefore(input) {\n\t\tthis.#jwt.nbf = input;\n\t\treturn this;\n\t}\n\tsetExpirationTime(input) {\n\t\tthis.#jwt.exp = input;\n\t\treturn this;\n\t}\n\tsetIssuedAt(input) {\n\t\tthis.#jwt.iat = input;\n\t\treturn this;\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tthis.#protectedHeader = protectedHeader;\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tconst sig = new CompactSign(this.#jwt.data());\n\t\tsig.setProtectedHeader(this.#protectedHeader);\n\t\tif (Array.isArray(this.#protectedHeader?.crit) && this.#protectedHeader.crit.includes(\"b64\") && this.#protectedHeader.b64 === false) throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n\t\treturn sig.sign(key, options);\n\t}\n};\n//#endregion\n//#region src/verifyJwtSignedUrl.ts\n/**\n* Verifies JWT token only and returns the file key (path with leading slashes removed) if valid.\n*/\nconst verifyJwtToken = async ({ path, token, jwtSecret }) => {\n\tconst key = path.replace(/^\\/+/, \"\");\n\tif (!token) return {\n\t\tvalid: false,\n\t\terror: \"Missing token\"\n\t};\n\ttry {\n\t\tconst { payload } = await jwtVerify(token, new TextEncoder().encode(jwtSecret));\n\t\tif (!payload || payload.key !== key) return {\n\t\t\tvalid: false,\n\t\t\terror: \"Token does not match requested file\"\n\t\t};\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tkey\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: \"Invalid or expired token\"\n\t\t};\n\t}\n};\n/**\n* Retrieves file data through the handler and constructs a response object with appropriate headers for download.\n*/\nconst getFileResponse = async ({ key, handler }) => {\n\tconst object = await handler(key);\n\tif (!object) return {\n\t\tstatus: 404,\n\t\terror: \"File not found\"\n\t};\n\tconst pathParts = key.split(\"/\");\n\tconst fileName = pathParts[pathParts.length - 1];\n\treturn {\n\t\tstatus: 200,\n\t\tresponseHeaders: {\n\t\t\t\"Content-Type\": object.contentType || \"application/octet-stream\",\n\t\t\t\"Content-Disposition\": `attachment; filename=${fileName}`\n\t\t},\n\t\tresponseBody: object.body\n\t};\n};\n/**\n* Integrated function for JWT verification and file handling.\n* - Returns error response if token is missing or validation fails.\n* - On success, retrieves file data through the handler and constructs a response object.\n*/\nconst verifyJwtSignedUrl = async ({ path, token, jwtSecret, handler }) => {\n\tconst result = await verifyJwtToken({\n\t\tpath,\n\t\ttoken,\n\t\tjwtSecret\n\t});\n\tif (!result.valid) {\n\t\tif (result.error === \"Missing token\") return {\n\t\t\tstatus: 400,\n\t\t\terror: result.error\n\t\t};\n\t\treturn {\n\t\t\tstatus: 403,\n\t\t\terror: result.error || \"Unauthorized\"\n\t\t};\n\t}\n\treturn getFileResponse({\n\t\tkey: result.key,\n\t\thandler\n\t});\n};\n//#endregion\n//#region src/withJwtSignedUrl.ts\n/**\n* Creates a JWT-signed download URL based on the provided update information.\n*\n* @param {Object} options - Function options\n* @param {T|null} options.data - Update information (null if none)\n* @param {string} options.reqUrl - Request URL (base URL for token generation)\n* @param {string} options.jwtSecret - Secret key for JWT signing\n* @returns {Promise<T|null>} - Update response object with fileUrl or null\n*/\nconst withJwtSignedUrl = async ({ data, reqUrl, jwtSecret }) => {\n\tif (!data) return null;\n\tconst { storageUri, ...rest } = data;\n\tif (data.id === NIL_UUID || !storageUri) return {\n\t\t...rest,\n\t\tfileUrl: null\n\t};\n\tconst storageUrl = new URL(storageUri);\n\tconst key = `${storageUrl.host}${storageUrl.pathname}`;\n\tconst token = await signToken(key, jwtSecret);\n\tconst url = new URL(reqUrl);\n\turl.pathname = key;\n\turl.searchParams.set(\"token\", token);\n\treturn {\n\t\t...rest,\n\t\tfileUrl: url.toString()\n\t};\n};\nconst signToken = async (key, jwtSecret) => {\n\tconst secretKey = new TextEncoder().encode(jwtSecret);\n\treturn await new SignJWT({ key }).setProtectedHeader({ alg: \"HS256\" }).setExpirationTime(\"60s\").sign(secretKey);\n};\n//#endregion\nexport { filterCompatibleAppVersions, getUpdateInfo, semverSatisfies, signToken, verifyJwtSignedUrl, verifyJwtToken, withJwtSignedUrl };\n", "import { filterCompatibleAppVersions } from \"./filterCompatibleAppVersions.mjs\";\nimport { getUpdateInfo } from \"@hot-updater/js\";\nimport { NIL_UUID } from \"@hot-updater/core\";\n//#region src/createDatabasePluginGetUpdateInfo.ts\nconst normalizeAppVersionArgs = (args) => ({\n\t...args,\n\tchannel: args.channel ?? \"production\",\n\tminBundleId: args.minBundleId ?? NIL_UUID\n});\nconst normalizeFingerprintArgs = (args) => ({\n\t...args,\n\tchannel: args.channel ?? \"production\",\n\tminBundleId: args.minBundleId ?? NIL_UUID\n});\nconst createDatabasePluginGetUpdateInfo = ({ getBundlesByFingerprint, getBundlesByTargetAppVersions, listTargetAppVersions }) => {\n\treturn async (args, context) => {\n\t\tif (args._updateStrategy === \"appVersion\") {\n\t\t\tconst normalizedArgs = normalizeAppVersionArgs(args);\n\t\t\tconst compatibleAppVersions = filterCompatibleAppVersions(await listTargetAppVersions(normalizedArgs, context), normalizedArgs.appVersion);\n\t\t\treturn getUpdateInfo(compatibleAppVersions.length > 0 ? await getBundlesByTargetAppVersions(normalizedArgs, compatibleAppVersions, context) : [], normalizedArgs);\n\t\t}\n\t\tconst normalizedArgs = normalizeFingerprintArgs(args);\n\t\treturn getUpdateInfo(await getBundlesByFingerprint(normalizedArgs, context), normalizedArgs);\n\t};\n};\n//#endregion\nexport { createDatabasePluginGetUpdateInfo };\n", "import type {\n AppUpdateInfo,\n Bundle,\n GetBundlesArgs,\n UpdateInfo,\n} from \"@hot-updater/core\";\nimport type {\n DatabaseBundleQueryOptions,\n DatabasePlugin,\n HotUpdaterContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\nimport type { FumaDBAdapter } from \"fumadb/adapters\";\n\nimport type { PaginatedResult } from \"../types\";\n\nexport type DatabasePluginFactory<TContext = unknown> =\n () => DatabasePlugin<TContext>;\n\nexport type DatabaseAdapter<TContext = unknown> =\n | FumaDBAdapter\n | DatabasePlugin<TContext>\n | DatabasePluginFactory<TContext>;\n\nexport function isDatabasePluginFactory<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is DatabasePluginFactory<TContext> {\n return typeof adapter === \"function\";\n}\n\nexport function isDatabasePlugin<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is DatabasePlugin<TContext> {\n return (\n typeof adapter === \"object\" &&\n adapter !== null &&\n \"getBundleById\" in adapter &&\n \"getBundles\" in adapter &&\n \"getChannels\" in adapter\n );\n}\n\nexport function isFumaAdapter<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is FumaDBAdapter {\n return !isDatabasePluginFactory(adapter) && !isDatabasePlugin(adapter);\n}\n\nexport interface DatabaseAPI<TContext = unknown> {\n getBundleById(\n id: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle | null>;\n getUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<UpdateInfo | null>;\n getAppUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<AppUpdateInfo | null>;\n getChannels(context?: HotUpdaterContext<TContext>): Promise<string[]>;\n getBundles(\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<PaginatedResult>;\n insertBundle(\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n updateBundleById(\n bundleId: string,\n newBundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n deleteBundleById(\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n}\n\nexport type StoragePluginFactory<TContext = unknown> =\n () => StoragePlugin<TContext>;\n", "import type {\n AppUpdateInfo,\n AppVersionGetBundlesArgs,\n Bundle,\n FingerprintGetBundlesArgs,\n Platform,\n} from \"@hot-updater/core\";\nimport type {\n DatabaseBundleQueryOptions,\n HotUpdaterContext,\n} from \"@hot-updater/plugin-core\";\n\nimport { addRoute, createRouter, findRoute } from \"./internalRouter\";\nimport type { ChannelsResponse, PaginatedResult } from \"./types\";\nimport { HOT_UPDATER_SERVER_VERSION } from \"./version\";\n\n// Narrow API surface needed by the handler to avoid circular types\nexport interface HandlerAPI<TContext = unknown> {\n getAppUpdateInfo: (\n args: AppVersionGetBundlesArgs | FingerprintGetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<AppUpdateInfo | null>;\n getBundleById: (\n id: string,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<Bundle | null>;\n getBundles: (\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<PaginatedResult>;\n insertBundle: (\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n updateBundleById: (\n bundleId: string,\n bundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n deleteBundleById: (\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n getChannels: (context?: HotUpdaterContext<TContext>) => Promise<string[]>;\n}\n\nexport interface HandlerOptions {\n /**\n * Base path for all routes\n * @default \"/api\"\n */\n basePath?: string;\n routes?: HandlerRoutes;\n}\n\nexport interface HandlerRoutes {\n /**\n * Controls whether update-check routes are mounted.\n * @default true\n */\n updateCheck?: boolean;\n /**\n * Controls whether the `/version` endpoint is mounted.\n * Useful for diagnostics and lightweight health/version checks.\n * @default true\n */\n version?: boolean;\n /**\n * Controls whether bundle management routes are mounted.\n * This includes `/api/bundles*`, which are used by the\n * CLI `standaloneRepository` plugin.\n * @default true\n */\n bundles?: boolean;\n}\n\ntype RouteHandler<TContext = unknown> = (\n params: Record<string, string>,\n request: Request,\n api: HandlerAPI<TContext>,\n context?: HotUpdaterContext<TContext>,\n) => Promise<Response>;\n\nclass HandlerBadRequestError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HandlerBadRequestError\";\n }\n}\n\n// Route handlers\nconst handleVersion: RouteHandler = async () => {\n return new Response(JSON.stringify({ version: HOT_UPDATER_SERVER_VERSION }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst decodeMaybe = (value: string | undefined): string | undefined => {\n if (value === undefined) return undefined;\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\n\nconst isPlatform = (value: string): value is Platform => {\n return value === \"ios\" || value === \"android\";\n};\n\nconst requireRouteParam = (\n params: Record<string, string>,\n key: string,\n): string => {\n const value = params[key];\n if (!value) {\n throw new HandlerBadRequestError(`Missing route parameter: ${key}`);\n }\n\n return value;\n};\n\nconst requirePlatformParam = (params: Record<string, string>): Platform => {\n const platform = requireRouteParam(params, \"platform\");\n\n if (!isPlatform(platform)) {\n throw new HandlerBadRequestError(\n `Invalid platform: ${platform}. Expected 'ios' or 'android'.`,\n );\n }\n\n return platform;\n};\n\ntype BundlePatchPayload = Partial<Bundle> & {\n id?: string;\n};\n\nconst requireBundlePatchPayload = (\n payload: unknown,\n bundleId: string,\n): Partial<Bundle> => {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n throw new HandlerBadRequestError(\"Invalid bundle payload\");\n }\n\n const bundlePatch = payload as BundlePatchPayload;\n if (bundlePatch.id !== undefined && bundlePatch.id !== bundleId) {\n throw new HandlerBadRequestError(\"Bundle id mismatch\");\n }\n\n const { id: _ignoredId, ...rest } = bundlePatch;\n return rest;\n};\n\nconst handleFingerprintUpdateWithCohort: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const platform = requirePlatformParam(params);\n const fingerprintHash = requireRouteParam(params, \"fingerprintHash\");\n const channel = requireRouteParam(params, \"channel\");\n const minBundleId = requireRouteParam(params, \"minBundleId\");\n const bundleId = requireRouteParam(params, \"bundleId\");\n\n const updateInfo = await api.getAppUpdateInfo(\n {\n _updateStrategy: \"fingerprint\",\n platform,\n fingerprintHash,\n channel,\n minBundleId,\n bundleId,\n cohort: decodeMaybe(params.cohort),\n },\n context,\n );\n\n return new Response(JSON.stringify(updateInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleAppVersionUpdateWithCohort: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const platform = requirePlatformParam(params);\n const appVersion = requireRouteParam(params, \"appVersion\");\n const channel = requireRouteParam(params, \"channel\");\n const minBundleId = requireRouteParam(params, \"minBundleId\");\n const bundleId = requireRouteParam(params, \"bundleId\");\n\n const updateInfo = await api.getAppUpdateInfo(\n {\n _updateStrategy: \"appVersion\",\n platform,\n appVersion,\n channel,\n minBundleId,\n bundleId,\n cohort: decodeMaybe(params.cohort),\n },\n context,\n );\n\n return new Response(JSON.stringify(updateInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetBundle: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n const bundle = await api.getBundleById(bundleId, context);\n\n if (!bundle) {\n return new Response(JSON.stringify({ error: \"Bundle not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n return new Response(JSON.stringify(bundle), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetBundles: RouteHandler = async (\n _params,\n request,\n api,\n context,\n) => {\n const url = new URL(request.url);\n const channel = url.searchParams.get(\"channel\") ?? undefined;\n const platform = url.searchParams.get(\"platform\");\n const limit = Number(url.searchParams.get(\"limit\")) || 50;\n const pageParam = url.searchParams.get(\"page\");\n const offset = url.searchParams.get(\"offset\");\n const after = url.searchParams.get(\"after\") ?? undefined;\n const before = url.searchParams.get(\"before\") ?? undefined;\n const page =\n pageParam === null\n ? undefined\n : Number.isInteger(Number(pageParam)) && Number(pageParam) > 0\n ? Number(pageParam)\n : null;\n\n if (offset !== null) {\n throw new HandlerBadRequestError(\n \"The 'offset' query parameter has been removed. Use 'after' or 'before' cursor pagination instead.\",\n );\n }\n\n if (page === null) {\n throw new HandlerBadRequestError(\n \"The 'page' query parameter must be a positive integer.\",\n );\n }\n\n if (platform !== null && !isPlatform(platform)) {\n throw new HandlerBadRequestError(\n `Invalid platform: ${platform}. Expected 'ios' or 'android'.`,\n );\n }\n\n const result = await api.getBundles(\n {\n where: {\n ...(channel && { channel }),\n ...(platform && { platform }),\n },\n limit,\n page,\n cursor:\n after || before\n ? {\n after,\n before,\n }\n : undefined,\n },\n context,\n );\n\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleCreateBundles: RouteHandler = async (\n _params,\n request,\n api,\n context,\n) => {\n const body = await request.json();\n const bundles = Array.isArray(body) ? body : [body];\n\n for (const bundle of bundles) {\n await api.insertBundle(bundle as Bundle, context);\n }\n\n return new Response(JSON.stringify({ success: true }), {\n status: 201,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleUpdateBundle: RouteHandler = async (\n params,\n request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n const body = await request.json();\n const payload = Array.isArray(body) ? body[0] : body;\n const bundlePatch = requireBundlePatchPayload(payload, bundleId);\n await api.updateBundleById(bundleId, bundlePatch, context);\n\n return new Response(JSON.stringify({ success: true }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleDeleteBundle: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n await api.deleteBundleById(bundleId, context);\n\n return new Response(JSON.stringify({ success: true }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetChannels: RouteHandler = async (\n _params,\n _request,\n api,\n context,\n) => {\n const channels = await api.getChannels(context);\n const response: ChannelsResponse = {\n data: {\n channels,\n },\n };\n\n return new Response(JSON.stringify(response), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\n// Route handlers map\nconst routes: Record<string, RouteHandler<any>> = {\n version: handleVersion,\n fingerprintUpdateWithCohort: handleFingerprintUpdateWithCohort,\n appVersionUpdateWithCohort: handleAppVersionUpdateWithCohort,\n getBundle: handleGetBundle,\n getBundles: handleGetBundles,\n createBundles: handleCreateBundles,\n updateBundle: handleUpdateBundle,\n deleteBundle: handleDeleteBundle,\n getChannels: handleGetChannels,\n};\n\n/**\n * Creates a Web Standard Request handler for Hot Updater API\n * This handler is framework-agnostic and works with any runtime that\n * supports standard Request/Response objects.\n */\nexport function createHandler<TContext = unknown>(\n api: HandlerAPI<TContext>,\n options: HandlerOptions = {},\n): (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n) => Promise<Response> {\n const basePath = options.basePath ?? \"/api\";\n const updateCheckEnabled = options.routes?.updateCheck ?? true;\n const versionEnabled = options.routes?.version ?? true;\n const bundlesEnabled = options.routes?.bundles ?? true;\n\n // Create and configure router\n const router = createRouter();\n\n // Register routes\n if (versionEnabled) {\n addRoute(router, \"GET\", \"/version\", \"version\");\n }\n\n if (updateCheckEnabled) {\n addRoute(\n router,\n \"GET\",\n \"/fingerprint/:platform/:fingerprintHash/:channel/:minBundleId/:bundleId\",\n \"fingerprintUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/fingerprint/:platform/:fingerprintHash/:channel/:minBundleId/:bundleId/:cohort\",\n \"fingerprintUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/app-version/:platform/:appVersion/:channel/:minBundleId/:bundleId\",\n \"appVersionUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/app-version/:platform/:appVersion/:channel/:minBundleId/:bundleId/:cohort\",\n \"appVersionUpdateWithCohort\",\n );\n }\n\n if (bundlesEnabled) {\n addRoute(router, \"GET\", \"/api/bundles/channels\", \"getChannels\");\n addRoute(router, \"GET\", \"/api/bundles/:id\", \"getBundle\");\n addRoute(router, \"GET\", \"/api/bundles\", \"getBundles\");\n addRoute(router, \"POST\", \"/api/bundles\", \"createBundles\");\n addRoute(router, \"PATCH\", \"/api/bundles/:id\", \"updateBundle\");\n addRoute(router, \"DELETE\", \"/api/bundles/:id\", \"deleteBundle\");\n }\n\n return async (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Response> => {\n try {\n const url = new URL(request.url);\n const path = url.pathname;\n const method = request.method;\n\n // Remove base path from pathname\n const routePath = path.startsWith(basePath)\n ? path.slice(basePath.length)\n : path;\n\n // Find matching route\n const match = findRoute(router, method, routePath);\n\n if (!match) {\n return new Response(JSON.stringify({ error: \"Not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // Get handler and execute\n const handler = routes[match.data as string] as RouteHandler<TContext>;\n if (!handler) {\n return new Response(JSON.stringify({ error: \"Handler not found\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n return await handler(match.params || {}, request, api, context);\n } catch (error) {\n if (error instanceof HandlerBadRequestError) {\n return new Response(JSON.stringify({ error: error.message }), {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n console.error(\"Hot Updater handler error:\", error);\n return new Response(\n JSON.stringify({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n }\n };\n}\n", "interface RouteRecord<T> {\n data: T;\n method: string;\n paramNames: string[];\n segments: string[];\n}\n\ninterface RouteMatch<T> {\n data: T;\n params: Record<string, string>;\n}\n\ninterface Router<T> {\n routes: RouteRecord<T>[];\n}\n\nconst normalizePath = (path: string) => {\n if (!path) {\n return \"/\";\n }\n\n if (path === \"/\") {\n return path;\n }\n\n const withLeadingSlash = path.startsWith(\"/\") ? path : `/${path}`;\n return withLeadingSlash.endsWith(\"/\")\n ? withLeadingSlash.slice(0, -1)\n : withLeadingSlash;\n};\n\nconst toSegments = (path: string) => {\n const normalized = normalizePath(path);\n return normalized === \"/\" ? [] : normalized.slice(1).split(\"/\");\n};\n\nexport function createRouter<T>(): Router<T> {\n return { routes: [] };\n}\n\nexport function addRoute<T>(\n router: Router<T>,\n method: string,\n path: string,\n data: T,\n) {\n const segments = toSegments(path);\n const paramNames = segments\n .filter((segment) => segment.startsWith(\":\"))\n .map((segment) => segment.slice(1));\n\n router.routes.push({\n data,\n method: method.toUpperCase(),\n paramNames,\n segments,\n });\n}\n\nexport function findRoute<T>(\n router: Router<T>,\n method: string,\n path: string,\n): RouteMatch<T> | undefined {\n const normalizedMethod = method.toUpperCase();\n const pathSegments = toSegments(path);\n\n for (const route of router.routes) {\n if (route.method !== normalizedMethod) {\n continue;\n }\n\n if (route.segments.length !== pathSegments.length) {\n continue;\n }\n\n const params: Record<string, string> = {};\n let matched = true;\n\n for (let index = 0; index < route.segments.length; index += 1) {\n const routeSegment = route.segments[index];\n const pathSegment = pathSegments[index];\n\n if (routeSegment.startsWith(\":\")) {\n params[routeSegment.slice(1)] = pathSegment;\n continue;\n }\n\n if (routeSegment !== pathSegment) {\n matched = false;\n break;\n }\n }\n\n if (matched) {\n return {\n data: route.data,\n params,\n };\n }\n }\n\n return undefined;\n}\n", "import pkg from \"../package.json\" with { type: \"json\" };\n\nexport const HOT_UPDATER_SERVER_VERSION = pkg.version;\n", "{\n \"name\": \"@hot-updater/server\",\n \"version\": \"0.30.5\",\n \"type\": \"module\",\n \"description\": \"React Native OTA solution for self-hosted\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.cts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./adapters/drizzle\": {\n \"import\": \"./dist/adapters/drizzle.mjs\",\n \"require\": \"./dist/adapters/drizzle.cjs\"\n },\n \"./adapters/kysely\": {\n \"import\": \"./dist/adapters/kysely.mjs\",\n \"require\": \"./dist/adapters/kysely.cjs\"\n },\n \"./adapters/mongodb\": {\n \"import\": \"./dist/adapters/mongodb.mjs\",\n \"require\": \"./dist/adapters/mongodb.cjs\"\n },\n \"./adapters/prisma\": {\n \"import\": \"./dist/adapters/prisma.mjs\",\n \"require\": \"./dist/adapters/prisma.cjs\"\n },\n \"./node\": {\n \"import\": \"./dist/node.mjs\",\n \"require\": \"./dist/node.cjs\"\n },\n \"./runtime\": {\n \"import\": \"./dist/runtime.mjs\",\n \"require\": \"./dist/runtime.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"src\",\n \"package.json\"\n ],\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsdown\",\n \"test:type\": \"tsc --noEmit\"\n },\n \"repository\": \"https://github.com/gronxb/hot-updater\",\n \"author\": \"gronxb <gron1gh1@gmail.com> (https://github.com/gronxb)\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@hot-updater/core\": \"workspace:*\",\n \"@hot-updater/plugin-core\": \"workspace:*\",\n \"@hot-updater/js\": \"workspace:*\",\n \"fumadb\": \"0.2.2\",\n \"rou3\": \"0.7.9\",\n \"semver\": \"^7.7.2\"\n },\n \"devDependencies\": {\n \"@electric-sql/pglite\": \"^0.2.17\",\n \"@hot-updater/standalone\": \"workspace:*\",\n \"@hot-updater/test-utils\": \"workspace:*\",\n \"@types/node\": \"catalog:\",\n \"@types/semver\": \"^7.5.8\",\n \"execa\": \"catalog:tools\",\n \"kysely\": \"^0.28.9\",\n \"kysely-pglite-dialect\": \"^1.2.0\",\n \"msw\": \"^2.7.0\",\n \"uuidv7\": \"^1.0.2\"\n }\n}\n", "export const normalizeBasePath = (basePath?: string) => {\n if (!basePath || basePath === \"/\") {\n return \"/\";\n }\n\n return basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n};\n", "// src/index.ts\nimport { Hono } from \"./hono.js\";\nexport {\n Hono\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/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/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/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 createResponseInstance = (body, init) => new Response(body, init);\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 ||= createResponseInstance(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 = createResponseInstance(_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 = createResponseInstance(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 createResponseInstance(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 ??= () => createResponseInstance();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\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 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/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\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 if (/(?:^|\\.)__proto__\\./.test(key)) {\n return;\n }\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 tryDecodeURI\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 = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\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/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/router/reg-exp-router/index.ts\nimport { RegExpRouter } from \"./router.js\";\nimport { PreparedRegExpRouter, buildInitParams, serializeInitParams } from \"./prepared-router.js\";\nexport {\n PreparedRegExpRouter,\n RegExpRouter,\n buildInitParams,\n serializeInitParams\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/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/prepared-router.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { RegExpRouter } from \"./router.js\";\nvar PreparedRegExpRouter = class {\n name = \"PreparedRegExpRouter\";\n #matchers;\n #relocateMap;\n constructor(matchers, relocateMap) {\n this.#matchers = matchers;\n this.#relocateMap = relocateMap;\n }\n #addWildcard(method, handlerData) {\n const matcher = this.#matchers[method];\n matcher[1].forEach((list) => list && list.push(handlerData));\n Object.values(matcher[2]).forEach((list) => list[0].push(handlerData));\n }\n #addPath(method, path, handler, indexes, map) {\n const matcher = this.#matchers[method];\n if (!map) {\n matcher[2][path][0].push([handler, {}]);\n } else {\n indexes.forEach((index) => {\n if (typeof index === \"number\") {\n matcher[1][index].push([handler, map]);\n } else {\n ;\n matcher[2][index || path][0].push([handler, map]);\n }\n });\n }\n }\n add(method, path, handler) {\n if (!this.#matchers[method]) {\n const all = this.#matchers[METHOD_NAME_ALL];\n const staticMap = {};\n for (const key in all[2]) {\n staticMap[key] = [all[2][key][0].slice(), emptyParam];\n }\n this.#matchers[method] = [\n all[0],\n all[1].map((list) => Array.isArray(list) ? list.slice() : 0),\n staticMap\n ];\n }\n if (path === \"/*\" || path === \"*\") {\n const handlerData = [handler, {}];\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addWildcard(m, handlerData);\n }\n } else {\n this.#addWildcard(method, handlerData);\n }\n return;\n }\n const data = this.#relocateMap[path];\n if (!data) {\n throw new Error(`Path ${path} is not registered`);\n }\n for (const [indexes, map] of data) {\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addPath(m, path, handler, indexes, map);\n }\n } else {\n this.#addPath(method, path, handler, indexes, map);\n }\n }\n }\n buildAllMatchers() {\n return this.#matchers;\n }\n match = match;\n};\nvar buildInitParams = ({ paths }) => {\n const RegExpRouterWithMatcherExport = class extends RegExpRouter {\n buildAndExportAllMatchers() {\n return this.buildAllMatchers();\n }\n };\n const router = new RegExpRouterWithMatcherExport();\n for (const path of paths) {\n router.add(METHOD_NAME_ALL, path, path);\n }\n const matchers = router.buildAndExportAllMatchers();\n const all = matchers[METHOD_NAME_ALL];\n const relocateMap = {};\n for (const path of paths) {\n if (path === \"/*\" || path === \"*\") {\n continue;\n }\n all[1].forEach((list, i) => {\n list.forEach(([p, map]) => {\n if (p === path) {\n if (relocateMap[path]) {\n relocateMap[path][0][1] = {\n ...relocateMap[path][0][1],\n ...map\n };\n } else {\n relocateMap[path] = [[[], map]];\n }\n if (relocateMap[path][0][0].findIndex((j) => j === i) === -1) {\n relocateMap[path][0][0].push(i);\n }\n }\n });\n });\n for (const path2 in all[2]) {\n all[2][path2][0].forEach(([p]) => {\n if (p === path) {\n relocateMap[path] ||= [[[]]];\n const value = path2 === path ? \"\" : path2;\n if (relocateMap[path][0][0].findIndex((v) => v === value) === -1) {\n relocateMap[path][0][0].push(value);\n }\n }\n });\n }\n }\n for (let i = 0, len = all[1].length; i < len; i++) {\n all[1][i] = all[1][i] ? [] : 0;\n }\n for (const path in all[2]) {\n all[2][path][0] = [];\n }\n return [matchers, relocateMap];\n};\nvar serializeInitParams = ([matchers, relocateMap]) => {\n const matchersStr = JSON.stringify(\n matchers,\n (_, value) => value instanceof RegExp ? `##${value.toString()}##` : value\n ).replace(/\"##(.+?)##\"/g, (_, str) => str.replace(/\\\\\\\\/g, \"\\\\\"));\n const relocateMapStr = JSON.stringify(relocateMap);\n return `[${matchersStr},${relocateMapStr}]`;\n};\nexport {\n PreparedRegExpRouter,\n buildInitParams,\n serializeInitParams\n};\n", "// src/router/smart-router/index.ts\nimport { SmartRouter } from \"./router.js\";\nexport {\n SmartRouter\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/index.ts\nimport { TrieRouter } from \"./router.js\";\nexport {\n TrieRouter\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/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 hasChildren = (children) => {\n for (const _ in children) {\n return true;\n }\n return false;\n};\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 #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\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 }\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 const len = parts.length;\n let partOffsets = null;\n for (let i = 0; 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 this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n }\n this.#pushHandlerSets(handlerSets, 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 this.#pushHandlerSets(handlerSets, 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 if (matcher instanceof RegExp) {\n if (partOffsets === null) {\n partOffsets = new Array(len);\n let offset = path[0] === \"/\" ? 1 : 0;\n for (let p = 0; p < len; p++) {\n partOffsets[p] = offset;\n offset += parts[p].length + 1;\n }\n }\n const restPathString = path.substring(partOffsets[i]);\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n if (hasChildren(child.#children)) {\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 this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n if (child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n params,\n node.#params\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n const shifted = curNodesQueue.shift();\n curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\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", "export { verifyJwtSignedUrl } from \"@hot-updater/js\";\n\nimport type { RequestEnvContext as BaseRequestEnvContext } from \"@hot-updater/plugin-core\";\n\nimport {\n type CloudflareWorkerDatabaseEnv,\n d1WorkerDatabase,\n} from \"../cloudflareWorkerDatabase\";\nimport {\n type CloudflareWorkerStorageConfig,\n type CloudflareWorkerStorageEnv,\n r2WorkerStorage,\n} from \"../r2WorkerStorage\";\n\nexport type { CloudflareWorkerDatabaseEnv, CloudflareWorkerStorageEnv };\n\nexport interface CloudflareWorkerRuntimeEnv\n extends CloudflareWorkerDatabaseEnv, CloudflareWorkerStorageEnv {}\n\nexport type RequestEnvContext<TEnv = CloudflareWorkerRuntimeEnv> =\n BaseRequestEnvContext<TEnv>;\n\nexport const d1Database = <\n TContext extends RequestEnvContext<CloudflareWorkerRuntimeEnv> =\n RequestEnvContext<CloudflareWorkerRuntimeEnv>,\n>() => d1WorkerDatabase<TContext>();\n\nexport const r2Storage = <\n TContext extends RequestEnvContext<CloudflareWorkerRuntimeEnv> =\n RequestEnvContext<CloudflareWorkerRuntimeEnv>,\n>(\n config: CloudflareWorkerStorageConfig<TContext>,\n) => r2WorkerStorage<TContext>(config);\n", "import {\n DEFAULT_ROLLOUT_COHORT_COUNT,\n type SnakeCaseBundle,\n} from \"@hot-updater/core\";\nimport type {\n Bundle,\n DatabaseBundleQueryWhere,\n HotUpdaterContext,\n PaginationOptions,\n RequestEnvContext,\n} from \"@hot-updater/plugin-core\";\nimport {\n calculatePagination,\n createDatabasePlugin,\n createDatabasePluginGetUpdateInfo,\n} from \"@hot-updater/plugin-core\";\n\ntype D1Result<T> = {\n results?: T[];\n};\n\ntype D1PreparedStatement = {\n bind: (...values: unknown[]) => {\n all: <T>() => Promise<D1Result<T>>;\n first: <T>() => Promise<T | null>;\n run: () => Promise<unknown>;\n };\n};\n\ntype D1Like = {\n prepare: (sql: string) => D1PreparedStatement;\n};\n\nexport interface CloudflareWorkerDatabaseEnv {\n DB: D1Like;\n}\n\ninterface CloudflareWorkerDatabaseConfig<\n TContext extends RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n> {\n getDb: (context?: HotUpdaterContext<TContext>) => D1Like;\n}\n\ntype QueryConditions = DatabaseBundleQueryWhere;\n\ninterface BuildQueryResult {\n sql: string;\n params: unknown[];\n}\n\nfunction buildWhereClause(\n conditions: QueryConditions | undefined,\n): BuildQueryResult {\n if (!conditions) {\n return { sql: \"\", params: [] };\n }\n\n const clauses: string[] = [];\n const params: unknown[] = [];\n\n if (conditions.channel) {\n clauses.push(\"channel = ?\");\n params.push(conditions.channel);\n }\n\n if (conditions.platform) {\n clauses.push(\"platform = ?\");\n params.push(conditions.platform);\n }\n\n if (conditions.enabled !== undefined) {\n clauses.push(\"enabled = ?\");\n params.push(conditions.enabled ? 1 : 0);\n }\n\n if (conditions.id?.in) {\n if (conditions.id.in.length === 0) {\n clauses.push(\"1 = 0\");\n } else {\n clauses.push(`id IN (${conditions.id.in.map(() => \"?\").join(\", \")})`);\n params.push(...conditions.id.in);\n }\n }\n\n if (conditions.id?.eq) {\n clauses.push(\"id = ?\");\n params.push(conditions.id.eq);\n }\n\n if (conditions.id?.gt) {\n clauses.push(\"id > ?\");\n params.push(conditions.id.gt);\n }\n\n if (conditions.id?.gte) {\n clauses.push(\"id >= ?\");\n params.push(conditions.id.gte);\n }\n\n if (conditions.id?.lt) {\n clauses.push(\"id < ?\");\n params.push(conditions.id.lt);\n }\n\n if (conditions.id?.lte) {\n clauses.push(\"id <= ?\");\n params.push(conditions.id.lte);\n }\n\n if (conditions.targetAppVersionNotNull) {\n clauses.push(\"target_app_version IS NOT NULL\");\n }\n\n if (conditions.targetAppVersion !== undefined) {\n if (conditions.targetAppVersion === null) {\n clauses.push(\"target_app_version IS NULL\");\n } else {\n clauses.push(\"target_app_version = ?\");\n params.push(conditions.targetAppVersion);\n }\n }\n\n if (conditions.targetAppVersionIn) {\n if (conditions.targetAppVersionIn.length === 0) {\n clauses.push(\"1 = 0\");\n } else {\n clauses.push(\n `target_app_version IN (${conditions.targetAppVersionIn\n .map(() => \"?\")\n .join(\", \")})`,\n );\n params.push(...conditions.targetAppVersionIn);\n }\n }\n\n if (conditions.fingerprintHash !== undefined) {\n if (conditions.fingerprintHash === null) {\n clauses.push(\"fingerprint_hash IS NULL\");\n } else {\n clauses.push(\"fingerprint_hash = ?\");\n params.push(conditions.fingerprintHash);\n }\n }\n\n const whereClause =\n clauses.length > 0 ? ` WHERE ${clauses.join(\" AND \")}` : \"\";\n\n return { sql: whereClause, params };\n}\n\nfunction parseTargetCohorts(value: unknown): string[] | null {\n if (!value) return null;\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === \"string\");\n }\n if (typeof value === \"string\") {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (Array.isArray(parsed)) {\n return parsed.filter(\n (item): item is string => typeof item === \"string\",\n );\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction transformRowToBundle(row: SnakeCaseBundle): Bundle {\n return {\n id: row.id,\n channel: row.channel,\n enabled: Boolean(row.enabled),\n shouldForceUpdate: Boolean(row.should_force_update),\n fileHash: row.file_hash,\n gitCommitHash: row.git_commit_hash,\n message: row.message,\n platform: row.platform,\n targetAppVersion: row.target_app_version,\n storageUri: row.storage_uri,\n fingerprintHash: row.fingerprint_hash,\n metadata: row?.metadata ? JSON.parse(row.metadata as string) : {},\n rolloutCohortCount:\n (row.rollout_cohort_count as number | null) ??\n DEFAULT_ROLLOUT_COHORT_COUNT,\n targetCohorts: parseTargetCohorts(row.target_cohorts as unknown),\n };\n}\n\nconst resolveDbFromContext = (\n context?: RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n) => {\n const db = context?.env?.DB;\n\n if (!db) {\n throw new Error(\n \"d1WorkerDatabase requires env.DB in the hot updater context.\",\n );\n }\n\n return db;\n};\n\nexport const d1WorkerDatabase = <\n TContext extends RequestEnvContext<CloudflareWorkerDatabaseEnv> =\n RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n>() =>\n createDatabasePlugin<CloudflareWorkerDatabaseConfig<TContext>, TContext>({\n name: \"d1WorkerDatabase\",\n factory: (config) => {\n const queryAll = async <TRow>(\n sql: string,\n params: unknown[] = [],\n context?: HotUpdaterContext<TContext>,\n ): Promise<TRow[]> => {\n const result = await config\n .getDb(context)\n .prepare(sql)\n .bind(...params)\n .all<TRow>();\n return result.results ?? [];\n };\n\n const queryFirst = async <TRow>(\n sql: string,\n params: unknown[] = [],\n context?: HotUpdaterContext<TContext>,\n ): Promise<TRow | null> => {\n const result = await config\n .getDb(context)\n .prepare(sql)\n .bind(...params)\n .first<TRow>();\n return result ?? null;\n };\n\n const queryBundlesForUpdateInfo = async (\n conditions: QueryConditions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle[]> => {\n const { sql: whereClause, params } = buildWhereClause(conditions);\n const rows = await queryAll<SnakeCaseBundle>(\n `\n SELECT * FROM bundles\n ${whereClause}\n `,\n params,\n context,\n );\n\n return rows.map(transformRowToBundle);\n };\n\n const getTargetAppVersionsForUpdateInfo = async (\n {\n platform,\n channel,\n minBundleId,\n }: {\n platform: Bundle[\"platform\"];\n channel: string;\n minBundleId: string;\n },\n context?: HotUpdaterContext<TContext>,\n ): Promise<string[]> => {\n const rows = await queryAll<{ target_app_version: string }>(\n `\n SELECT target_app_version\n FROM bundles\n WHERE channel = ?\n AND platform = ?\n AND enabled = 1\n AND id >= ?\n AND target_app_version IS NOT NULL\n GROUP BY target_app_version\n `,\n [channel, platform, minBundleId],\n context,\n );\n\n return rows.map((row) => row.target_app_version);\n };\n\n return {\n getUpdateInfo: createDatabasePluginGetUpdateInfo({\n listTargetAppVersions: getTargetAppVersionsForUpdateInfo,\n getBundlesByTargetAppVersions(\n { platform, channel, minBundleId },\n targetAppVersions,\n context,\n ) {\n return queryBundlesForUpdateInfo(\n {\n enabled: true,\n platform,\n channel,\n id: {\n gte: minBundleId,\n },\n targetAppVersionIn: targetAppVersions,\n },\n context,\n );\n },\n getBundlesByFingerprint(\n { platform, channel, minBundleId, fingerprintHash },\n context,\n ) {\n return queryBundlesForUpdateInfo(\n {\n enabled: true,\n platform,\n channel,\n id: {\n gte: minBundleId,\n },\n fingerprintHash,\n },\n context,\n );\n },\n }),\n\n async getBundleById(bundleId, context) {\n const row = await queryFirst<SnakeCaseBundle>(\n \"SELECT * FROM bundles WHERE id = ? LIMIT 1\",\n [bundleId],\n context,\n );\n\n return row ? transformRowToBundle(row) : null;\n },\n\n async getBundles(options, context) {\n const { where, limit, orderBy } = options;\n const offset =\n ((\"offset\" in options ? options.offset : undefined) as\n | number\n | undefined) ?? 0;\n const { sql: whereClause, params } = buildWhereClause(where);\n const orderSql =\n orderBy?.direction === \"asc\"\n ? \"ORDER BY id ASC\"\n : \"ORDER BY id DESC\";\n\n const countRows = await queryAll<{ total: number }>(\n `SELECT COUNT(*) as total FROM bundles${whereClause}`,\n params,\n context,\n );\n const total = countRows[0]?.total ?? 0;\n\n const rows = await queryAll<SnakeCaseBundle>(\n `SELECT * FROM bundles${whereClause} ${orderSql} LIMIT ? OFFSET ?`,\n [...params, limit, offset],\n context,\n );\n\n const bundles = rows.map(transformRowToBundle);\n\n const paginationOptions: PaginationOptions = { limit, offset };\n return {\n data: bundles,\n pagination: calculatePagination(total, paginationOptions),\n };\n },\n\n async getChannels(context) {\n const rows = await queryAll<{ channel: string }>(\n \"SELECT channel FROM bundles GROUP BY channel\",\n [],\n context,\n );\n return rows.map((row) => row.channel);\n },\n\n async commitBundle({ changedSets }, context) {\n if (changedSets.length === 0) {\n return;\n }\n\n const db = config.getDb(context);\n\n for (const operation of changedSets) {\n if (operation.operation === \"delete\") {\n await db\n .prepare(\"DELETE FROM bundles WHERE id = ?\")\n .bind(operation.data.id)\n .run();\n continue;\n }\n\n const bundle = operation.data;\n await db\n .prepare(`\n INSERT OR REPLACE INTO bundles (\n id,\n channel,\n enabled,\n should_force_update,\n file_hash,\n git_commit_hash,\n message,\n platform,\n target_app_version,\n storage_uri,\n fingerprint_hash,\n metadata,\n rollout_cohort_count,\n target_cohorts\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .bind(\n bundle.id,\n bundle.channel,\n bundle.enabled ? 1 : 0,\n bundle.shouldForceUpdate ? 1 : 0,\n bundle.fileHash,\n bundle.gitCommitHash || null,\n bundle.message || null,\n bundle.platform,\n bundle.targetAppVersion,\n bundle.storageUri,\n bundle.fingerprintHash,\n JSON.stringify(bundle.metadata ?? {}),\n bundle.rolloutCohortCount ?? DEFAULT_ROLLOUT_COHORT_COUNT,\n bundle.targetCohorts\n ? JSON.stringify(bundle.targetCohorts)\n : null,\n )\n .run();\n }\n },\n };\n },\n })({\n getDb: resolveDbFromContext,\n });\n", "import { signToken } from \"@hot-updater/js\";\nimport type {\n HotUpdaterContext,\n RequestEnvContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\n\nexport interface CloudflareWorkerStorageEnv {\n JWT_SECRET: string;\n}\n\ntype ContextResolver<TContext, TValue> = (\n context?: HotUpdaterContext<TContext>,\n) => TValue | Promise<TValue>;\n\nexport interface CloudflareWorkerStorageConfig<\n TContext extends RequestEnvContext<CloudflareWorkerStorageEnv>,\n> {\n jwtSecret?: string | ContextResolver<TContext, string>;\n publicBaseUrl: string | ContextResolver<TContext, string>;\n}\n\nconst resolveContextValue = async <TContext, TValue>(\n value: TValue | ContextResolver<TContext, TValue>,\n context?: HotUpdaterContext<TContext>,\n) => {\n return typeof value === \"function\"\n ? await (value as ContextResolver<TContext, TValue>)(context)\n : value;\n};\n\nconst resolveJwtSecretFromContext = (\n context?: RequestEnvContext<CloudflareWorkerStorageEnv>,\n) => {\n const jwtSecret = context?.env?.JWT_SECRET;\n\n if (!jwtSecret) {\n throw new Error(\n \"r2WorkerStorage requires env.JWT_SECRET in the hot updater context.\",\n );\n }\n\n return jwtSecret;\n};\n\nexport const r2WorkerStorage = <\n TContext extends RequestEnvContext<CloudflareWorkerStorageEnv> =\n RequestEnvContext<CloudflareWorkerStorageEnv>,\n>(\n config: CloudflareWorkerStorageConfig<TContext>,\n) => {\n return (): StoragePlugin<TContext> => {\n return {\n name: \"r2WorkerStorage\",\n supportedProtocol: \"r2\",\n async upload() {\n throw new Error(\n \"r2WorkerStorage does not support upload() in the worker runtime.\",\n );\n },\n async delete() {\n throw new Error(\n \"r2WorkerStorage does not support delete() in the worker runtime.\",\n );\n },\n async getDownloadUrl(storageUri, context) {\n const storageUrl = new URL(storageUri);\n\n if (storageUrl.protocol !== \"r2:\") {\n throw new Error(\"Invalid R2 storage URI protocol\");\n }\n\n const key = `${storageUrl.host}${storageUrl.pathname}`;\n const [jwtSecret, publicBaseUrl] = await Promise.all([\n resolveContextValue(\n config.jwtSecret ?? resolveJwtSecretFromContext,\n context,\n ),\n resolveContextValue(config.publicBaseUrl, context),\n ]);\n const token = await signToken(key, jwtSecret);\n const url = new URL(publicBaseUrl);\n\n url.pathname = key;\n url.search = \"\";\n url.searchParams.set(\"token\", token);\n\n return {\n fileUrl: url.toString(),\n };\n },\n };\n };\n};\n"],
|
|
5
|
+
"sourcesContent": ["/* @__NO_SIDE_EFFECTS__ */\nexport 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__ */\nexport 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__ */\nexport function createNotImplementedError(name) {\n\treturn new Error(`[unenv] ${name} is not implemented yet!`);\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport 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__ */\nexport 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__ */\nexport 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 { IntervalHistogram, RecordableHistogram } from \"./internal/perf_hooks/histogram.mjs\";\nimport { performance, Performance, PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceObserverEntryList, PerformanceObserver, PerformanceResourceTiming } from \"./internal/perf_hooks/performance.mjs\";\nexport * from \"./internal/perf_hooks/performance.mjs\";\nimport { NODE_PERFORMANCE_GC_MAJOR, NODE_PERFORMANCE_GC_MINOR, NODE_PERFORMANCE_GC_INCREMENTAL, NODE_PERFORMANCE_GC_WEAKCB, NODE_PERFORMANCE_GC_FLAGS_NO, NODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED, NODE_PERFORMANCE_GC_FLAGS_FORCED, NODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING, NODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE, NODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY, NODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE, NODE_PERFORMANCE_ENTRY_TYPE_GC, NODE_PERFORMANCE_ENTRY_TYPE_HTTP, NODE_PERFORMANCE_ENTRY_TYPE_HTTP2, NODE_PERFORMANCE_ENTRY_TYPE_NET, NODE_PERFORMANCE_ENTRY_TYPE_DNS, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP, NODE_PERFORMANCE_MILESTONE_TIME_ORIGIN, NODE_PERFORMANCE_MILESTONE_ENVIRONMENT, NODE_PERFORMANCE_MILESTONE_NODE_START, NODE_PERFORMANCE_MILESTONE_V8_START, NODE_PERFORMANCE_MILESTONE_LOOP_START, NODE_PERFORMANCE_MILESTONE_LOOP_EXIT, NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE } from \"./internal/perf_hooks/constants.mjs\";\nexport const constants = {\n\tNODE_PERFORMANCE_GC_MAJOR,\n\tNODE_PERFORMANCE_GC_MINOR,\n\tNODE_PERFORMANCE_GC_INCREMENTAL,\n\tNODE_PERFORMANCE_GC_WEAKCB,\n\tNODE_PERFORMANCE_GC_FLAGS_NO,\n\tNODE_PERFORMANCE_GC_FLAGS_CONSTRUCT_RETAINED,\n\tNODE_PERFORMANCE_GC_FLAGS_FORCED,\n\tNODE_PERFORMANCE_GC_FLAGS_SYNCHRONOUS_PHANTOM_PROCESSING,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_AVAILABLE_GARBAGE,\n\tNODE_PERFORMANCE_GC_FLAGS_ALL_EXTERNAL_MEMORY,\n\tNODE_PERFORMANCE_GC_FLAGS_SCHEDULE_IDLE,\n\tNODE_PERFORMANCE_ENTRY_TYPE_GC,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP,\n\tNODE_PERFORMANCE_ENTRY_TYPE_HTTP2,\n\tNODE_PERFORMANCE_ENTRY_TYPE_NET,\n\tNODE_PERFORMANCE_ENTRY_TYPE_DNS,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN_TIMESTAMP,\n\tNODE_PERFORMANCE_MILESTONE_TIME_ORIGIN,\n\tNODE_PERFORMANCE_MILESTONE_ENVIRONMENT,\n\tNODE_PERFORMANCE_MILESTONE_NODE_START,\n\tNODE_PERFORMANCE_MILESTONE_V8_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_START,\n\tNODE_PERFORMANCE_MILESTONE_LOOP_EXIT,\n\tNODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE\n};\nexport const monitorEventLoopDelay = function(_options) {\n\treturn new IntervalHistogram();\n};\nexport const createHistogram = function(_options) {\n\treturn new RecordableHistogram();\n};\nexport default {\n\tPerformance,\n\tPerformanceMark,\n\tPerformanceEntry,\n\tPerformanceMeasure,\n\tPerformanceObserverEntryList,\n\tPerformanceObserver,\n\tPerformanceResourceTiming,\n\tperformance,\n\tconstants,\n\tcreateHistogram,\n\tmonitorEventLoopDelay\n};\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", "export default Object.assign(() => {}, { __unenv__: true });\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", "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", "export class WriteStream {\n\tfd;\n\tcolumns = 80;\n\trows = 24;\n\tisTTY = false;\n\tconstructor(fd) {\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\twrite(str, encoding, cb) {\n\t\tif (str instanceof Uint8Array) {\n\t\t\tstr = new TextDecoder().decode(str);\n\t\t}\n\t\ttry {\n\t\t\tconsole.log(str);\n\t\t} catch {}\n\t\tcb && typeof cb === \"function\" && cb();\n\t\treturn false;\n\t}\n}\n", "export class ReadStream {\n\tfd;\n\tisRaw = false;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tsetRawMode(mode) {\n\t\tthis.isRaw = mode;\n\t\treturn this;\n\t}\n}\n", "import { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport { ReadStream } from \"./internal/tty/read-stream.mjs\";\nexport { WriteStream } from \"./internal/tty/write-stream.mjs\";\nexport const isatty = function() {\n\treturn false;\n};\nexport default {\n\tReadStream: WriteStream,\n\tWriteStream,\n\tisatty\n};\n", "export const NODE_VERSION = \"22.14.0\";\n", "import { EventEmitter } from \"node:events\";\nimport { ReadStream, WriteStream } from \"node:tty\";\nimport { notImplemented, createNotImplementedError } from \"../../../_internal/utils.mjs\";\nimport { NODE_VERSION } from \"./node-version.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 `v${NODE_VERSION}`;\n\t}\n\tget versions() {\n\t\treturn { node: NODE_VERSION };\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 { 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;", "'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "import { createHotUpdater } from \"@hot-updater/server/runtime\";\nimport { Hono } from \"hono\";\n\nimport {\n d1Database,\n type RequestEnvContext,\n r2Storage,\n verifyJwtSignedUrl,\n} from \"../../src/worker\";\n\nexport type CloudflareWorkerEnv = {\n DB: {\n prepare: D1Database[\"prepare\"];\n };\n BUCKET: R2Bucket;\n JWT_SECRET: string;\n};\n\nexport const HOT_UPDATER_BASE_PATH = \"/api/check-update\";\n\nconst resolveRequestOrigin = (context?: RequestEnvContext) => {\n const request = context?.request;\n\n if (!request) {\n throw new Error(\n \"r2WorkerStorage requires a request to resolve publicBaseUrl.\",\n );\n }\n\n return new URL(request.url).origin;\n};\n\nconst hotUpdater = createHotUpdater({\n database: d1Database(),\n storages: [\n r2Storage({\n publicBaseUrl: resolveRequestOrigin,\n }),\n ],\n basePath: HOT_UPDATER_BASE_PATH,\n routes: {\n updateCheck: true,\n version: true,\n bundles: false,\n },\n});\n\nconst app = new Hono<{ Bindings: CloudflareWorkerEnv }>();\n\napp.mount(\n HOT_UPDATER_BASE_PATH,\n (request: Request, env: CloudflareWorkerEnv) => {\n return hotUpdater.handler(request, {\n request,\n env,\n });\n },\n {\n optionHandler: (c) => [c.env],\n },\n);\n\napp.get(\"*\", async (c) => {\n const result = await verifyJwtSignedUrl({\n path: c.req.path,\n token: c.req.query(\"token\"),\n jwtSecret: c.env.JWT_SECRET,\n handler: async (storageUri) => {\n const [, ...key] = storageUri.split(\"/\");\n const object = await c.env.BUCKET.get(key.join(\"/\"));\n if (!object) {\n return null;\n }\n\n return {\n body: object.body,\n contentType: object.httpMetadata?.contentType,\n };\n },\n });\n\n if (result.status !== 200) {\n return c.json({ error: result.error }, result.status);\n }\n\n return c.body(result.responseBody, 200, result.responseHeaders);\n});\n\nexport default app;\n", "import type {\n HotUpdaterContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\n\nimport { createPluginDatabaseCore } from \"./db/pluginCore\";\nimport {\n type DatabaseAdapter,\n type DatabaseAPI,\n isDatabasePlugin,\n isDatabasePluginFactory,\n type StoragePluginFactory,\n} from \"./db/types\";\nimport { createHandler, type HandlerRoutes } from \"./handler\";\nimport { normalizeBasePath } from \"./route\";\n\nexport type HotUpdaterAPI<TContext = unknown> = DatabaseAPI<TContext> & {\n basePath: string;\n handler: (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<Response>;\n adapterName: string;\n};\n\nexport interface CreateHotUpdaterOptions<TContext = unknown> {\n database: DatabaseAdapter<TContext>;\n storages?: (StoragePlugin<TContext> | StoragePluginFactory<TContext>)[];\n storagePlugins?: (StoragePlugin<TContext> | StoragePluginFactory<TContext>)[];\n basePath?: string;\n cwd?: string;\n routes?: HandlerRoutes;\n}\n\nexport function createHotUpdater<TContext = unknown>(\n options: CreateHotUpdaterOptions<TContext>,\n): HotUpdaterAPI<TContext> {\n const database = options.database;\n const basePath = normalizeBasePath(options.basePath ?? \"/api\");\n const storagePlugins = (options.storages ?? options.storagePlugins ?? []).map(\n (plugin) => (typeof plugin === \"function\" ? plugin() : plugin),\n );\n\n const resolveStoragePluginUrl = async (\n storageUri: string | null,\n context?: HotUpdaterContext<TContext>,\n ): Promise<string | null> => {\n if (!storageUri) {\n return null;\n }\n\n const url = new URL(storageUri);\n const protocol = url.protocol.replace(\":\", \"\");\n\n if (protocol === \"http\" || protocol === \"https\") {\n return storageUri;\n }\n\n const plugin = storagePlugins.find(\n (item) => item.supportedProtocol === protocol,\n );\n\n if (!plugin) {\n throw new Error(`No storage plugin for protocol: ${protocol}`);\n }\n\n const { fileUrl } = await plugin.getDownloadUrl(storageUri, context);\n if (!fileUrl) {\n throw new Error(\"Storage plugin returned empty fileUrl\");\n }\n\n return fileUrl;\n };\n\n if (!isDatabasePluginFactory(database) && !isDatabasePlugin(database)) {\n throw new Error(\n \"@hot-updater/server/runtime only supports database plugins.\",\n );\n }\n\n const plugin = isDatabasePluginFactory(database) ? database() : database;\n const core = createPluginDatabaseCore<TContext>(\n () => plugin,\n resolveStoragePluginUrl,\n isDatabasePluginFactory(database)\n ? {\n createMutationPlugin: () => database(),\n }\n : undefined,\n );\n\n const api = {\n ...core.api,\n handler: createHandler(core.api, {\n basePath,\n routes: options.routes,\n }),\n adapterName: core.adapterName,\n };\n\n // Some framework adapters strip the mounted base path or pass extra\n // bindings/execution context arguments. Ignore those extras here so the\n // handler can still be mounted directly as a plain Request handler.\n const handler: HotUpdaterAPI<TContext>[\"handler\"] = (\n request,\n context,\n ...extraArgs: unknown[]\n ) => {\n if (extraArgs.length > 0) {\n return api.handler(request);\n }\n\n return api.handler(request, context);\n };\n\n return {\n ...api,\n basePath,\n handler,\n };\n}\n\nexport { createHandler };\nexport { HOT_UPDATER_SERVER_VERSION } from \"./version\";\n", "import type {\n AppUpdateInfo,\n AppVersionGetBundlesArgs,\n Bundle,\n FingerprintGetBundlesArgs,\n GetBundlesArgs,\n Platform,\n UpdateInfo,\n} from \"@hot-updater/core\";\nimport { isCohortEligibleForUpdate, NIL_UUID } from \"@hot-updater/core\";\nimport {\n type DatabaseBundleQueryOptions,\n type DatabaseBundleQueryOrder,\n type DatabaseBundleQueryWhere,\n type DatabasePlugin,\n type HotUpdaterContext,\n semverSatisfies,\n} from \"@hot-updater/plugin-core\";\n\nimport type { DatabaseAPI } from \"./types\";\n\nconst PAGE_SIZE = 100;\nconst DESC_ORDER = { field: \"id\", direction: \"desc\" } as const;\n\nconst bundleMatchesQueryWhere = (\n bundle: Bundle,\n where: DatabaseBundleQueryWhere | undefined,\n) => {\n if (!where) return true;\n if (where.channel !== undefined && bundle.channel !== where.channel)\n return false;\n if (where.platform !== undefined && bundle.platform !== where.platform)\n return false;\n if (where.enabled !== undefined && bundle.enabled !== where.enabled)\n return false;\n if (where.id?.eq !== undefined && bundle.id !== where.id.eq) return false;\n if (where.id?.gt !== undefined && bundle.id.localeCompare(where.id.gt) <= 0)\n return false;\n if (where.id?.gte !== undefined && bundle.id.localeCompare(where.id.gte) < 0)\n return false;\n if (where.id?.lt !== undefined && bundle.id.localeCompare(where.id.lt) >= 0)\n return false;\n if (where.id?.lte !== undefined && bundle.id.localeCompare(where.id.lte) > 0)\n return false;\n if (where.id?.in && !where.id.in.includes(bundle.id)) return false;\n if (where.targetAppVersionNotNull && bundle.targetAppVersion === null) {\n return false;\n }\n if (\n where.targetAppVersion !== undefined &&\n bundle.targetAppVersion !== where.targetAppVersion\n ) {\n return false;\n }\n if (\n where.targetAppVersionIn &&\n !where.targetAppVersionIn.includes(bundle.targetAppVersion ?? \"\")\n ) {\n return false;\n }\n if (\n where.fingerprintHash !== undefined &&\n bundle.fingerprintHash !== where.fingerprintHash\n ) {\n return false;\n }\n return true;\n};\n\nconst sortBundles = (\n bundles: Bundle[],\n orderBy: DatabaseBundleQueryOrder | undefined,\n) => {\n const direction = orderBy?.direction ?? \"desc\";\n return bundles.slice().sort((a, b) => {\n const result = a.id.localeCompare(b.id);\n return direction === \"asc\" ? result : -result;\n });\n};\n\nconst makeResponse = (\n bundle: Bundle,\n status: \"UPDATE\" | \"ROLLBACK\",\n): UpdateInfo => ({\n id: bundle.id,\n message: bundle.message,\n shouldForceUpdate: status === \"ROLLBACK\" ? true : bundle.shouldForceUpdate,\n status,\n storageUri: bundle.storageUri,\n fileHash: bundle.fileHash,\n});\n\nconst INIT_BUNDLE_ROLLBACK_UPDATE_INFO: UpdateInfo = {\n message: null,\n id: NIL_UUID,\n shouldForceUpdate: true,\n status: \"ROLLBACK\",\n storageUri: null,\n fileHash: null,\n};\n\nexport function createPluginDatabaseCore<TContext = unknown>(\n getPlugin: () => DatabasePlugin<TContext>,\n resolveFileUrl: (\n storageUri: string | null,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<string | null>,\n options?: {\n createMutationPlugin?: () => DatabasePlugin<TContext>;\n cleanupMutationPlugin?: (\n plugin: DatabasePlugin<TContext>,\n ) => Promise<void> | void;\n },\n): {\n api: DatabaseAPI<TContext>;\n adapterName: string;\n createMigrator: () => never;\n generateSchema: () => never;\n} {\n const runWithMutationPlugin = async <T>(\n operation: (plugin: DatabasePlugin<TContext>) => Promise<T>,\n ): Promise<T> => {\n const plugin = options?.createMutationPlugin?.() ?? getPlugin();\n\n try {\n return await operation(plugin);\n } finally {\n if (options?.createMutationPlugin) {\n await options.cleanupMutationPlugin?.(plugin);\n }\n }\n };\n\n const getSortedBundlePage = async (\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Awaited<ReturnType<DatabasePlugin<TContext>[\"getBundles\"]>>> => {\n const result = await getPlugin().getBundles(\n {\n ...options,\n orderBy: options.orderBy ?? DESC_ORDER,\n },\n context,\n );\n\n return {\n ...result,\n data: sortBundles(result.data, options.orderBy ?? DESC_ORDER),\n };\n };\n\n const isEligibleForUpdate = (\n bundle: Bundle,\n cohort: string | undefined,\n ): boolean => {\n return isCohortEligibleForUpdate(\n bundle.id,\n cohort,\n bundle.rolloutCohortCount,\n bundle.targetCohorts,\n );\n };\n\n const findUpdateInfoByScanning = async ({\n args,\n queryWhere,\n isCandidate,\n context,\n }: {\n args: AppVersionGetBundlesArgs | FingerprintGetBundlesArgs;\n queryWhere: DatabaseBundleQueryWhere;\n isCandidate: (bundle: Bundle) => boolean;\n context?: HotUpdaterContext<TContext>;\n }): Promise<UpdateInfo | null> => {\n let after: string | undefined;\n\n while (true) {\n const { data, pagination } = await getSortedBundlePage(\n {\n where: queryWhere,\n limit: PAGE_SIZE,\n orderBy: DESC_ORDER,\n ...(after\n ? {\n cursor: {\n after,\n },\n }\n : {}),\n },\n context,\n );\n\n for (const bundle of data) {\n if (\n !bundleMatchesQueryWhere(bundle, queryWhere) ||\n !isCandidate(bundle)\n ) {\n continue;\n }\n\n if (args.bundleId === NIL_UUID) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return makeResponse(bundle, \"UPDATE\");\n }\n continue;\n }\n\n const compareResult = bundle.id.localeCompare(args.bundleId);\n\n if (compareResult > 0) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return makeResponse(bundle, \"UPDATE\");\n }\n continue;\n }\n\n if (compareResult === 0) {\n if (isEligibleForUpdate(bundle, args.cohort)) {\n return null;\n }\n continue;\n }\n\n return makeResponse(bundle, \"ROLLBACK\");\n }\n\n if (!pagination.hasNextPage) {\n break;\n }\n\n after = data.at(-1)?.id;\n if (!after) {\n break;\n }\n }\n\n if (args.bundleId === NIL_UUID) {\n return null;\n }\n\n if (\n args.minBundleId &&\n args.bundleId.localeCompare(args.minBundleId) <= 0\n ) {\n return null;\n }\n\n return INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n };\n\n const getBaseWhere = ({\n platform,\n channel,\n minBundleId,\n }: {\n platform: Platform;\n channel: string;\n minBundleId: string;\n }): DatabaseBundleQueryWhere => ({\n platform,\n channel,\n enabled: true,\n id: {\n gte: minBundleId,\n },\n });\n\n const api: DatabaseAPI<TContext> = {\n async getBundleById(\n id: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle | null> {\n return getPlugin().getBundleById(id, context);\n },\n\n async getUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<UpdateInfo | null> {\n const plugin = getPlugin();\n const directGetUpdateInfo = plugin.getUpdateInfo;\n if (directGetUpdateInfo) {\n return context === undefined\n ? await directGetUpdateInfo(args)\n : await directGetUpdateInfo(args, context);\n }\n\n const channel = args.channel ?? \"production\";\n const minBundleId = args.minBundleId ?? NIL_UUID;\n const baseWhere = getBaseWhere({\n platform: args.platform,\n channel,\n minBundleId,\n });\n\n if (args._updateStrategy === \"fingerprint\") {\n return findUpdateInfoByScanning({\n args,\n queryWhere: {\n ...baseWhere,\n fingerprintHash: args.fingerprintHash,\n },\n context,\n isCandidate: (bundle) => {\n return (\n bundle.enabled &&\n bundle.platform === args.platform &&\n bundle.channel === channel &&\n bundle.id.localeCompare(minBundleId) >= 0 &&\n bundle.fingerprintHash === args.fingerprintHash\n );\n },\n });\n }\n\n return findUpdateInfoByScanning({\n args,\n queryWhere: {\n ...baseWhere,\n },\n context,\n isCandidate: (bundle) => {\n return (\n bundle.enabled &&\n bundle.platform === args.platform &&\n bundle.channel === channel &&\n bundle.id.localeCompare(minBundleId) >= 0 &&\n !!bundle.targetAppVersion &&\n semverSatisfies(bundle.targetAppVersion, args.appVersion)\n );\n },\n });\n },\n\n async getAppUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<AppUpdateInfo | null> {\n const info = await this.getUpdateInfo(args, context);\n if (!info) {\n return null;\n }\n const { storageUri, ...rest } = info as UpdateInfo & {\n storageUri: string | null;\n };\n const fileUrl = await resolveFileUrl(storageUri ?? null, context);\n return { ...rest, fileUrl };\n },\n\n async getChannels(\n context?: HotUpdaterContext<TContext>,\n ): Promise<string[]> {\n return getPlugin().getChannels(context);\n },\n\n async getBundles(options, context?: HotUpdaterContext<TContext>) {\n return getPlugin().getBundles(options, context);\n },\n\n async insertBundle(\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n await plugin.appendBundle(bundle, context);\n await plugin.commitBundle(context);\n });\n },\n\n async updateBundleById(\n bundleId: string,\n newBundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n await plugin.updateBundle(bundleId, newBundle, context);\n await plugin.commitBundle(context);\n });\n },\n\n async deleteBundleById(\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void> {\n await runWithMutationPlugin(async (plugin) => {\n const bundle = await plugin.getBundleById(bundleId, context);\n if (!bundle) {\n return;\n }\n await plugin.deleteBundle(bundle, context);\n await plugin.commitBundle(context);\n });\n },\n };\n\n return {\n api,\n adapterName: getPlugin().name,\n createMigrator: () => {\n throw new Error(\n \"createMigrator is only available for Kysely/Prisma/Drizzle database adapters.\",\n );\n },\n generateSchema: () => {\n throw new Error(\n \"generateSchema is only available for Kysely/Prisma/Drizzle database adapters.\",\n );\n },\n };\n}\n", "//#region src/rollout.ts\nconst NUMERIC_COHORT_SIZE = 1e3;\nconst DEFAULT_ROLLOUT_COHORT_COUNT = NUMERIC_COHORT_SIZE;\nconst MAX_COHORT_LENGTH = 64;\nconst INVALID_COHORT_ERROR_MESSAGE = `Invalid cohort. Use 1-1000 or a lowercase slug without spaces, up to 64 characters.`;\nconst CUSTOM_COHORT_PATTERN = /^[a-z0-9-]+$/;\nfunction parseNumericCohortValue(cohort) {\n\tif (!/^\\d+$/.test(cohort)) return null;\n\tconst parsed = Number.parseInt(cohort, 10);\n\tif (Number.isNaN(parsed) || parsed < 1 || parsed > 1e3) return null;\n\treturn parsed;\n}\nfunction positiveMod(value, modulus) {\n\treturn (value % modulus + modulus) % modulus;\n}\nfunction hashString(value) {\n\tlet hash = 0;\n\tfor (let i = 0; i < value.length; i++) {\n\t\tconst char = value.charCodeAt(i);\n\t\thash = (hash << 5) - hash + char;\n\t\thash |= 0;\n\t}\n\treturn hash;\n}\nfunction gcd(a, b) {\n\tlet x = Math.abs(a);\n\tlet y = Math.abs(b);\n\twhile (y !== 0) {\n\t\tconst next = x % y;\n\t\tx = y;\n\t\ty = next;\n\t}\n\treturn x;\n}\nfunction modularInverse(value, modulus) {\n\tlet t = 0;\n\tlet newT = 1;\n\tlet r = modulus;\n\tlet newR = positiveMod(value, modulus);\n\twhile (newR !== 0) {\n\t\tconst quotient = Math.floor(r / newR);\n\t\t[t, newT] = [newT, t - quotient * newT];\n\t\t[r, newR] = [newR, r - quotient * newR];\n\t}\n\tif (r > 1) throw new Error(`No modular inverse for ${value} mod ${modulus}`);\n\treturn positiveMod(t, modulus);\n}\nfunction getRolloutShuffleParameters(bundleId) {\n\tlet multiplier = positiveMod(hashString(`${bundleId}:multiplier`), 997);\n\tif (multiplier === 0) multiplier = 1;\n\twhile (gcd(multiplier, NUMERIC_COHORT_SIZE) !== 1) {\n\t\tmultiplier = positiveMod(multiplier + 1, NUMERIC_COHORT_SIZE);\n\t\tif (multiplier === 0) multiplier = 1;\n\t}\n\tconst offset = positiveMod(hashString(`${bundleId}:offset`), NUMERIC_COHORT_SIZE);\n\treturn {\n\t\tmultiplier,\n\t\toffset,\n\t\tinverseMultiplier: modularInverse(multiplier, NUMERIC_COHORT_SIZE)\n\t};\n}\nfunction normalizeRolloutCohortCount(rolloutCohortCount) {\n\tif (rolloutCohortCount === null || rolloutCohortCount === void 0) return DEFAULT_ROLLOUT_COHORT_COUNT;\n\tif (rolloutCohortCount <= 0) return 0;\n\tif (rolloutCohortCount >= 1e3) return NUMERIC_COHORT_SIZE;\n\treturn Math.floor(rolloutCohortCount);\n}\nfunction normalizeCohortValue(cohort) {\n\tconst normalized = cohort.trim().toLowerCase();\n\tconst numericCohort = parseNumericCohortValue(normalized);\n\tif (numericCohort !== null) return String(numericCohort);\n\treturn normalized;\n}\nfunction getNumericCohortValue(cohort) {\n\treturn parseNumericCohortValue(normalizeCohortValue(cohort));\n}\nfunction isNumericCohort(cohort) {\n\treturn getNumericCohortValue(cohort) !== null;\n}\nfunction isCustomCohort(cohort) {\n\tconst normalized = normalizeCohortValue(cohort);\n\treturn normalized.length > 0 && normalized.length <= 64 && !/^\\d+$/.test(normalized) && CUSTOM_COHORT_PATTERN.test(normalized);\n}\nfunction isValidCohort(cohort) {\n\tconst normalized = normalizeCohortValue(cohort);\n\treturn isNumericCohort(normalized) || isCustomCohort(normalized);\n}\nfunction getDefaultNumericCohort(identifier) {\n\tconst cohortValue = positiveMod(hashString(identifier), NUMERIC_COHORT_SIZE) + 1;\n\treturn String(cohortValue);\n}\nfunction getNumericCohortRolloutPosition(bundleId, cohortValue) {\n\tif (cohortValue < 1 || cohortValue > 1e3) throw new Error(`Invalid numeric cohort: ${cohortValue}`);\n\tconst { offset, inverseMultiplier } = getRolloutShuffleParameters(bundleId);\n\treturn positiveMod(inverseMultiplier * (cohortValue - 1 - offset), NUMERIC_COHORT_SIZE);\n}\nfunction getRolledOutNumericCohorts(bundleId, rolloutCohortCount) {\n\tconst normalizedRolloutCount = normalizeRolloutCohortCount(rolloutCohortCount);\n\tif (normalizedRolloutCount <= 0) return [];\n\treturn Array.from({ length: NUMERIC_COHORT_SIZE }, (_, index) => index + 1).filter((cohortValue) => {\n\t\tif (normalizedRolloutCount >= 1e3) return true;\n\t\treturn getNumericCohortRolloutPosition(bundleId, cohortValue) < normalizedRolloutCount;\n\t});\n}\nfunction isCohortEligibleForUpdate(bundleId, cohort, rolloutCohortCount, targetCohorts) {\n\tconst normalizedCohort = cohort === null || cohort === void 0 ? void 0 : normalizeCohortValue(cohort);\n\tconst normalizedTargetCohorts = targetCohorts?.map((targetCohort) => normalizeCohortValue(targetCohort)) ?? [];\n\tif (normalizedCohort !== void 0 && normalizedTargetCohorts.includes(normalizedCohort)) return true;\n\tconst normalizedRolloutCount = normalizeRolloutCohortCount(rolloutCohortCount);\n\tif (normalizedRolloutCount <= 0) return false;\n\tif (normalizedCohort === void 0) return normalizedRolloutCount >= NUMERIC_COHORT_SIZE;\n\tconst numericCohort = getNumericCohortValue(normalizedCohort);\n\tif (numericCohort === null) return false;\n\tif (normalizedRolloutCount >= 1e3) return true;\n\treturn getNumericCohortRolloutPosition(bundleId, numericCohort) < normalizedRolloutCount;\n}\n//#endregion\n//#region src/uuid.ts\nconst NIL_UUID = \"00000000-0000-0000-0000-000000000000\";\n//#endregion\nexport { DEFAULT_ROLLOUT_COHORT_COUNT, INVALID_COHORT_ERROR_MESSAGE, MAX_COHORT_LENGTH, NIL_UUID, NUMERIC_COHORT_SIZE, getDefaultNumericCohort, getNumericCohortRolloutPosition, getNumericCohortValue, getRolledOutNumericCohorts, isCohortEligibleForUpdate, isCustomCohort, isNumericCohort, isValidCohort, normalizeCohortValue, normalizeRolloutCohortCount };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { detectCompressionFormat, getCompressionMimeType, getContentType } from \"./compressionFormat.mjs\";\nimport { createDatabasePlugin } from \"./createDatabasePlugin.mjs\";\nimport { semverSatisfies } from \"./semverSatisfies.mjs\";\nimport { filterCompatibleAppVersions } from \"./filterCompatibleAppVersions.mjs\";\nimport { bundleIdMatchesFilter, bundleMatchesQueryWhere, sortBundles } from \"./queryBundles.mjs\";\nimport { paginateBundles } from \"./paginateBundles.mjs\";\nimport { createBlobDatabasePlugin } from \"./createBlobDatabasePlugin.mjs\";\nimport { createDatabasePluginGetUpdateInfo } from \"./createDatabasePluginGetUpdateInfo.mjs\";\nimport { createStorageKeyBuilder } from \"./createStorageKeyBuilder.mjs\";\nimport { createStoragePlugin } from \"./createStoragePlugin.mjs\";\nimport { generateMinBundleId } from \"./generateMinBundleId.mjs\";\nimport { parseStorageUri } from \"./parseStorageUri.mjs\";\nimport { supportedIosPlatforms } from \"./types/index.mjs\";\nexport { bundleIdMatchesFilter, bundleMatchesQueryWhere, calculatePagination, createBlobDatabasePlugin, createDatabasePlugin, createDatabasePluginGetUpdateInfo, createStorageKeyBuilder, createStoragePlugin, detectCompressionFormat, filterCompatibleAppVersions, generateMinBundleId, getCompressionMimeType, getContentType, paginateBundles, parseStorageUri, semverSatisfies, sortBundles, supportedIosPlatforms };\n", "//#region src/calculatePagination.ts\n/**\n* Calculate pagination information based on total count, limit, and offset\n*/\nfunction calculatePagination(total, options) {\n\tconst { limit, offset } = options;\n\tif (total === 0) return {\n\t\ttotal: 0,\n\t\thasNextPage: false,\n\t\thasPreviousPage: false,\n\t\tcurrentPage: 1,\n\t\ttotalPages: 0\n\t};\n\tconst currentPage = Math.floor(offset / limit) + 1;\n\tconst totalPages = Math.ceil(total / limit);\n\treturn {\n\t\ttotal,\n\t\thasNextPage: offset + limit < total,\n\t\thasPreviousPage: offset > 0,\n\t\tcurrentPage,\n\t\ttotalPages\n\t};\n}\n//#endregion\nexport { calculatePagination };\n", "import { calculatePagination } from \"./calculatePagination.mjs\";\nimport { mergeWith } from \"es-toolkit\";\n//#region src/createDatabasePlugin.ts\nconst REPLACE_ON_UPDATE_KEYS = [\"targetCohorts\"];\nconst DEFAULT_DESC_ORDER = {\n\tfield: \"id\",\n\tdirection: \"desc\"\n};\nfunction normalizePage(value) {\n\tif (!Number.isInteger(value) || value === void 0 || value < 1) return;\n\treturn value;\n}\nfunction mergeBundleUpdate(baseBundle, patch) {\n\treturn mergeWith(baseBundle, patch, (_targetValue, sourceValue, key) => {\n\t\tif (REPLACE_ON_UPDATE_KEYS.includes(key)) return sourceValue;\n\t});\n}\nfunction mergeIdFilter(base, patch) {\n\treturn {\n\t\t...base,\n\t\t...patch\n\t};\n}\nfunction mergeWhereWithIdFilter(where, idFilter) {\n\treturn {\n\t\t...where,\n\t\tid: mergeIdFilter(where?.id, idFilter)\n\t};\n}\nfunction buildCursorPageQuery(where, cursor, orderBy) {\n\tconst direction = orderBy.direction;\n\tif (cursor.after) return {\n\t\treverseData: false,\n\t\twhere: mergeWhereWithIdFilter(where, { [direction === \"desc\" ? \"lt\" : \"gt\"]: cursor.after }),\n\t\torderBy\n\t};\n\tif (cursor.before) return {\n\t\treverseData: true,\n\t\twhere: mergeWhereWithIdFilter(where, { [direction === \"desc\" ? \"gt\" : \"lt\"]: cursor.before }),\n\t\torderBy: {\n\t\t\tfield: orderBy.field,\n\t\t\tdirection: direction === \"desc\" ? \"asc\" : \"desc\"\n\t\t}\n\t};\n\treturn {\n\t\treverseData: false,\n\t\twhere: where ?? {},\n\t\torderBy\n\t};\n}\nfunction buildCountBeforeWhere(where, firstBundleId, orderBy) {\n\treturn mergeWhereWithIdFilter(where, { [orderBy.direction === \"desc\" ? \"gt\" : \"lt\"]: firstBundleId });\n}\nfunction createPaginatedResult(total, limit, startIndex, data) {\n\tconst pagination = calculatePagination(total, {\n\t\tlimit,\n\t\toffset: startIndex\n\t});\n\tconst nextCursor = data.length > 0 && startIndex + data.length < total ? data.at(-1)?.id : void 0;\n\tconst previousCursor = data.length > 0 && startIndex > 0 ? data[0]?.id : void 0;\n\treturn {\n\t\tdata,\n\t\tpagination: {\n\t\t\t...pagination,\n\t\t\t...nextCursor ? { nextCursor } : {},\n\t\t\t...previousCursor ? { previousCursor } : {}\n\t\t}\n\t};\n}\n/**\n* Creates a database plugin with lazy initialization and automatic hook execution.\n*\n* This factory function abstracts the double currying pattern used by all database plugins,\n* ensuring consistent lazy initialization behavior across different database providers.\n* Hooks are automatically executed at appropriate times without requiring manual invocation.\n*\n* @param options - Configuration options for the database plugin\n* @returns A double-curried function that lazily initializes the database plugin\n*\n* @example\n* ```typescript\n* export const postgres = createDatabasePlugin<PostgresConfig>({\n* name: \"postgres\",\n* factory: (config) => {\n* const db = new Kysely(config);\n* return {\n* async getBundleById(bundleId) { ... },\n* async getBundles(options) { ... },\n* async getChannels() { ... },\n* async commitBundle({ changedSets }) { ... }\n* };\n* }\n* });\n* ```\n*/\nfunction createDatabasePlugin(options) {\n\treturn (config, hooks) => {\n\t\tlet cachedMethods = null;\n\t\tconst getMethods = () => {\n\t\t\tif (!cachedMethods) cachedMethods = options.factory(config);\n\t\t\treturn cachedMethods;\n\t\t};\n\t\treturn () => {\n\t\t\tconst changedMap = /* @__PURE__ */ new Map();\n\t\t\tconst markChanged = (operation, data) => {\n\t\t\t\tchangedMap.set(data.id, {\n\t\t\t\t\toperation,\n\t\t\t\t\tdata\n\t\t\t\t});\n\t\t\t};\n\t\t\tconst runGetBundles = async (options, context) => {\n\t\t\t\tif (context === void 0) return getMethods().getBundles(options);\n\t\t\t\treturn getMethods().getBundles(options, context);\n\t\t\t};\n\t\t\tconst getBundlesWithLegacyCursorFallback = async (options, context) => {\n\t\t\t\tconst orderBy = options.orderBy ?? DEFAULT_DESC_ORDER;\n\t\t\t\tconst baseWhere = options.where;\n\t\t\t\tconst total = (await runGetBundles({\n\t\t\t\t\twhere: baseWhere,\n\t\t\t\t\tlimit: 1,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy\n\t\t\t\t}, context)).pagination.total;\n\t\t\t\tif (!options.cursor?.after && !options.cursor?.before) {\n\t\t\t\t\tconst firstPage = await runGetBundles({\n\t\t\t\t\t\twhere: baseWhere,\n\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\toffset: 0,\n\t\t\t\t\t\torderBy\n\t\t\t\t\t}, context);\n\t\t\t\t\treturn createPaginatedResult(total, options.limit, 0, firstPage.data);\n\t\t\t\t}\n\t\t\t\tconst { where, orderBy: queryOrderBy, reverseData } = buildCursorPageQuery(baseWhere, options.cursor, orderBy);\n\t\t\t\tconst cursorPage = await runGetBundles({\n\t\t\t\t\twhere,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy: queryOrderBy\n\t\t\t\t}, context);\n\t\t\t\tconst data = reverseData ? cursorPage.data.slice().reverse() : cursorPage.data;\n\t\t\t\tif (data.length === 0) {\n\t\t\t\t\tconst emptyStartIndex = options.cursor.after ? total : 0;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tpagination: {\n\t\t\t\t\t\t\t...calculatePagination(total, {\n\t\t\t\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\t\t\t\toffset: emptyStartIndex\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t...options.cursor.after ? { previousCursor: options.cursor.after } : {},\n\t\t\t\t\t\t\t...options.cursor.before ? { nextCursor: options.cursor.before } : {}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst firstBundleId = data[0].id;\n\t\t\t\tconst countBeforeResult = await runGetBundles({\n\t\t\t\t\twhere: buildCountBeforeWhere(baseWhere, firstBundleId, orderBy),\n\t\t\t\t\tlimit: 1,\n\t\t\t\t\toffset: 0,\n\t\t\t\t\torderBy\n\t\t\t\t}, context);\n\t\t\t\treturn createPaginatedResult(total, options.limit, countBeforeResult.pagination.total, data);\n\t\t\t};\n\t\t\tconst plugin = {\n\t\t\t\tname: options.name,\n\t\t\t\tasync getBundleById(bundleId, context) {\n\t\t\t\t\tif (context === void 0) return getMethods().getBundleById(bundleId);\n\t\t\t\t\treturn getMethods().getBundleById(bundleId, context);\n\t\t\t\t},\n\t\t\t\tasync getBundles(options, context) {\n\t\t\t\t\tif (typeof options === \"object\" && options !== null && \"offset\" in options && options.offset !== void 0) throw new Error(\"Bundle offset pagination has been removed. Use cursor.after or cursor.before instead.\");\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tconst normalizedOptions = {\n\t\t\t\t\t\t...options,\n\t\t\t\t\t\tpage: normalizePage(options.page),\n\t\t\t\t\t\torderBy: options.orderBy ?? DEFAULT_DESC_ORDER\n\t\t\t\t\t};\n\t\t\t\t\tif (normalizedOptions.page !== void 0) {\n\t\t\t\t\t\tconst { page, ...pageOptions } = normalizedOptions;\n\t\t\t\t\t\tconst requestedOffset = (page - 1) * normalizedOptions.limit;\n\t\t\t\t\t\tlet pageResult = await runGetBundles({\n\t\t\t\t\t\t\t...pageOptions,\n\t\t\t\t\t\t\toffset: requestedOffset\n\t\t\t\t\t\t}, context);\n\t\t\t\t\t\tconst total = pageResult.pagination.total;\n\t\t\t\t\t\tconst totalPages = total === 0 ? 0 : Math.ceil(total / normalizedOptions.limit);\n\t\t\t\t\t\tconst maxOffset = totalPages === 0 ? 0 : (Math.max(1, totalPages) - 1) * normalizedOptions.limit;\n\t\t\t\t\t\tconst resolvedOffset = Math.min(requestedOffset, maxOffset);\n\t\t\t\t\t\tif (resolvedOffset !== requestedOffset) pageResult = await runGetBundles({\n\t\t\t\t\t\t\t...pageOptions,\n\t\t\t\t\t\t\toffset: resolvedOffset\n\t\t\t\t\t\t}, context);\n\t\t\t\t\t\treturn createPaginatedResult(total, normalizedOptions.limit, resolvedOffset, pageResult.data);\n\t\t\t\t\t}\n\t\t\t\t\tif (methods.supportsCursorPagination) {\n\t\t\t\t\t\tif (context === void 0) return methods.getBundles(normalizedOptions);\n\t\t\t\t\t\treturn methods.getBundles(normalizedOptions, context);\n\t\t\t\t\t}\n\t\t\t\t\treturn getBundlesWithLegacyCursorFallback(normalizedOptions, context);\n\t\t\t\t},\n\t\t\t\tasync getChannels(context) {\n\t\t\t\t\tif (context === void 0) return getMethods().getChannels();\n\t\t\t\t\treturn getMethods().getChannels(context);\n\t\t\t\t},\n\t\t\t\tasync onUnmount() {\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tif (methods.onUnmount) return methods.onUnmount();\n\t\t\t\t},\n\t\t\t\tasync commitBundle(context) {\n\t\t\t\t\tconst methods = getMethods();\n\t\t\t\t\tconst params = { changedSets: Array.from(changedMap.values()) };\n\t\t\t\t\tif (context === void 0) await methods.commitBundle(params);\n\t\t\t\t\telse await methods.commitBundle(params, context);\n\t\t\t\t\tchangedMap.clear();\n\t\t\t\t\tawait hooks?.onDatabaseUpdated?.();\n\t\t\t\t},\n\t\t\t\tasync updateBundle(targetBundleId, newBundle, context) {\n\t\t\t\t\tconst pendingChange = changedMap.get(targetBundleId);\n\t\t\t\t\tif (pendingChange) {\n\t\t\t\t\t\tconst updatedData = mergeBundleUpdate(pendingChange.data, newBundle);\n\t\t\t\t\t\tchangedMap.set(targetBundleId, {\n\t\t\t\t\t\t\toperation: pendingChange.operation,\n\t\t\t\t\t\t\tdata: updatedData\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst currentBundle = context === void 0 ? await getMethods().getBundleById(targetBundleId) : await getMethods().getBundleById(targetBundleId, context);\n\t\t\t\t\tif (!currentBundle) throw new Error(\"targetBundleId not found\");\n\t\t\t\t\tmarkChanged(\"update\", mergeBundleUpdate(currentBundle, newBundle));\n\t\t\t\t},\n\t\t\t\tasync appendBundle(inputBundle) {\n\t\t\t\t\tmarkChanged(\"insert\", inputBundle);\n\t\t\t\t},\n\t\t\t\tasync deleteBundle(deleteBundle) {\n\t\t\t\t\tmarkChanged(\"delete\", deleteBundle);\n\t\t\t\t}\n\t\t\t};\n\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget() {\n\t\t\t\t\tconst directGetUpdateInfo = getMethods().getUpdateInfo;\n\t\t\t\t\tif (!directGetUpdateInfo) {\n\t\t\t\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\t\tvalue: void 0\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst wrappedGetUpdateInfo = async (args, context) => {\n\t\t\t\t\t\tif (context === void 0) return directGetUpdateInfo(args);\n\t\t\t\t\t\treturn directGetUpdateInfo(args, context);\n\t\t\t\t\t};\n\t\t\t\t\tObject.defineProperty(plugin, \"getUpdateInfo\", {\n\t\t\t\t\t\tconfigurable: true,\n\t\t\t\t\t\tenumerable: true,\n\t\t\t\t\t\tvalue: wrappedGetUpdateInfo\n\t\t\t\t\t});\n\t\t\t\t\treturn wrappedGetUpdateInfo;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn plugin;\n\t\t};\n\t};\n}\n//#endregion\nexport { createDatabasePlugin };\n", "export { at } from './array/at.mjs';\nexport { chunk } from './array/chunk.mjs';\nexport { compact } from './array/compact.mjs';\nexport { countBy } from './array/countBy.mjs';\nexport { difference } from './array/difference.mjs';\nexport { differenceBy } from './array/differenceBy.mjs';\nexport { differenceWith } from './array/differenceWith.mjs';\nexport { drop } from './array/drop.mjs';\nexport { dropRight } from './array/dropRight.mjs';\nexport { dropRightWhile } from './array/dropRightWhile.mjs';\nexport { dropWhile } from './array/dropWhile.mjs';\nexport { fill } from './array/fill.mjs';\nexport { flatMap } from './array/flatMap.mjs';\nexport { flatMapDeep } from './array/flatMapDeep.mjs';\nexport { flatten } from './array/flatten.mjs';\nexport { flattenDeep } from './array/flattenDeep.mjs';\nexport { forEachRight } from './array/forEachRight.mjs';\nexport { groupBy } from './array/groupBy.mjs';\nexport { head } from './array/head.mjs';\nexport { initial } from './array/initial.mjs';\nexport { intersection } from './array/intersection.mjs';\nexport { intersectionBy } from './array/intersectionBy.mjs';\nexport { intersectionWith } from './array/intersectionWith.mjs';\nexport { isSubset } from './array/isSubset.mjs';\nexport { isSubsetWith } from './array/isSubsetWith.mjs';\nexport { keyBy } from './array/keyBy.mjs';\nexport { last } from './array/last.mjs';\nexport { maxBy } from './array/maxBy.mjs';\nexport { minBy } from './array/minBy.mjs';\nexport { orderBy } from './array/orderBy.mjs';\nexport { partition } from './array/partition.mjs';\nexport { pull } from './array/pull.mjs';\nexport { pullAt } from './array/pullAt.mjs';\nexport { remove } from './array/remove.mjs';\nexport { sample } from './array/sample.mjs';\nexport { sampleSize } from './array/sampleSize.mjs';\nexport { shuffle } from './array/shuffle.mjs';\nexport { sortBy } from './array/sortBy.mjs';\nexport { tail } from './array/tail.mjs';\nexport { take } from './array/take.mjs';\nexport { takeRight } from './array/takeRight.mjs';\nexport { takeRightWhile } from './array/takeRightWhile.mjs';\nexport { takeWhile } from './array/takeWhile.mjs';\nexport { toFilled } from './array/toFilled.mjs';\nexport { union } from './array/union.mjs';\nexport { unionBy } from './array/unionBy.mjs';\nexport { unionWith } from './array/unionWith.mjs';\nexport { uniq } from './array/uniq.mjs';\nexport { uniqBy } from './array/uniqBy.mjs';\nexport { uniqWith } from './array/uniqWith.mjs';\nexport { unzip } from './array/unzip.mjs';\nexport { unzipWith } from './array/unzipWith.mjs';\nexport { windowed } from './array/windowed.mjs';\nexport { without } from './array/without.mjs';\nexport { xor } from './array/xor.mjs';\nexport { xorBy } from './array/xorBy.mjs';\nexport { xorWith } from './array/xorWith.mjs';\nexport { zip } from './array/zip.mjs';\nexport { zipObject } from './array/zipObject.mjs';\nexport { zipWith } from './array/zipWith.mjs';\nexport { AbortError } from './error/AbortError.mjs';\nexport { TimeoutError } from './error/TimeoutError.mjs';\nexport { after } from './function/after.mjs';\nexport { ary } from './function/ary.mjs';\nexport { asyncNoop } from './function/asyncNoop.mjs';\nexport { before } from './function/before.mjs';\nexport { curry } from './function/curry.mjs';\nexport { curryRight } from './function/curryRight.mjs';\nexport { debounce } from './function/debounce.mjs';\nexport { flow } from './function/flow.mjs';\nexport { flowRight } from './function/flowRight.mjs';\nexport { identity } from './function/identity.mjs';\nexport { memoize } from './function/memoize.mjs';\nexport { negate } from './function/negate.mjs';\nexport { noop } from './function/noop.mjs';\nexport { once } from './function/once.mjs';\nexport { partial } from './function/partial.mjs';\nexport { partialRight } from './function/partialRight.mjs';\nexport { rest } from './function/rest.mjs';\nexport { retry } from './function/retry.mjs';\nexport { spread } from './function/spread.mjs';\nexport { throttle } from './function/throttle.mjs';\nexport { unary } from './function/unary.mjs';\nexport { clamp } from './math/clamp.mjs';\nexport { inRange } from './math/inRange.mjs';\nexport { mean } from './math/mean.mjs';\nexport { meanBy } from './math/meanBy.mjs';\nexport { median } from './math/median.mjs';\nexport { medianBy } from './math/medianBy.mjs';\nexport { random } from './math/random.mjs';\nexport { randomInt } from './math/randomInt.mjs';\nexport { range } from './math/range.mjs';\nexport { rangeRight } from './math/rangeRight.mjs';\nexport { round } from './math/round.mjs';\nexport { sum } from './math/sum.mjs';\nexport { sumBy } from './math/sumBy.mjs';\nexport { clone } from './object/clone.mjs';\nexport { cloneDeep } from './object/cloneDeep.mjs';\nexport { cloneDeepWith } from './object/cloneDeepWith.mjs';\nexport { findKey } from './object/findKey.mjs';\nexport { flattenObject } from './object/flattenObject.mjs';\nexport { invert } from './object/invert.mjs';\nexport { mapKeys } from './object/mapKeys.mjs';\nexport { mapValues } from './object/mapValues.mjs';\nexport { merge } from './object/merge.mjs';\nexport { mergeWith } from './object/mergeWith.mjs';\nexport { omit } from './object/omit.mjs';\nexport { omitBy } from './object/omitBy.mjs';\nexport { pick } from './object/pick.mjs';\nexport { pickBy } from './object/pickBy.mjs';\nexport { toMerged } from './object/toMerged.mjs';\nexport { isArrayBuffer } from './predicate/isArrayBuffer.mjs';\nexport { isBlob } from './predicate/isBlob.mjs';\nexport { isBoolean } from './predicate/isBoolean.mjs';\nexport { isBuffer } from './predicate/isBuffer.mjs';\nexport { isDate } from './predicate/isDate.mjs';\nexport { isEqual } from './predicate/isEqual.mjs';\nexport { isEqualWith } from './predicate/isEqualWith.mjs';\nexport { isError } from './predicate/isError.mjs';\nexport { isFile } from './predicate/isFile.mjs';\nexport { isFunction } from './predicate/isFunction.mjs';\nexport { isJSONArray, isJSONObject, isJSONValue } from './predicate/isJSONValue.mjs';\nexport { isLength } from './predicate/isLength.mjs';\nexport { isMap } from './predicate/isMap.mjs';\nexport { isNil } from './predicate/isNil.mjs';\nexport { isNotNil } from './predicate/isNotNil.mjs';\nexport { isNull } from './predicate/isNull.mjs';\nexport { isPlainObject } from './predicate/isPlainObject.mjs';\nexport { isPrimitive } from './predicate/isPrimitive.mjs';\nexport { isPromise } from './predicate/isPromise.mjs';\nexport { isRegExp } from './predicate/isRegExp.mjs';\nexport { isSet } from './predicate/isSet.mjs';\nexport { isString } from './predicate/isString.mjs';\nexport { isSymbol } from './predicate/isSymbol.mjs';\nexport { isTypedArray } from './predicate/isTypedArray.mjs';\nexport { isUndefined } from './predicate/isUndefined.mjs';\nexport { isWeakMap } from './predicate/isWeakMap.mjs';\nexport { isWeakSet } from './predicate/isWeakSet.mjs';\nexport { delay } from './promise/delay.mjs';\nexport { Mutex } from './promise/mutex.mjs';\nexport { Semaphore } from './promise/semaphore.mjs';\nexport { timeout } from './promise/timeout.mjs';\nexport { withTimeout } from './promise/withTimeout.mjs';\nexport { camelCase } from './string/camelCase.mjs';\nexport { capitalize } from './string/capitalize.mjs';\nexport { constantCase } from './string/constantCase.mjs';\nexport { deburr } from './string/deburr.mjs';\nexport { escape } from './string/escape.mjs';\nexport { escapeRegExp } from './string/escapeRegExp.mjs';\nexport { kebabCase } from './string/kebabCase.mjs';\nexport { lowerCase } from './string/lowerCase.mjs';\nexport { lowerFirst } from './string/lowerFirst.mjs';\nexport { pad } from './string/pad.mjs';\nexport { pascalCase } from './string/pascalCase.mjs';\nexport { snakeCase } from './string/snakeCase.mjs';\nexport { startCase } from './string/startCase.mjs';\nexport { trim } from './string/trim.mjs';\nexport { trimEnd } from './string/trimEnd.mjs';\nexport { trimStart } from './string/trimStart.mjs';\nexport { unescape } from './string/unescape.mjs';\nexport { upperCase } from './string/upperCase.mjs';\nexport { upperFirst } from './string/upperFirst.mjs';\nexport { words } from './string/words.mjs';\nexport { invariant } from './util/invariant.mjs';\n", "import { isObjectLike } from '../compat/predicate/isObjectLike.mjs';\n\nfunction mergeWith(target, source, merge) {\n const sourceKeys = Object.keys(source);\n for (let i = 0; i < sourceKeys.length; i++) {\n const key = sourceKeys[i];\n const sourceValue = source[key];\n const targetValue = target[key];\n const merged = merge(targetValue, sourceValue, key, target, source);\n if (merged != null) {\n target[key] = merged;\n }\n else if (Array.isArray(sourceValue)) {\n target[key] = mergeWith(targetValue ?? [], sourceValue, merge);\n }\n else if (isObjectLike(targetValue) && isObjectLike(sourceValue)) {\n target[key] = mergeWith(targetValue ?? {}, sourceValue, merge);\n }\n else if (targetValue === undefined || sourceValue !== undefined) {\n target[key] = sourceValue;\n }\n }\n return target;\n}\n\nexport { mergeWith };\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\n\nexport { isObjectLike };\n", "import semver from \"semver\";\n//#region src/semverSatisfies.ts\nconst semverSatisfies = (targetAppVersion, currentVersion) => {\n\tconst currentCoerce = semver.coerce(currentVersion);\n\tif (!currentCoerce) return false;\n\treturn semver.satisfies(currentCoerce.version, targetAppVersion);\n};\n//#endregion\nexport { semverSatisfies };\n", "import { semverSatisfies } from \"./semverSatisfies.mjs\";\n//#region src/filterCompatibleAppVersions.ts\n/**\n* Filters target app versions that are compatible with the current app version.\n* Returns only versions that are compatible with the current version according to semver rules.\n*\n* @param targetAppVersionList - List of target app versions to filter\n* @param currentVersion - Current app version\n* @returns Array of target app versions compatible with the current version\n*/\nconst filterCompatibleAppVersions = (targetAppVersionList, currentVersion) => {\n\treturn targetAppVersionList.filter((version) => semverSatisfies(version, currentVersion)).sort((a, b) => b.localeCompare(a));\n};\n//#endregion\nexport { filterCompatibleAppVersions };\n", "import { NIL_UUID, isCohortEligibleForUpdate } from \"@hot-updater/core\";\n//#region \\0rolldown/runtime.js\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js\nvar require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SEMVER_SPEC_VERSION = \"2.0.0\";\n\tconst MAX_LENGTH = 256;\n\tconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\tmodule.exports = {\n\t\tMAX_LENGTH,\n\t\tMAX_SAFE_COMPONENT_LENGTH: 16,\n\t\tMAX_SAFE_BUILD_LENGTH: MAX_LENGTH - 6,\n\t\tMAX_SAFE_INTEGER,\n\t\tRELEASE_TYPES: [\n\t\t\t\"major\",\n\t\t\t\"premajor\",\n\t\t\t\"minor\",\n\t\t\t\"preminor\",\n\t\t\t\"patch\",\n\t\t\t\"prepatch\",\n\t\t\t\"prerelease\"\n\t\t],\n\t\tSEMVER_SPEC_VERSION,\n\t\tFLAG_INCLUDE_PRERELEASE: 1,\n\t\tFLAG_LOOSE: 2\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js\nvar require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = typeof process === \"object\" && process.env && process.env.NODE_DEBUG && /\\bsemver\\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error(\"SEMVER\", ...args) : () => {};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js\nvar require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();\n\tconst debug = require_debug();\n\texports = module.exports = {};\n\tconst re = exports.re = [];\n\tconst safeRe = exports.safeRe = [];\n\tconst src = exports.src = [];\n\tconst safeSrc = exports.safeSrc = [];\n\tconst t = exports.t = {};\n\tlet R = 0;\n\tconst LETTERDASHNUMBER = \"[a-zA-Z0-9-]\";\n\tconst safeRegexReplacements = [\n\t\t[\"\\\\s\", 1],\n\t\t[\"\\\\d\", MAX_LENGTH],\n\t\t[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]\n\t];\n\tconst makeSafeRegex = (value) => {\n\t\tfor (const [token, max] of safeRegexReplacements) value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);\n\t\treturn value;\n\t};\n\tconst createToken = (name, value, isGlobal) => {\n\t\tconst safe = makeSafeRegex(value);\n\t\tconst index = R++;\n\t\tdebug(name, index, value);\n\t\tt[name] = index;\n\t\tsrc[index] = value;\n\t\tsafeSrc[index] = safe;\n\t\tre[index] = new RegExp(value, isGlobal ? \"g\" : void 0);\n\t\tsafeRe[index] = new RegExp(safe, isGlobal ? \"g\" : void 0);\n\t};\n\tcreateToken(\"NUMERICIDENTIFIER\", \"0|[1-9]\\\\d*\");\n\tcreateToken(\"NUMERICIDENTIFIERLOOSE\", \"\\\\d+\");\n\tcreateToken(\"NONNUMERICIDENTIFIER\", `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);\n\tcreateToken(\"MAINVERSION\", `(${src[t.NUMERICIDENTIFIER]})\\\\.(${src[t.NUMERICIDENTIFIER]})\\\\.(${src[t.NUMERICIDENTIFIER]})`);\n\tcreateToken(\"MAINVERSIONLOOSE\", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);\n\tcreateToken(\"PRERELEASEIDENTIFIER\", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);\n\tcreateToken(\"PRERELEASEIDENTIFIERLOOSE\", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);\n\tcreateToken(\"PRERELEASE\", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`);\n\tcreateToken(\"PRERELEASELOOSE\", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);\n\tcreateToken(\"BUILDIDENTIFIER\", `${LETTERDASHNUMBER}+`);\n\tcreateToken(\"BUILD\", `(?:\\\\+(${src[t.BUILDIDENTIFIER]}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`);\n\tcreateToken(\"FULLPLAIN\", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);\n\tcreateToken(\"FULL\", `^${src[t.FULLPLAIN]}$`);\n\tcreateToken(\"LOOSEPLAIN\", `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);\n\tcreateToken(\"LOOSE\", `^${src[t.LOOSEPLAIN]}$`);\n\tcreateToken(\"GTLT\", \"((?:<|>)?=?)\");\n\tcreateToken(\"XRANGEIDENTIFIERLOOSE\", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`);\n\tcreateToken(\"XRANGEIDENTIFIER\", `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`);\n\tcreateToken(\"XRANGEPLAIN\", `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\\\.(${src[t.XRANGEIDENTIFIER]})(?:\\\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);\n\tcreateToken(\"XRANGEPLAINLOOSE\", `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);\n\tcreateToken(\"XRANGE\", `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"XRANGELOOSE\", `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"COERCEPLAIN\", `(^|[^\\\\d])(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);\n\tcreateToken(\"COERCE\", `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`);\n\tcreateToken(\"COERCEFULL\", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\\\d])`);\n\tcreateToken(\"COERCERTL\", src[t.COERCE], true);\n\tcreateToken(\"COERCERTLFULL\", src[t.COERCEFULL], true);\n\tcreateToken(\"LONETILDE\", \"(?:~>?)\");\n\tcreateToken(\"TILDETRIM\", `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true);\n\texports.tildeTrimReplace = \"$1~\";\n\tcreateToken(\"TILDE\", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"TILDELOOSE\", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"LONECARET\", \"(?:\\\\^)\");\n\tcreateToken(\"CARETTRIM\", `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true);\n\texports.caretTrimReplace = \"$1^\";\n\tcreateToken(\"CARET\", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);\n\tcreateToken(\"CARETLOOSE\", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);\n\tcreateToken(\"COMPARATORLOOSE\", `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`);\n\tcreateToken(\"COMPARATOR\", `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`);\n\tcreateToken(\"COMPARATORTRIM\", `(\\\\s*)${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);\n\texports.comparatorTrimReplace = \"$1$2$3\";\n\tcreateToken(\"HYPHENRANGE\", `^\\\\s*(${src[t.XRANGEPLAIN]})\\\\s+-\\\\s+(${src[t.XRANGEPLAIN]})\\\\s*$`);\n\tcreateToken(\"HYPHENRANGELOOSE\", `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})\\\\s+-\\\\s+(${src[t.XRANGEPLAINLOOSE]})\\\\s*$`);\n\tcreateToken(\"STAR\", \"(<|>)?=?\\\\s*\\\\*\");\n\tcreateToken(\"GTE0\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$\");\n\tcreateToken(\"GTE0PRE\", \"^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$\");\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js\nvar require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst looseOption = Object.freeze({ loose: true });\n\tconst emptyOpts = Object.freeze({});\n\tconst parseOptions = (options) => {\n\t\tif (!options) return emptyOpts;\n\t\tif (typeof options !== \"object\") return looseOption;\n\t\treturn options;\n\t};\n\tmodule.exports = parseOptions;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js\nvar require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst numeric = /^[0-9]+$/;\n\tconst compareIdentifiers = (a, b) => {\n\t\tconst anum = numeric.test(a);\n\t\tconst bnum = numeric.test(b);\n\t\tif (anum && bnum) {\n\t\t\ta = +a;\n\t\t\tb = +b;\n\t\t}\n\t\treturn a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;\n\t};\n\tconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);\n\tmodule.exports = {\n\t\tcompareIdentifiers,\n\t\trcompareIdentifiers\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js\nvar require_semver$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst debug = require_debug();\n\tconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();\n\tconst { safeRe: re, t } = require_re();\n\tconst parseOptions = require_parse_options();\n\tconst { compareIdentifiers } = require_identifiers();\n\tmodule.exports = class SemVer {\n\t\tconstructor(version, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (version instanceof SemVer) if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) return version;\n\t\t\telse version = version.version;\n\t\t\telse if (typeof version !== \"string\") throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`);\n\t\t\tif (version.length > MAX_LENGTH) throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);\n\t\t\tdebug(\"SemVer\", version, options);\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.includePrerelease = !!options.includePrerelease;\n\t\t\tconst m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);\n\t\t\tif (!m) throw new TypeError(`Invalid Version: ${version}`);\n\t\t\tthis.raw = version;\n\t\t\tthis.major = +m[1];\n\t\t\tthis.minor = +m[2];\n\t\t\tthis.patch = +m[3];\n\t\t\tif (this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError(\"Invalid major version\");\n\t\t\tif (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError(\"Invalid minor version\");\n\t\t\tif (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError(\"Invalid patch version\");\n\t\t\tif (!m[4]) this.prerelease = [];\n\t\t\telse this.prerelease = m[4].split(\".\").map((id) => {\n\t\t\t\tif (/^[0-9]+$/.test(id)) {\n\t\t\t\t\tconst num = +id;\n\t\t\t\t\tif (num >= 0 && num < MAX_SAFE_INTEGER) return num;\n\t\t\t\t}\n\t\t\t\treturn id;\n\t\t\t});\n\t\t\tthis.build = m[5] ? m[5].split(\".\") : [];\n\t\t\tthis.format();\n\t\t}\n\t\tformat() {\n\t\t\tthis.version = `${this.major}.${this.minor}.${this.patch}`;\n\t\t\tif (this.prerelease.length) this.version += `-${this.prerelease.join(\".\")}`;\n\t\t\treturn this.version;\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.version;\n\t\t}\n\t\tcompare(other) {\n\t\t\tdebug(\"SemVer.compare\", this.version, this.options, other);\n\t\t\tif (!(other instanceof SemVer)) {\n\t\t\t\tif (typeof other === \"string\" && other === this.version) return 0;\n\t\t\t\tother = new SemVer(other, this.options);\n\t\t\t}\n\t\t\tif (other.version === this.version) return 0;\n\t\t\treturn this.compareMain(other) || this.comparePre(other);\n\t\t}\n\t\tcompareMain(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\treturn compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);\n\t\t}\n\t\tcomparePre(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\tif (this.prerelease.length && !other.prerelease.length) return -1;\n\t\t\telse if (!this.prerelease.length && other.prerelease.length) return 1;\n\t\t\telse if (!this.prerelease.length && !other.prerelease.length) return 0;\n\t\t\tlet i = 0;\n\t\t\tdo {\n\t\t\t\tconst a = this.prerelease[i];\n\t\t\t\tconst b = other.prerelease[i];\n\t\t\t\tdebug(\"prerelease compare\", i, a, b);\n\t\t\t\tif (a === void 0 && b === void 0) return 0;\n\t\t\t\telse if (b === void 0) return 1;\n\t\t\t\telse if (a === void 0) return -1;\n\t\t\t\telse if (a === b) continue;\n\t\t\t\telse return compareIdentifiers(a, b);\n\t\t\t} while (++i);\n\t\t}\n\t\tcompareBuild(other) {\n\t\t\tif (!(other instanceof SemVer)) other = new SemVer(other, this.options);\n\t\t\tlet i = 0;\n\t\t\tdo {\n\t\t\t\tconst a = this.build[i];\n\t\t\t\tconst b = other.build[i];\n\t\t\t\tdebug(\"build compare\", i, a, b);\n\t\t\t\tif (a === void 0 && b === void 0) return 0;\n\t\t\t\telse if (b === void 0) return 1;\n\t\t\t\telse if (a === void 0) return -1;\n\t\t\t\telse if (a === b) continue;\n\t\t\t\telse return compareIdentifiers(a, b);\n\t\t\t} while (++i);\n\t\t}\n\t\tinc(release, identifier, identifierBase) {\n\t\t\tif (release.startsWith(\"pre\")) {\n\t\t\t\tif (!identifier && identifierBase === false) throw new Error(\"invalid increment argument: identifier is empty\");\n\t\t\t\tif (identifier) {\n\t\t\t\t\tconst match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);\n\t\t\t\t\tif (!match || match[1] !== identifier) throw new Error(`invalid identifier: ${identifier}`);\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch (release) {\n\t\t\t\tcase \"premajor\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.minor = 0;\n\t\t\t\t\tthis.major++;\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"preminor\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.minor++;\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prepatch\":\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tthis.inc(\"patch\", identifier, identifierBase);\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"prerelease\":\n\t\t\t\t\tif (this.prerelease.length === 0) this.inc(\"patch\", identifier, identifierBase);\n\t\t\t\t\tthis.inc(\"pre\", identifier, identifierBase);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"release\":\n\t\t\t\t\tif (this.prerelease.length === 0) throw new Error(`version ${this.raw} is not a prerelease`);\n\t\t\t\t\tthis.prerelease.length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"major\":\n\t\t\t\t\tif (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) this.major++;\n\t\t\t\t\tthis.minor = 0;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"minor\":\n\t\t\t\t\tif (this.patch !== 0 || this.prerelease.length === 0) this.minor++;\n\t\t\t\t\tthis.patch = 0;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"patch\":\n\t\t\t\t\tif (this.prerelease.length === 0) this.patch++;\n\t\t\t\t\tthis.prerelease = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"pre\": {\n\t\t\t\t\tconst base = Number(identifierBase) ? 1 : 0;\n\t\t\t\t\tif (this.prerelease.length === 0) this.prerelease = [base];\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet i = this.prerelease.length;\n\t\t\t\t\t\twhile (--i >= 0) if (typeof this.prerelease[i] === \"number\") {\n\t\t\t\t\t\t\tthis.prerelease[i]++;\n\t\t\t\t\t\t\ti = -2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i === -1) {\n\t\t\t\t\t\t\tif (identifier === this.prerelease.join(\".\") && identifierBase === false) throw new Error(\"invalid increment argument: identifier already exists\");\n\t\t\t\t\t\t\tthis.prerelease.push(base);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (identifier) {\n\t\t\t\t\t\tlet prerelease = [identifier, base];\n\t\t\t\t\t\tif (identifierBase === false) prerelease = [identifier];\n\t\t\t\t\t\tif (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n\t\t\t\t\t\t\tif (isNaN(this.prerelease[1])) this.prerelease = prerelease;\n\t\t\t\t\t\t} else this.prerelease = prerelease;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault: throw new Error(`invalid increment argument: ${release}`);\n\t\t\t}\n\t\t\tthis.raw = this.format();\n\t\t\tif (this.build.length) this.raw += `+${this.build.join(\".\")}`;\n\t\t\treturn this;\n\t\t}\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js\nvar require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst parse = (version, options, throwErrors = false) => {\n\t\tif (version instanceof SemVer) return version;\n\t\ttry {\n\t\t\treturn new SemVer(version, options);\n\t\t} catch (er) {\n\t\t\tif (!throwErrors) return null;\n\t\t\tthrow er;\n\t\t}\n\t};\n\tmodule.exports = parse;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js\nvar require_valid$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst valid = (version, options) => {\n\t\tconst v = parse(version, options);\n\t\treturn v ? v.version : null;\n\t};\n\tmodule.exports = valid;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js\nvar require_clean = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst clean = (version, options) => {\n\t\tconst s = parse(version.trim().replace(/^[=v]+/, \"\"), options);\n\t\treturn s ? s.version : null;\n\t};\n\tmodule.exports = clean;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js\nvar require_inc = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst inc = (version, release, options, identifier, identifierBase) => {\n\t\tif (typeof options === \"string\") {\n\t\t\tidentifierBase = identifier;\n\t\t\tidentifier = options;\n\t\t\toptions = void 0;\n\t\t}\n\t\ttry {\n\t\t\treturn new SemVer(version instanceof SemVer ? version.version : version, options).inc(release, identifier, identifierBase).version;\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t};\n\tmodule.exports = inc;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js\nvar require_diff = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst diff = (version1, version2) => {\n\t\tconst v1 = parse(version1, null, true);\n\t\tconst v2 = parse(version2, null, true);\n\t\tconst comparison = v1.compare(v2);\n\t\tif (comparison === 0) return null;\n\t\tconst v1Higher = comparison > 0;\n\t\tconst highVersion = v1Higher ? v1 : v2;\n\t\tconst lowVersion = v1Higher ? v2 : v1;\n\t\tconst highHasPre = !!highVersion.prerelease.length;\n\t\tif (!!lowVersion.prerelease.length && !highHasPre) {\n\t\t\tif (!lowVersion.patch && !lowVersion.minor) return \"major\";\n\t\t\tif (lowVersion.compareMain(highVersion) === 0) {\n\t\t\t\tif (lowVersion.minor && !lowVersion.patch) return \"minor\";\n\t\t\t\treturn \"patch\";\n\t\t\t}\n\t\t}\n\t\tconst prefix = highHasPre ? \"pre\" : \"\";\n\t\tif (v1.major !== v2.major) return prefix + \"major\";\n\t\tif (v1.minor !== v2.minor) return prefix + \"minor\";\n\t\tif (v1.patch !== v2.patch) return prefix + \"patch\";\n\t\treturn \"prerelease\";\n\t};\n\tmodule.exports = diff;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js\nvar require_major = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst major = (a, loose) => new SemVer(a, loose).major;\n\tmodule.exports = major;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js\nvar require_minor = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst minor = (a, loose) => new SemVer(a, loose).minor;\n\tmodule.exports = minor;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js\nvar require_patch = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst patch = (a, loose) => new SemVer(a, loose).patch;\n\tmodule.exports = patch;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js\nvar require_prerelease = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst parse = require_parse();\n\tconst prerelease = (version, options) => {\n\t\tconst parsed = parse(version, options);\n\t\treturn parsed && parsed.prerelease.length ? parsed.prerelease : null;\n\t};\n\tmodule.exports = prerelease;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js\nvar require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));\n\tmodule.exports = compare;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js\nvar require_rcompare = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst rcompare = (a, b, loose) => compare(b, a, loose);\n\tmodule.exports = rcompare;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js\nvar require_compare_loose = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst compareLoose = (a, b) => compare(a, b, true);\n\tmodule.exports = compareLoose;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js\nvar require_compare_build = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst compareBuild = (a, b, loose) => {\n\t\tconst versionA = new SemVer(a, loose);\n\t\tconst versionB = new SemVer(b, loose);\n\t\treturn versionA.compare(versionB) || versionA.compareBuild(versionB);\n\t};\n\tmodule.exports = compareBuild;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js\nvar require_sort = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compareBuild = require_compare_build();\n\tconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));\n\tmodule.exports = sort;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js\nvar require_rsort = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compareBuild = require_compare_build();\n\tconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));\n\tmodule.exports = rsort;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js\nvar require_gt = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst gt = (a, b, loose) => compare(a, b, loose) > 0;\n\tmodule.exports = gt;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js\nvar require_lt = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst lt = (a, b, loose) => compare(a, b, loose) < 0;\n\tmodule.exports = lt;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js\nvar require_eq = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst eq = (a, b, loose) => compare(a, b, loose) === 0;\n\tmodule.exports = eq;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js\nvar require_neq = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst neq = (a, b, loose) => compare(a, b, loose) !== 0;\n\tmodule.exports = neq;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js\nvar require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst gte = (a, b, loose) => compare(a, b, loose) >= 0;\n\tmodule.exports = gte;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js\nvar require_lte = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst compare = require_compare();\n\tconst lte = (a, b, loose) => compare(a, b, loose) <= 0;\n\tmodule.exports = lte;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js\nvar require_cmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst eq = require_eq();\n\tconst neq = require_neq();\n\tconst gt = require_gt();\n\tconst gte = require_gte();\n\tconst lt = require_lt();\n\tconst lte = require_lte();\n\tconst cmp = (a, op, b, loose) => {\n\t\tswitch (op) {\n\t\t\tcase \"===\":\n\t\t\t\tif (typeof a === \"object\") a = a.version;\n\t\t\t\tif (typeof b === \"object\") b = b.version;\n\t\t\t\treturn a === b;\n\t\t\tcase \"!==\":\n\t\t\t\tif (typeof a === \"object\") a = a.version;\n\t\t\t\tif (typeof b === \"object\") b = b.version;\n\t\t\t\treturn a !== b;\n\t\t\tcase \"\":\n\t\t\tcase \"=\":\n\t\t\tcase \"==\": return eq(a, b, loose);\n\t\t\tcase \"!=\": return neq(a, b, loose);\n\t\t\tcase \">\": return gt(a, b, loose);\n\t\t\tcase \">=\": return gte(a, b, loose);\n\t\t\tcase \"<\": return lt(a, b, loose);\n\t\t\tcase \"<=\": return lte(a, b, loose);\n\t\t\tdefault: throw new TypeError(`Invalid operator: ${op}`);\n\t\t}\n\t};\n\tmodule.exports = cmp;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js\nvar require_coerce = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst parse = require_parse();\n\tconst { safeRe: re, t } = require_re();\n\tconst coerce = (version, options) => {\n\t\tif (version instanceof SemVer) return version;\n\t\tif (typeof version === \"number\") version = String(version);\n\t\tif (typeof version !== \"string\") return null;\n\t\toptions = options || {};\n\t\tlet match = null;\n\t\tif (!options.rtl) match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);\n\t\telse {\n\t\t\tconst coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];\n\t\t\tlet next;\n\t\t\twhile ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {\n\t\t\t\tif (!match || next.index + next[0].length !== match.index + match[0].length) match = next;\n\t\t\t\tcoerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;\n\t\t\t}\n\t\t\tcoerceRtlRegex.lastIndex = -1;\n\t\t}\n\t\tif (match === null) return null;\n\t\tconst major = match[2];\n\t\treturn parse(`${major}.${match[3] || \"0\"}.${match[4] || \"0\"}${options.includePrerelease && match[5] ? `-${match[5]}` : \"\"}${options.includePrerelease && match[6] ? `+${match[6]}` : \"\"}`, options);\n\t};\n\tmodule.exports = coerce;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js\nvar require_lrucache = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tvar LRUCache = class {\n\t\tconstructor() {\n\t\t\tthis.max = 1e3;\n\t\t\tthis.map = /* @__PURE__ */ new Map();\n\t\t}\n\t\tget(key) {\n\t\t\tconst value = this.map.get(key);\n\t\t\tif (value === void 0) return;\n\t\t\telse {\n\t\t\t\tthis.map.delete(key);\n\t\t\t\tthis.map.set(key, value);\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\tdelete(key) {\n\t\t\treturn this.map.delete(key);\n\t\t}\n\t\tset(key, value) {\n\t\t\tif (!this.delete(key) && value !== void 0) {\n\t\t\t\tif (this.map.size >= this.max) {\n\t\t\t\t\tconst firstKey = this.map.keys().next().value;\n\t\t\t\t\tthis.delete(firstKey);\n\t\t\t\t}\n\t\t\t\tthis.map.set(key, value);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t};\n\tmodule.exports = LRUCache;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js\nvar require_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SPACE_CHARACTERS = /\\s+/g;\n\tmodule.exports = class Range {\n\t\tconstructor(range, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (range instanceof Range) if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) return range;\n\t\t\telse return new Range(range.raw, options);\n\t\t\tif (range instanceof Comparator) {\n\t\t\t\tthis.raw = range.value;\n\t\t\t\tthis.set = [[range]];\n\t\t\t\tthis.formatted = void 0;\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.includePrerelease = !!options.includePrerelease;\n\t\t\tthis.raw = range.trim().replace(SPACE_CHARACTERS, \" \");\n\t\t\tthis.set = this.raw.split(\"||\").map((r) => this.parseRange(r.trim())).filter((c) => c.length);\n\t\t\tif (!this.set.length) throw new TypeError(`Invalid SemVer Range: ${this.raw}`);\n\t\t\tif (this.set.length > 1) {\n\t\t\t\tconst first = this.set[0];\n\t\t\t\tthis.set = this.set.filter((c) => !isNullSet(c[0]));\n\t\t\t\tif (this.set.length === 0) this.set = [first];\n\t\t\t\telse if (this.set.length > 1) {\n\t\t\t\t\tfor (const c of this.set) if (c.length === 1 && isAny(c[0])) {\n\t\t\t\t\t\tthis.set = [c];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.formatted = void 0;\n\t\t}\n\t\tget range() {\n\t\t\tif (this.formatted === void 0) {\n\t\t\t\tthis.formatted = \"\";\n\t\t\t\tfor (let i = 0; i < this.set.length; i++) {\n\t\t\t\t\tif (i > 0) this.formatted += \"||\";\n\t\t\t\t\tconst comps = this.set[i];\n\t\t\t\t\tfor (let k = 0; k < comps.length; k++) {\n\t\t\t\t\t\tif (k > 0) this.formatted += \" \";\n\t\t\t\t\t\tthis.formatted += comps[k].toString().trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.formatted;\n\t\t}\n\t\tformat() {\n\t\t\treturn this.range;\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.range;\n\t\t}\n\t\tparseRange(range) {\n\t\t\tconst memoKey = ((this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE)) + \":\" + range;\n\t\t\tconst cached = cache.get(memoKey);\n\t\t\tif (cached) return cached;\n\t\t\tconst loose = this.options.loose;\n\t\t\tconst hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];\n\t\t\trange = range.replace(hr, hyphenReplace(this.options.includePrerelease));\n\t\t\tdebug(\"hyphen replace\", range);\n\t\t\trange = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);\n\t\t\tdebug(\"comparator trim\", range);\n\t\t\trange = range.replace(re[t.TILDETRIM], tildeTrimReplace);\n\t\t\tdebug(\"tilde trim\", range);\n\t\t\trange = range.replace(re[t.CARETTRIM], caretTrimReplace);\n\t\t\tdebug(\"caret trim\", range);\n\t\t\tlet rangeList = range.split(\" \").map((comp) => parseComparator(comp, this.options)).join(\" \").split(/\\s+/).map((comp) => replaceGTE0(comp, this.options));\n\t\t\tif (loose) rangeList = rangeList.filter((comp) => {\n\t\t\t\tdebug(\"loose invalid filter\", comp, this.options);\n\t\t\t\treturn !!comp.match(re[t.COMPARATORLOOSE]);\n\t\t\t});\n\t\t\tdebug(\"range list\", rangeList);\n\t\t\tconst rangeMap = /* @__PURE__ */ new Map();\n\t\t\tconst comparators = rangeList.map((comp) => new Comparator(comp, this.options));\n\t\t\tfor (const comp of comparators) {\n\t\t\t\tif (isNullSet(comp)) return [comp];\n\t\t\t\trangeMap.set(comp.value, comp);\n\t\t\t}\n\t\t\tif (rangeMap.size > 1 && rangeMap.has(\"\")) rangeMap.delete(\"\");\n\t\t\tconst result = [...rangeMap.values()];\n\t\t\tcache.set(memoKey, result);\n\t\t\treturn result;\n\t\t}\n\t\tintersects(range, options) {\n\t\t\tif (!(range instanceof Range)) throw new TypeError(\"a Range is required\");\n\t\t\treturn this.set.some((thisComparators) => {\n\t\t\t\treturn isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {\n\t\t\t\t\treturn isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {\n\t\t\t\t\t\treturn rangeComparators.every((rangeComparator) => {\n\t\t\t\t\t\t\treturn thisComparator.intersects(rangeComparator, options);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\ttest(version) {\n\t\t\tif (!version) return false;\n\t\t\tif (typeof version === \"string\") try {\n\t\t\t\tversion = new SemVer(version, this.options);\n\t\t\t} catch (er) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (let i = 0; i < this.set.length; i++) if (testSet(this.set[i], version, this.options)) return true;\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst cache = new (require_lrucache())();\n\tconst parseOptions = require_parse_options();\n\tconst Comparator = require_comparator();\n\tconst debug = require_debug();\n\tconst SemVer = require_semver$1();\n\tconst { safeRe: re, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require_re();\n\tconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();\n\tconst isNullSet = (c) => c.value === \"<0.0.0-0\";\n\tconst isAny = (c) => c.value === \"\";\n\tconst isSatisfiable = (comparators, options) => {\n\t\tlet result = true;\n\t\tconst remainingComparators = comparators.slice();\n\t\tlet testComparator = remainingComparators.pop();\n\t\twhile (result && remainingComparators.length) {\n\t\t\tresult = remainingComparators.every((otherComparator) => {\n\t\t\t\treturn testComparator.intersects(otherComparator, options);\n\t\t\t});\n\t\t\ttestComparator = remainingComparators.pop();\n\t\t}\n\t\treturn result;\n\t};\n\tconst parseComparator = (comp, options) => {\n\t\tdebug(\"comp\", comp, options);\n\t\tcomp = replaceCarets(comp, options);\n\t\tdebug(\"caret\", comp);\n\t\tcomp = replaceTildes(comp, options);\n\t\tdebug(\"tildes\", comp);\n\t\tcomp = replaceXRanges(comp, options);\n\t\tdebug(\"xrange\", comp);\n\t\tcomp = replaceStars(comp, options);\n\t\tdebug(\"stars\", comp);\n\t\treturn comp;\n\t};\n\tconst isX = (id) => !id || id.toLowerCase() === \"x\" || id === \"*\";\n\tconst replaceTildes = (comp, options) => {\n\t\treturn comp.trim().split(/\\s+/).map((c) => replaceTilde(c, options)).join(\" \");\n\t};\n\tconst replaceTilde = (comp, options) => {\n\t\tconst r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];\n\t\treturn comp.replace(r, (_, M, m, p, pr) => {\n\t\t\tdebug(\"tilde\", comp, _, M, m, p, pr);\n\t\t\tlet ret;\n\t\t\tif (isX(M)) ret = \"\";\n\t\t\telse if (isX(m)) ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;\n\t\t\telse if (isX(p)) ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;\n\t\t\telse if (pr) {\n\t\t\t\tdebug(\"replaceTilde pr\", pr);\n\t\t\t\tret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n\t\t\t} else ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;\n\t\t\tdebug(\"tilde return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceCarets = (comp, options) => {\n\t\treturn comp.trim().split(/\\s+/).map((c) => replaceCaret(c, options)).join(\" \");\n\t};\n\tconst replaceCaret = (comp, options) => {\n\t\tdebug(\"caret\", comp, options);\n\t\tconst r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];\n\t\tconst z = options.includePrerelease ? \"-0\" : \"\";\n\t\treturn comp.replace(r, (_, M, m, p, pr) => {\n\t\t\tdebug(\"caret\", comp, _, M, m, p, pr);\n\t\t\tlet ret;\n\t\t\tif (isX(M)) ret = \"\";\n\t\t\telse if (isX(m)) ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;\n\t\t\telse if (isX(p)) if (M === \"0\") ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;\n\t\t\telse ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;\n\t\t\telse if (pr) {\n\t\t\t\tdebug(\"replaceCaret pr\", pr);\n\t\t\t\tif (M === \"0\") if (m === \"0\") ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;\n\t\t\t} else {\n\t\t\t\tdebug(\"no pr\");\n\t\t\t\tif (M === \"0\") if (m === \"0\") ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;\n\t\t\t\telse ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;\n\t\t\t}\n\t\t\tdebug(\"caret return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceXRanges = (comp, options) => {\n\t\tdebug(\"replaceXRanges\", comp, options);\n\t\treturn comp.split(/\\s+/).map((c) => replaceXRange(c, options)).join(\" \");\n\t};\n\tconst replaceXRange = (comp, options) => {\n\t\tcomp = comp.trim();\n\t\tconst r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];\n\t\treturn comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n\t\t\tdebug(\"xRange\", comp, ret, gtlt, M, m, p, pr);\n\t\t\tconst xM = isX(M);\n\t\t\tconst xm = xM || isX(m);\n\t\t\tconst xp = xm || isX(p);\n\t\t\tconst anyX = xp;\n\t\t\tif (gtlt === \"=\" && anyX) gtlt = \"\";\n\t\t\tpr = options.includePrerelease ? \"-0\" : \"\";\n\t\t\tif (xM) if (gtlt === \">\" || gtlt === \"<\") ret = \"<0.0.0-0\";\n\t\t\telse ret = \"*\";\n\t\t\telse if (gtlt && anyX) {\n\t\t\t\tif (xm) m = 0;\n\t\t\t\tp = 0;\n\t\t\t\tif (gtlt === \">\") {\n\t\t\t\t\tgtlt = \">=\";\n\t\t\t\t\tif (xm) {\n\t\t\t\t\t\tM = +M + 1;\n\t\t\t\t\t\tm = 0;\n\t\t\t\t\t\tp = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tm = +m + 1;\n\t\t\t\t\t\tp = 0;\n\t\t\t\t\t}\n\t\t\t\t} else if (gtlt === \"<=\") {\n\t\t\t\t\tgtlt = \"<\";\n\t\t\t\t\tif (xm) M = +M + 1;\n\t\t\t\t\telse m = +m + 1;\n\t\t\t\t}\n\t\t\t\tif (gtlt === \"<\") pr = \"-0\";\n\t\t\t\tret = `${gtlt + M}.${m}.${p}${pr}`;\n\t\t\t} else if (xm) ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;\n\t\t\telse if (xp) ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;\n\t\t\tdebug(\"xRange return\", ret);\n\t\t\treturn ret;\n\t\t});\n\t};\n\tconst replaceStars = (comp, options) => {\n\t\tdebug(\"replaceStars\", comp, options);\n\t\treturn comp.trim().replace(re[t.STAR], \"\");\n\t};\n\tconst replaceGTE0 = (comp, options) => {\n\t\tdebug(\"replaceGTE0\", comp, options);\n\t\treturn comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], \"\");\n\t};\n\tconst hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {\n\t\tif (isX(fM)) from = \"\";\n\t\telse if (isX(fm)) from = `>=${fM}.0.0${incPr ? \"-0\" : \"\"}`;\n\t\telse if (isX(fp)) from = `>=${fM}.${fm}.0${incPr ? \"-0\" : \"\"}`;\n\t\telse if (fpr) from = `>=${from}`;\n\t\telse from = `>=${from}${incPr ? \"-0\" : \"\"}`;\n\t\tif (isX(tM)) to = \"\";\n\t\telse if (isX(tm)) to = `<${+tM + 1}.0.0-0`;\n\t\telse if (isX(tp)) to = `<${tM}.${+tm + 1}.0-0`;\n\t\telse if (tpr) to = `<=${tM}.${tm}.${tp}-${tpr}`;\n\t\telse if (incPr) to = `<${tM}.${tm}.${+tp + 1}-0`;\n\t\telse to = `<=${to}`;\n\t\treturn `${from} ${to}`.trim();\n\t};\n\tconst testSet = (set, version, options) => {\n\t\tfor (let i = 0; i < set.length; i++) if (!set[i].test(version)) return false;\n\t\tif (version.prerelease.length && !options.includePrerelease) {\n\t\t\tfor (let i = 0; i < set.length; i++) {\n\t\t\t\tdebug(set[i].semver);\n\t\t\t\tif (set[i].semver === Comparator.ANY) continue;\n\t\t\t\tif (set[i].semver.prerelease.length > 0) {\n\t\t\t\t\tconst allowed = set[i].semver;\n\t\t\t\t\tif (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) return true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js\nvar require_comparator = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst ANY = Symbol(\"SemVer ANY\");\n\tmodule.exports = class Comparator {\n\t\tstatic get ANY() {\n\t\t\treturn ANY;\n\t\t}\n\t\tconstructor(comp, options) {\n\t\t\toptions = parseOptions(options);\n\t\t\tif (comp instanceof Comparator) if (comp.loose === !!options.loose) return comp;\n\t\t\telse comp = comp.value;\n\t\t\tcomp = comp.trim().split(/\\s+/).join(\" \");\n\t\t\tdebug(\"comparator\", comp, options);\n\t\t\tthis.options = options;\n\t\t\tthis.loose = !!options.loose;\n\t\t\tthis.parse(comp);\n\t\t\tif (this.semver === ANY) this.value = \"\";\n\t\t\telse this.value = this.operator + this.semver.version;\n\t\t\tdebug(\"comp\", this);\n\t\t}\n\t\tparse(comp) {\n\t\t\tconst r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];\n\t\t\tconst m = comp.match(r);\n\t\t\tif (!m) throw new TypeError(`Invalid comparator: ${comp}`);\n\t\t\tthis.operator = m[1] !== void 0 ? m[1] : \"\";\n\t\t\tif (this.operator === \"=\") this.operator = \"\";\n\t\t\tif (!m[2]) this.semver = ANY;\n\t\t\telse this.semver = new SemVer(m[2], this.options.loose);\n\t\t}\n\t\ttoString() {\n\t\t\treturn this.value;\n\t\t}\n\t\ttest(version) {\n\t\t\tdebug(\"Comparator.test\", version, this.options.loose);\n\t\t\tif (this.semver === ANY || version === ANY) return true;\n\t\t\tif (typeof version === \"string\") try {\n\t\t\t\tversion = new SemVer(version, this.options);\n\t\t\t} catch (er) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn cmp(version, this.operator, this.semver, this.options);\n\t\t}\n\t\tintersects(comp, options) {\n\t\t\tif (!(comp instanceof Comparator)) throw new TypeError(\"a Comparator is required\");\n\t\t\tif (this.operator === \"\") {\n\t\t\t\tif (this.value === \"\") return true;\n\t\t\t\treturn new Range(comp.value, options).test(this.value);\n\t\t\t} else if (comp.operator === \"\") {\n\t\t\t\tif (comp.value === \"\") return true;\n\t\t\t\treturn new Range(this.value, options).test(comp.semver);\n\t\t\t}\n\t\t\toptions = parseOptions(options);\n\t\t\tif (options.includePrerelease && (this.value === \"<0.0.0-0\" || comp.value === \"<0.0.0-0\")) return false;\n\t\t\tif (!options.includePrerelease && (this.value.startsWith(\"<0.0.0\") || comp.value.startsWith(\"<0.0.0\"))) return false;\n\t\t\tif (this.operator.startsWith(\">\") && comp.operator.startsWith(\">\")) return true;\n\t\t\tif (this.operator.startsWith(\"<\") && comp.operator.startsWith(\"<\")) return true;\n\t\t\tif (this.semver.version === comp.semver.version && this.operator.includes(\"=\") && comp.operator.includes(\"=\")) return true;\n\t\t\tif (cmp(this.semver, \"<\", comp.semver, options) && this.operator.startsWith(\">\") && comp.operator.startsWith(\"<\")) return true;\n\t\t\tif (cmp(this.semver, \">\", comp.semver, options) && this.operator.startsWith(\"<\") && comp.operator.startsWith(\">\")) return true;\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst parseOptions = require_parse_options();\n\tconst { safeRe: re, t } = require_re();\n\tconst cmp = require_cmp();\n\tconst debug = require_debug();\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js\nvar require_satisfies = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst satisfies = (version, range, options) => {\n\t\ttry {\n\t\t\trange = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn false;\n\t\t}\n\t\treturn range.test(version);\n\t};\n\tmodule.exports = satisfies;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js\nvar require_to_comparators = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(\" \").trim().split(\" \"));\n\tmodule.exports = toComparators;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js\nvar require_max_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst maxSatisfying = (versions, range, options) => {\n\t\tlet max = null;\n\t\tlet maxSV = null;\n\t\tlet rangeObj = null;\n\t\ttry {\n\t\t\trangeObj = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t\tversions.forEach((v) => {\n\t\t\tif (rangeObj.test(v)) {\n\t\t\t\tif (!max || maxSV.compare(v) === -1) {\n\t\t\t\t\tmax = v;\n\t\t\t\t\tmaxSV = new SemVer(max, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn max;\n\t};\n\tmodule.exports = maxSatisfying;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js\nvar require_min_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst minSatisfying = (versions, range, options) => {\n\t\tlet min = null;\n\t\tlet minSV = null;\n\t\tlet rangeObj = null;\n\t\ttry {\n\t\t\trangeObj = new Range(range, options);\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t\tversions.forEach((v) => {\n\t\t\tif (rangeObj.test(v)) {\n\t\t\t\tif (!min || minSV.compare(v) === 1) {\n\t\t\t\t\tmin = v;\n\t\t\t\t\tminSV = new SemVer(min, options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn min;\n\t};\n\tmodule.exports = minSatisfying;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js\nvar require_min_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Range = require_range();\n\tconst gt = require_gt();\n\tconst minVersion = (range, loose) => {\n\t\trange = new Range(range, loose);\n\t\tlet minver = new SemVer(\"0.0.0\");\n\t\tif (range.test(minver)) return minver;\n\t\tminver = new SemVer(\"0.0.0-0\");\n\t\tif (range.test(minver)) return minver;\n\t\tminver = null;\n\t\tfor (let i = 0; i < range.set.length; ++i) {\n\t\t\tconst comparators = range.set[i];\n\t\t\tlet setMin = null;\n\t\t\tcomparators.forEach((comparator) => {\n\t\t\t\tconst compver = new SemVer(comparator.semver.version);\n\t\t\t\tswitch (comparator.operator) {\n\t\t\t\t\tcase \">\":\n\t\t\t\t\t\tif (compver.prerelease.length === 0) compver.patch++;\n\t\t\t\t\t\telse compver.prerelease.push(0);\n\t\t\t\t\t\tcompver.raw = compver.format();\n\t\t\t\t\tcase \"\":\n\t\t\t\t\tcase \">=\":\n\t\t\t\t\t\tif (!setMin || gt(compver, setMin)) setMin = compver;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"<\":\n\t\t\t\t\tcase \"<=\": break;\n\t\t\t\t\tdefault: throw new Error(`Unexpected operation: ${comparator.operator}`);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (setMin && (!minver || gt(minver, setMin))) minver = setMin;\n\t\t}\n\t\tif (minver && range.test(minver)) return minver;\n\t\treturn null;\n\t};\n\tmodule.exports = minVersion;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js\nvar require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst validRange = (range, options) => {\n\t\ttry {\n\t\t\treturn new Range(range, options).range || \"*\";\n\t\t} catch (er) {\n\t\t\treturn null;\n\t\t}\n\t};\n\tmodule.exports = validRange;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js\nvar require_outside = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst SemVer = require_semver$1();\n\tconst Comparator = require_comparator();\n\tconst { ANY } = Comparator;\n\tconst Range = require_range();\n\tconst satisfies = require_satisfies();\n\tconst gt = require_gt();\n\tconst lt = require_lt();\n\tconst lte = require_lte();\n\tconst gte = require_gte();\n\tconst outside = (version, range, hilo, options) => {\n\t\tversion = new SemVer(version, options);\n\t\trange = new Range(range, options);\n\t\tlet gtfn, ltefn, ltfn, comp, ecomp;\n\t\tswitch (hilo) {\n\t\t\tcase \">\":\n\t\t\t\tgtfn = gt;\n\t\t\t\tltefn = lte;\n\t\t\t\tltfn = lt;\n\t\t\t\tcomp = \">\";\n\t\t\t\tecomp = \">=\";\n\t\t\t\tbreak;\n\t\t\tcase \"<\":\n\t\t\t\tgtfn = lt;\n\t\t\t\tltefn = gte;\n\t\t\t\tltfn = gt;\n\t\t\t\tcomp = \"<\";\n\t\t\t\tecomp = \"<=\";\n\t\t\t\tbreak;\n\t\t\tdefault: throw new TypeError(\"Must provide a hilo val of \\\"<\\\" or \\\">\\\"\");\n\t\t}\n\t\tif (satisfies(version, range, options)) return false;\n\t\tfor (let i = 0; i < range.set.length; ++i) {\n\t\t\tconst comparators = range.set[i];\n\t\t\tlet high = null;\n\t\t\tlet low = null;\n\t\t\tcomparators.forEach((comparator) => {\n\t\t\t\tif (comparator.semver === ANY) comparator = new Comparator(\">=0.0.0\");\n\t\t\t\thigh = high || comparator;\n\t\t\t\tlow = low || comparator;\n\t\t\t\tif (gtfn(comparator.semver, high.semver, options)) high = comparator;\n\t\t\t\telse if (ltfn(comparator.semver, low.semver, options)) low = comparator;\n\t\t\t});\n\t\t\tif (high.operator === comp || high.operator === ecomp) return false;\n\t\t\tif ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) return false;\n\t\t\telse if (low.operator === ecomp && ltfn(version, low.semver)) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tmodule.exports = outside;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js\nvar require_gtr = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst outside = require_outside();\n\tconst gtr = (version, range, options) => outside(version, range, \">\", options);\n\tmodule.exports = gtr;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js\nvar require_ltr = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst outside = require_outside();\n\tconst ltr = (version, range, options) => outside(version, range, \"<\", options);\n\tmodule.exports = ltr;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js\nvar require_intersects = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst intersects = (r1, r2, options) => {\n\t\tr1 = new Range(r1, options);\n\t\tr2 = new Range(r2, options);\n\t\treturn r1.intersects(r2, options);\n\t};\n\tmodule.exports = intersects;\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js\nvar require_simplify = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst satisfies = require_satisfies();\n\tconst compare = require_compare();\n\tmodule.exports = (versions, range, options) => {\n\t\tconst set = [];\n\t\tlet first = null;\n\t\tlet prev = null;\n\t\tconst v = versions.sort((a, b) => compare(a, b, options));\n\t\tfor (const version of v) if (satisfies(version, range, options)) {\n\t\t\tprev = version;\n\t\t\tif (!first) first = version;\n\t\t} else {\n\t\t\tif (prev) set.push([first, prev]);\n\t\t\tprev = null;\n\t\t\tfirst = null;\n\t\t}\n\t\tif (first) set.push([first, null]);\n\t\tconst ranges = [];\n\t\tfor (const [min, max] of set) if (min === max) ranges.push(min);\n\t\telse if (!max && min === v[0]) ranges.push(\"*\");\n\t\telse if (!max) ranges.push(`>=${min}`);\n\t\telse if (min === v[0]) ranges.push(`<=${max}`);\n\t\telse ranges.push(`${min} - ${max}`);\n\t\tconst simplified = ranges.join(\" || \");\n\t\tconst original = typeof range.raw === \"string\" ? range.raw : String(range);\n\t\treturn simplified.length < original.length ? simplified : range;\n\t};\n}));\n//#endregion\n//#region ../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js\nvar require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst Range = require_range();\n\tconst Comparator = require_comparator();\n\tconst { ANY } = Comparator;\n\tconst satisfies = require_satisfies();\n\tconst compare = require_compare();\n\tconst subset = (sub, dom, options = {}) => {\n\t\tif (sub === dom) return true;\n\t\tsub = new Range(sub, options);\n\t\tdom = new Range(dom, options);\n\t\tlet sawNonNull = false;\n\t\tOUTER: for (const simpleSub of sub.set) {\n\t\t\tfor (const simpleDom of dom.set) {\n\t\t\t\tconst isSub = simpleSubset(simpleSub, simpleDom, options);\n\t\t\t\tsawNonNull = sawNonNull || isSub !== null;\n\t\t\t\tif (isSub) continue OUTER;\n\t\t\t}\n\t\t\tif (sawNonNull) return false;\n\t\t}\n\t\treturn true;\n\t};\n\tconst minimumVersionWithPreRelease = [new Comparator(\">=0.0.0-0\")];\n\tconst minimumVersion = [new Comparator(\">=0.0.0\")];\n\tconst simpleSubset = (sub, dom, options) => {\n\t\tif (sub === dom) return true;\n\t\tif (sub.length === 1 && sub[0].semver === ANY) if (dom.length === 1 && dom[0].semver === ANY) return true;\n\t\telse if (options.includePrerelease) sub = minimumVersionWithPreRelease;\n\t\telse sub = minimumVersion;\n\t\tif (dom.length === 1 && dom[0].semver === ANY) if (options.includePrerelease) return true;\n\t\telse dom = minimumVersion;\n\t\tconst eqSet = /* @__PURE__ */ new Set();\n\t\tlet gt, lt;\n\t\tfor (const c of sub) if (c.operator === \">\" || c.operator === \">=\") gt = higherGT(gt, c, options);\n\t\telse if (c.operator === \"<\" || c.operator === \"<=\") lt = lowerLT(lt, c, options);\n\t\telse eqSet.add(c.semver);\n\t\tif (eqSet.size > 1) return null;\n\t\tlet gtltComp;\n\t\tif (gt && lt) {\n\t\t\tgtltComp = compare(gt.semver, lt.semver, options);\n\t\t\tif (gtltComp > 0) return null;\n\t\t\telse if (gtltComp === 0 && (gt.operator !== \">=\" || lt.operator !== \"<=\")) return null;\n\t\t}\n\t\tfor (const eq of eqSet) {\n\t\t\tif (gt && !satisfies(eq, String(gt), options)) return null;\n\t\t\tif (lt && !satisfies(eq, String(lt), options)) return null;\n\t\t\tfor (const c of dom) if (!satisfies(eq, String(c), options)) return false;\n\t\t\treturn true;\n\t\t}\n\t\tlet higher, lower;\n\t\tlet hasDomLT, hasDomGT;\n\t\tlet needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;\n\t\tlet needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;\n\t\tif (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === \"<\" && needDomLTPre.prerelease[0] === 0) needDomLTPre = false;\n\t\tfor (const c of dom) {\n\t\t\thasDomGT = hasDomGT || c.operator === \">\" || c.operator === \">=\";\n\t\t\thasDomLT = hasDomLT || c.operator === \"<\" || c.operator === \"<=\";\n\t\t\tif (gt) {\n\t\t\t\tif (needDomGTPre) {\n\t\t\t\t\tif (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) needDomGTPre = false;\n\t\t\t\t}\n\t\t\t\tif (c.operator === \">\" || c.operator === \">=\") {\n\t\t\t\t\thigher = higherGT(gt, c, options);\n\t\t\t\t\tif (higher === c && higher !== gt) return false;\n\t\t\t\t} else if (gt.operator === \">=\" && !satisfies(gt.semver, String(c), options)) return false;\n\t\t\t}\n\t\t\tif (lt) {\n\t\t\t\tif (needDomLTPre) {\n\t\t\t\t\tif (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) needDomLTPre = false;\n\t\t\t\t}\n\t\t\t\tif (c.operator === \"<\" || c.operator === \"<=\") {\n\t\t\t\t\tlower = lowerLT(lt, c, options);\n\t\t\t\t\tif (lower === c && lower !== lt) return false;\n\t\t\t\t} else if (lt.operator === \"<=\" && !satisfies(lt.semver, String(c), options)) return false;\n\t\t\t}\n\t\t\tif (!c.operator && (lt || gt) && gtltComp !== 0) return false;\n\t\t}\n\t\tif (gt && hasDomLT && !lt && gtltComp !== 0) return false;\n\t\tif (lt && hasDomGT && !gt && gtltComp !== 0) return false;\n\t\tif (needDomGTPre || needDomLTPre) return false;\n\t\treturn true;\n\t};\n\tconst higherGT = (a, b, options) => {\n\t\tif (!a) return b;\n\t\tconst comp = compare(a.semver, b.semver, options);\n\t\treturn comp > 0 ? a : comp < 0 ? b : b.operator === \">\" && a.operator === \">=\" ? b : a;\n\t};\n\tconst lowerLT = (a, b, options) => {\n\t\tif (!a) return b;\n\t\tconst comp = compare(a.semver, b.semver, options);\n\t\treturn comp < 0 ? a : comp > 0 ? b : b.operator === \"<\" && a.operator === \"<=\" ? b : a;\n\t};\n\tmodule.exports = subset;\n}));\n//#endregion\n//#region src/semverSatisfies.ts\nvar import_semver = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tconst internalRe = require_re();\n\tconst constants = require_constants();\n\tconst SemVer = require_semver$1();\n\tconst identifiers = require_identifiers();\n\tmodule.exports = {\n\t\tparse: require_parse(),\n\t\tvalid: require_valid$1(),\n\t\tclean: require_clean(),\n\t\tinc: require_inc(),\n\t\tdiff: require_diff(),\n\t\tmajor: require_major(),\n\t\tminor: require_minor(),\n\t\tpatch: require_patch(),\n\t\tprerelease: require_prerelease(),\n\t\tcompare: require_compare(),\n\t\trcompare: require_rcompare(),\n\t\tcompareLoose: require_compare_loose(),\n\t\tcompareBuild: require_compare_build(),\n\t\tsort: require_sort(),\n\t\trsort: require_rsort(),\n\t\tgt: require_gt(),\n\t\tlt: require_lt(),\n\t\teq: require_eq(),\n\t\tneq: require_neq(),\n\t\tgte: require_gte(),\n\t\tlte: require_lte(),\n\t\tcmp: require_cmp(),\n\t\tcoerce: require_coerce(),\n\t\tComparator: require_comparator(),\n\t\tRange: require_range(),\n\t\tsatisfies: require_satisfies(),\n\t\ttoComparators: require_to_comparators(),\n\t\tmaxSatisfying: require_max_satisfying(),\n\t\tminSatisfying: require_min_satisfying(),\n\t\tminVersion: require_min_version(),\n\t\tvalidRange: require_valid(),\n\t\toutside: require_outside(),\n\t\tgtr: require_gtr(),\n\t\tltr: require_ltr(),\n\t\tintersects: require_intersects(),\n\t\tsimplifyRange: require_simplify(),\n\t\tsubset: require_subset(),\n\t\tSemVer,\n\t\tre: internalRe.re,\n\t\tsrc: internalRe.src,\n\t\ttokens: internalRe.t,\n\t\tSEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n\t\tRELEASE_TYPES: constants.RELEASE_TYPES,\n\t\tcompareIdentifiers: identifiers.compareIdentifiers,\n\t\trcompareIdentifiers: identifiers.rcompareIdentifiers\n\t};\n})))(), 1);\nconst semverSatisfies = (targetAppVersion, currentVersion) => {\n\tconst currentCoerce = import_semver.default.coerce(currentVersion);\n\tif (!currentCoerce) return false;\n\treturn import_semver.default.satisfies(currentCoerce.version, targetAppVersion);\n};\n//#endregion\n//#region src/filterCompatibleAppVersions.ts\n/**\n* Filters target app versions that are compatible with the current app version.\n* Returns only versions that are compatible with the current version according to semver rules.\n*\n* @param targetAppVersionList - List of target app versions to filter\n* @param currentVersion - Current app version\n* @returns Array of target app versions compatible with the current version\n*/\nconst filterCompatibleAppVersions = (targetAppVersionList, currentVersion) => {\n\treturn targetAppVersionList.filter((version) => semverSatisfies(version, currentVersion)).sort((a, b) => b.localeCompare(a));\n};\n//#endregion\n//#region src/getUpdateInfo.ts\nconst INIT_BUNDLE_ROLLBACK_UPDATE_INFO = {\n\tmessage: null,\n\tid: NIL_UUID,\n\tshouldForceUpdate: true,\n\tstatus: \"ROLLBACK\",\n\tstorageUri: null,\n\tfileHash: null\n};\nconst makeResponse = (bundle, status) => ({\n\tid: bundle.id,\n\tmessage: bundle.message,\n\tshouldForceUpdate: status === \"ROLLBACK\" ? true : bundle.shouldForceUpdate,\n\tstatus,\n\tstorageUri: bundle.storageUri,\n\tfileHash: bundle.fileHash\n});\nconst isEligibleUpdateCandidate = (bundle, cohort) => {\n\treturn isCohortEligibleForUpdate(bundle.id, cohort, bundle.rolloutCohortCount, bundle.targetCohorts);\n};\nconst findLatestEligibleUpdateCandidate = (bundles, bundleId, cohort) => {\n\tlet updateCandidate = null;\n\tfor (const bundle of bundles) if (bundle.id.localeCompare(bundleId) > 0 && isEligibleUpdateCandidate(bundle, cohort) && (!updateCandidate || bundle.id.localeCompare(updateCandidate.id) > 0)) updateCandidate = bundle;\n\treturn updateCandidate;\n};\nconst getUpdateInfo = async (bundles, args) => {\n\tswitch (args._updateStrategy) {\n\t\tcase \"appVersion\": return appVersionStrategy(bundles, args);\n\t\tcase \"fingerprint\": return fingerprintStrategy(bundles, args);\n\t\tdefault: return null;\n\t}\n};\nconst appVersionStrategy = async (bundles, { channel = \"production\", minBundleId = NIL_UUID, platform, appVersion, bundleId, cohort }) => {\n\tconst candidateBundles = [];\n\tfor (const b of bundles) {\n\t\tif (b.platform !== platform || b.channel !== channel || !b.targetAppVersion || !semverSatisfies(b.targetAppVersion, appVersion) || !b.enabled || minBundleId && b.id.localeCompare(minBundleId) < 0) continue;\n\t\tcandidateBundles.push(b);\n\t}\n\tif (candidateBundles.length === 0) {\n\t\tif (bundleId === NIL_UUID || minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\t\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n\t}\n\tlet rollbackCandidate = null;\n\tlet currentBundle;\n\tfor (const b of candidateBundles) if (b.id === bundleId) currentBundle = b;\n\telse if (bundleId !== NIL_UUID && b.id.localeCompare(bundleId) < 0) {\n\t\tif (!rollbackCandidate || b.id.localeCompare(rollbackCandidate.id) > 0) rollbackCandidate = b;\n\t}\n\tconst updateCandidate = findLatestEligibleUpdateCandidate(candidateBundles, bundleId, cohort);\n\tconst currentBundleEligible = currentBundle ? isEligibleUpdateCandidate(currentBundle, cohort) : false;\n\tif (bundleId === NIL_UUID) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (currentBundleEligible) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\tif (rollbackCandidate) return makeResponse(rollbackCandidate, \"ROLLBACK\");\n\tif (minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n};\nconst fingerprintStrategy = async (bundles, { channel = \"production\", minBundleId = NIL_UUID, platform, fingerprintHash, bundleId, cohort }) => {\n\tconst candidateBundles = [];\n\tfor (const b of bundles) {\n\t\tif (b.platform !== platform || b.channel !== channel || !b.fingerprintHash || b.fingerprintHash !== fingerprintHash || !b.enabled || minBundleId && b.id.localeCompare(minBundleId) < 0) continue;\n\t\tcandidateBundles.push(b);\n\t}\n\tif (candidateBundles.length === 0) {\n\t\tif (bundleId === NIL_UUID || minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\t\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n\t}\n\tlet rollbackCandidate = null;\n\tlet currentBundle;\n\tfor (const b of candidateBundles) if (b.id === bundleId) currentBundle = b;\n\telse if (bundleId !== NIL_UUID && b.id.localeCompare(bundleId) < 0) {\n\t\tif (!rollbackCandidate || b.id.localeCompare(rollbackCandidate.id) > 0) rollbackCandidate = b;\n\t}\n\tconst updateCandidate = findLatestEligibleUpdateCandidate(candidateBundles, bundleId, cohort);\n\tconst currentBundleEligible = currentBundle ? isEligibleUpdateCandidate(currentBundle, cohort) : false;\n\tif (bundleId === NIL_UUID) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (currentBundleEligible) {\n\t\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\t\treturn null;\n\t}\n\tif (updateCandidate) return makeResponse(updateCandidate, \"UPDATE\");\n\tif (rollbackCandidate) return makeResponse(rollbackCandidate, \"ROLLBACK\");\n\tif (minBundleId && bundleId.localeCompare(minBundleId) <= 0) return null;\n\treturn INIT_BUNDLE_ROLLBACK_UPDATE_INFO;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/buffer_utils.js\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nfunction concat(...buffers) {\n\tconst size = buffers.reduce((acc, { length }) => acc + length, 0);\n\tconst buf = new Uint8Array(size);\n\tlet i = 0;\n\tfor (const buffer of buffers) {\n\t\tbuf.set(buffer, i);\n\t\ti += buffer.length;\n\t}\n\treturn buf;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/base64.js\nfunction encodeBase64(input) {\n\tif (Uint8Array.prototype.toBase64) return input.toBase64();\n\tconst CHUNK_SIZE = 32768;\n\tconst arr = [];\n\tfor (let i = 0; i < input.length; i += CHUNK_SIZE) arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n\treturn btoa(arr.join(\"\"));\n}\nfunction decodeBase64(encoded) {\n\tif (Uint8Array.fromBase64) return Uint8Array.fromBase64(encoded);\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\tfor (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n\treturn bytes;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/util/base64url.js\nfunction decode(input) {\n\tif (Uint8Array.fromBase64) return Uint8Array.fromBase64(typeof input === \"string\" ? input : decoder.decode(input), { alphabet: \"base64url\" });\n\tlet encoded = input;\n\tif (encoded instanceof Uint8Array) encoded = decoder.decode(encoded);\n\tencoded = encoded.replace(/-/g, \"+\").replace(/_/g, \"/\").replace(/\\s/g, \"\");\n\ttry {\n\t\treturn decodeBase64(encoded);\n\t} catch {\n\t\tthrow new TypeError(\"The input to be decoded is not correctly encoded.\");\n\t}\n}\nfunction encode(input) {\n\tlet unencoded = input;\n\tif (typeof unencoded === \"string\") unencoded = encoder.encode(unencoded);\n\tif (Uint8Array.prototype.toBase64) return unencoded.toBase64({\n\t\talphabet: \"base64url\",\n\t\tomitPadding: true\n\t});\n\treturn encodeBase64(unencoded).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/util/errors.js\nvar JOSEError = class extends Error {\n\tstatic code = \"ERR_JOSE_GENERIC\";\n\tcode = \"ERR_JOSE_GENERIC\";\n\tconstructor(message, options) {\n\t\tsuper(message, options);\n\t\tthis.name = this.constructor.name;\n\t\tError.captureStackTrace?.(this, this.constructor);\n\t}\n};\nvar JWTClaimValidationFailed = class extends JOSEError {\n\tstatic code = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n\tcode = \"ERR_JWT_CLAIM_VALIDATION_FAILED\";\n\tclaim;\n\treason;\n\tpayload;\n\tconstructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n\t\tsuper(message, { cause: {\n\t\t\tclaim,\n\t\t\treason,\n\t\t\tpayload\n\t\t} });\n\t\tthis.claim = claim;\n\t\tthis.reason = reason;\n\t\tthis.payload = payload;\n\t}\n};\nvar JWTExpired = class extends JOSEError {\n\tstatic code = \"ERR_JWT_EXPIRED\";\n\tcode = \"ERR_JWT_EXPIRED\";\n\tclaim;\n\treason;\n\tpayload;\n\tconstructor(message, payload, claim = \"unspecified\", reason = \"unspecified\") {\n\t\tsuper(message, { cause: {\n\t\t\tclaim,\n\t\t\treason,\n\t\t\tpayload\n\t\t} });\n\t\tthis.claim = claim;\n\t\tthis.reason = reason;\n\t\tthis.payload = payload;\n\t}\n};\nvar JOSEAlgNotAllowed = class extends JOSEError {\n\tstatic code = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n\tcode = \"ERR_JOSE_ALG_NOT_ALLOWED\";\n};\nvar JOSENotSupported = class extends JOSEError {\n\tstatic code = \"ERR_JOSE_NOT_SUPPORTED\";\n\tcode = \"ERR_JOSE_NOT_SUPPORTED\";\n};\nvar JWSInvalid = class extends JOSEError {\n\tstatic code = \"ERR_JWS_INVALID\";\n\tcode = \"ERR_JWS_INVALID\";\n};\nvar JWTInvalid = class extends JOSEError {\n\tstatic code = \"ERR_JWT_INVALID\";\n\tcode = \"ERR_JWT_INVALID\";\n};\nvar JWSSignatureVerificationFailed = class extends JOSEError {\n\tstatic code = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n\tcode = \"ERR_JWS_SIGNATURE_VERIFICATION_FAILED\";\n\tconstructor(message = \"signature verification failed\", options) {\n\t\tsuper(message, options);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/crypto_key.js\nfunction unusable(name, prop = \"algorithm.name\") {\n\treturn /* @__PURE__ */ new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n\treturn algorithm.name === name;\n}\nfunction getHashLength(hash) {\n\treturn parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n\tswitch (alg) {\n\t\tcase \"ES256\": return \"P-256\";\n\t\tcase \"ES384\": return \"P-384\";\n\t\tcase \"ES512\": return \"P-521\";\n\t\tdefault: throw new Error(\"unreachable\");\n\t}\n}\nfunction checkUsage(key, usage) {\n\tif (usage && !key.usages.includes(usage)) throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`);\n}\nfunction checkSigCryptoKey(key, alg, usage) {\n\tswitch (alg) {\n\t\tcase \"HS256\":\n\t\tcase \"HS384\":\n\t\tcase \"HS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"HMAC\")) throw unusable(\"HMAC\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"RS256\":\n\t\tcase \"RS384\":\n\t\tcase \"RS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"RSASSA-PKCS1-v1_5\")) throw unusable(\"RSASSA-PKCS1-v1_5\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"PS256\":\n\t\tcase \"PS384\":\n\t\tcase \"PS512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"RSA-PSS\")) throw unusable(\"RSA-PSS\");\n\t\t\tconst expected = parseInt(alg.slice(2), 10);\n\t\t\tif (getHashLength(key.algorithm.hash) !== expected) throw unusable(`SHA-${expected}`, \"algorithm.hash\");\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Ed25519\":\n\t\tcase \"EdDSA\":\n\t\t\tif (!isAlgorithm(key.algorithm, \"Ed25519\")) throw unusable(\"Ed25519\");\n\t\t\tbreak;\n\t\tcase \"ES256\":\n\t\tcase \"ES384\":\n\t\tcase \"ES512\": {\n\t\t\tif (!isAlgorithm(key.algorithm, \"ECDSA\")) throw unusable(\"ECDSA\");\n\t\t\tconst expected = getNamedCurve(alg);\n\t\t\tif (key.algorithm.namedCurve !== expected) throw unusable(expected, \"algorithm.namedCurve\");\n\t\t\tbreak;\n\t\t}\n\t\tdefault: throw new TypeError(\"CryptoKey does not support this operation\");\n\t}\n\tcheckUsage(key, usage);\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/invalid_key_input.js\nfunction message(msg, actual, ...types) {\n\ttypes = types.filter(Boolean);\n\tif (types.length > 2) {\n\t\tconst last = types.pop();\n\t\tmsg += `one of type ${types.join(\", \")}, or ${last}.`;\n\t} else if (types.length === 2) msg += `one of type ${types[0]} or ${types[1]}.`;\n\telse msg += `of type ${types[0]}.`;\n\tif (actual == null) msg += ` Received ${actual}`;\n\telse if (typeof actual === \"function\" && actual.name) msg += ` Received function ${actual.name}`;\n\telse if (typeof actual === \"object\" && actual != null) {\n\t\tif (actual.constructor?.name) msg += ` Received an instance of ${actual.constructor.name}`;\n\t}\n\treturn msg;\n}\nvar invalid_key_input_default = (actual, ...types) => {\n\treturn message(\"Key must be \", actual, ...types);\n};\nfunction withAlg(alg, actual, ...types) {\n\treturn message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_key_like.js\nfunction isCryptoKey(key) {\n\treturn key?.[Symbol.toStringTag] === \"CryptoKey\";\n}\nfunction isKeyObject(key) {\n\treturn key?.[Symbol.toStringTag] === \"KeyObject\";\n}\nvar is_key_like_default = (key) => {\n\treturn isCryptoKey(key) || isKeyObject(key);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_disjoint.js\nvar is_disjoint_default = (...headers) => {\n\tconst sources = headers.filter(Boolean);\n\tif (sources.length === 0 || sources.length === 1) return true;\n\tlet acc;\n\tfor (const header of sources) {\n\t\tconst parameters = Object.keys(header);\n\t\tif (!acc || acc.size === 0) {\n\t\t\tacc = new Set(parameters);\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const parameter of parameters) {\n\t\t\tif (acc.has(parameter)) return false;\n\t\t\tacc.add(parameter);\n\t\t}\n\t}\n\treturn true;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_object.js\nfunction isObjectLike(value) {\n\treturn typeof value === \"object\" && value !== null;\n}\nvar is_object_default = (input) => {\n\tif (!isObjectLike(input) || Object.prototype.toString.call(input) !== \"[object Object]\") return false;\n\tif (Object.getPrototypeOf(input) === null) return true;\n\tlet proto = input;\n\twhile (Object.getPrototypeOf(proto) !== null) proto = Object.getPrototypeOf(proto);\n\treturn Object.getPrototypeOf(input) === proto;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/check_key_length.js\nvar check_key_length_default = (alg, key) => {\n\tif (alg.startsWith(\"RS\") || alg.startsWith(\"PS\")) {\n\t\tconst { modulusLength } = key.algorithm;\n\t\tif (typeof modulusLength !== \"number\" || modulusLength < 2048) throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/jwk_to_key.js\nfunction subtleMapping(jwk) {\n\tlet algorithm;\n\tlet keyUsages;\n\tswitch (jwk.kty) {\n\t\tcase \"RSA\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"PS256\":\n\t\t\t\tcase \"PS384\":\n\t\t\t\tcase \"PS512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSA-PSS\",\n\t\t\t\t\t\thash: `SHA-${jwk.alg.slice(-3)}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RS256\":\n\t\t\t\tcase \"RS384\":\n\t\t\t\tcase \"RS512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSASSA-PKCS1-v1_5\",\n\t\t\t\t\t\thash: `SHA-${jwk.alg.slice(-3)}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"RSA-OAEP\":\n\t\t\t\tcase \"RSA-OAEP-256\":\n\t\t\t\tcase \"RSA-OAEP-384\":\n\t\t\t\tcase \"RSA-OAEP-512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"RSA-OAEP\",\n\t\t\t\t\t\thash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}`\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"decrypt\", \"unwrapKey\"] : [\"encrypt\", \"wrapKey\"];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"EC\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"ES256\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-256\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ES384\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-384\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ES512\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDSA\",\n\t\t\t\t\t\tnamedCurve: \"P-521\"\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ECDH-ES\":\n\t\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\t\tcase \"ECDH-ES+A256KW\":\n\t\t\t\t\talgorithm = {\n\t\t\t\t\t\tname: \"ECDH\",\n\t\t\t\t\t\tnamedCurve: jwk.crv\n\t\t\t\t\t};\n\t\t\t\t\tkeyUsages = jwk.d ? [\"deriveBits\"] : [];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"OKP\":\n\t\t\tswitch (jwk.alg) {\n\t\t\t\tcase \"Ed25519\":\n\t\t\t\tcase \"EdDSA\":\n\t\t\t\t\talgorithm = { name: \"Ed25519\" };\n\t\t\t\t\tkeyUsages = jwk.d ? [\"sign\"] : [\"verify\"];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ECDH-ES\":\n\t\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\t\tcase \"ECDH-ES+A256KW\":\n\t\t\t\t\talgorithm = { name: jwk.crv };\n\t\t\t\t\tkeyUsages = jwk.d ? [\"deriveBits\"] : [];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"alg\\\" (Algorithm) Parameter value\");\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault: throw new JOSENotSupported(\"Invalid or unsupported JWK \\\"kty\\\" (Key Type) Parameter value\");\n\t}\n\treturn {\n\t\talgorithm,\n\t\tkeyUsages\n\t};\n}\nvar jwk_to_key_default = async (jwk) => {\n\tif (!jwk.alg) throw new TypeError(\"\\\"alg\\\" argument is required when \\\"jwk.alg\\\" is not present\");\n\tconst { algorithm, keyUsages } = subtleMapping(jwk);\n\tconst keyData = { ...jwk };\n\tdelete keyData.alg;\n\tdelete keyData.use;\n\treturn crypto.subtle.importKey(\"jwk\", keyData, algorithm, jwk.ext ?? (jwk.d ? false : true), jwk.key_ops ?? keyUsages);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/validate_crit.js\nvar validate_crit_default = (Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) => {\n\tif (joseHeader.crit !== void 0 && protectedHeader?.crit === void 0) throw new Err(\"\\\"crit\\\" (Critical) Header Parameter MUST be integrity protected\");\n\tif (!protectedHeader || protectedHeader.crit === void 0) return /* @__PURE__ */ new Set();\n\tif (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input) => typeof input !== \"string\" || input.length === 0)) throw new Err(\"\\\"crit\\\" (Critical) Header Parameter MUST be an array of non-empty strings when present\");\n\tlet recognized;\n\tif (recognizedOption !== void 0) recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n\telse recognized = recognizedDefault;\n\tfor (const parameter of protectedHeader.crit) {\n\t\tif (!recognized.has(parameter)) throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n\t\tif (joseHeader[parameter] === void 0) throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n\t\tif (recognized.get(parameter) && protectedHeader[parameter] === void 0) throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n\t}\n\treturn new Set(protectedHeader.crit);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/validate_algorithms.js\nvar validate_algorithms_default = (option, algorithms) => {\n\tif (algorithms !== void 0 && (!Array.isArray(algorithms) || algorithms.some((s) => typeof s !== \"string\"))) throw new TypeError(`\"${option}\" option must be an array of strings`);\n\tif (!algorithms) return;\n\treturn new Set(algorithms);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/is_jwk.js\nfunction isJWK(key) {\n\treturn is_object_default(key) && typeof key.kty === \"string\";\n}\nfunction isPrivateJWK(key) {\n\treturn key.kty !== \"oct\" && typeof key.d === \"string\";\n}\nfunction isPublicJWK(key) {\n\treturn key.kty !== \"oct\" && typeof key.d === \"undefined\";\n}\nfunction isSecretJWK(key) {\n\treturn key.kty === \"oct\" && typeof key.k === \"string\";\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/normalize_key.js\nlet cache;\nconst handleJWK = async (key, jwk, alg, freeze = false) => {\n\tcache ||= /* @__PURE__ */ new WeakMap();\n\tlet cached = cache.get(key);\n\tif (cached?.[alg]) return cached[alg];\n\tconst cryptoKey = await jwk_to_key_default({\n\t\t...jwk,\n\t\talg\n\t});\n\tif (freeze) Object.freeze(key);\n\tif (!cached) cache.set(key, { [alg]: cryptoKey });\n\telse cached[alg] = cryptoKey;\n\treturn cryptoKey;\n};\nconst handleKeyObject = (keyObject, alg) => {\n\tcache ||= /* @__PURE__ */ new WeakMap();\n\tlet cached = cache.get(keyObject);\n\tif (cached?.[alg]) return cached[alg];\n\tconst isPublic = keyObject.type === \"public\";\n\tconst extractable = isPublic ? true : false;\n\tlet cryptoKey;\n\tif (keyObject.asymmetricKeyType === \"x25519\") {\n\t\tswitch (alg) {\n\t\t\tcase \"ECDH-ES\":\n\t\t\tcase \"ECDH-ES+A128KW\":\n\t\t\tcase \"ECDH-ES+A192KW\":\n\t\t\tcase \"ECDH-ES+A256KW\": break;\n\t\t\tdefault: throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\t}\n\t\tcryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : [\"deriveBits\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"ed25519\") {\n\t\tif (alg !== \"EdDSA\" && alg !== \"Ed25519\") throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\tcryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"rsa\") {\n\t\tlet hash;\n\t\tswitch (alg) {\n\t\t\tcase \"RSA-OAEP\":\n\t\t\t\thash = \"SHA-1\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS256\":\n\t\t\tcase \"PS256\":\n\t\t\tcase \"RSA-OAEP-256\":\n\t\t\t\thash = \"SHA-256\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS384\":\n\t\t\tcase \"PS384\":\n\t\t\tcase \"RSA-OAEP-384\":\n\t\t\t\thash = \"SHA-384\";\n\t\t\t\tbreak;\n\t\t\tcase \"RS512\":\n\t\t\tcase \"PS512\":\n\t\t\tcase \"RSA-OAEP-512\":\n\t\t\t\thash = \"SHA-512\";\n\t\t\t\tbreak;\n\t\t\tdefault: throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\t}\n\t\tif (alg.startsWith(\"RSA-OAEP\")) return keyObject.toCryptoKey({\n\t\t\tname: \"RSA-OAEP\",\n\t\t\thash\n\t\t}, extractable, isPublic ? [\"encrypt\"] : [\"decrypt\"]);\n\t\tcryptoKey = keyObject.toCryptoKey({\n\t\t\tname: alg.startsWith(\"PS\") ? \"RSA-PSS\" : \"RSASSA-PKCS1-v1_5\",\n\t\t\thash\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t}\n\tif (keyObject.asymmetricKeyType === \"ec\") {\n\t\tconst namedCurve = new Map([\n\t\t\t[\"prime256v1\", \"P-256\"],\n\t\t\t[\"secp384r1\", \"P-384\"],\n\t\t\t[\"secp521r1\", \"P-521\"]\n\t\t]).get(keyObject.asymmetricKeyDetails?.namedCurve);\n\t\tif (!namedCurve) throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\t\tif (alg === \"ES256\" && namedCurve === \"P-256\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg === \"ES384\" && namedCurve === \"P-384\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg === \"ES512\" && namedCurve === \"P-521\") cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve\n\t\t}, extractable, [isPublic ? \"verify\" : \"sign\"]);\n\t\tif (alg.startsWith(\"ECDH-ES\")) cryptoKey = keyObject.toCryptoKey({\n\t\t\tname: \"ECDH\",\n\t\t\tnamedCurve\n\t\t}, extractable, isPublic ? [] : [\"deriveBits\"]);\n\t}\n\tif (!cryptoKey) throw new TypeError(\"given KeyObject instance cannot be used for this algorithm\");\n\tif (!cached) cache.set(keyObject, { [alg]: cryptoKey });\n\telse cached[alg] = cryptoKey;\n\treturn cryptoKey;\n};\nvar normalize_key_default = async (key, alg) => {\n\tif (key instanceof Uint8Array) return key;\n\tif (isCryptoKey(key)) return key;\n\tif (isKeyObject(key)) {\n\t\tif (key.type === \"secret\") return key.export();\n\t\tif (\"toCryptoKey\" in key && typeof key.toCryptoKey === \"function\") try {\n\t\t\treturn handleKeyObject(key, alg);\n\t\t} catch (err) {\n\t\t\tif (err instanceof TypeError) throw err;\n\t\t}\n\t\treturn handleJWK(key, key.export({ format: \"jwk\" }), alg);\n\t}\n\tif (isJWK(key)) {\n\t\tif (key.k) return decode(key.k);\n\t\treturn handleJWK(key, key, alg, true);\n\t}\n\tthrow new Error(\"unreachable\");\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/check_key_type.js\nconst tag = (key) => key?.[Symbol.toStringTag];\nconst jwkMatchesOp = (alg, key, usage) => {\n\tif (key.use !== void 0) {\n\t\tlet expected;\n\t\tswitch (usage) {\n\t\t\tcase \"sign\":\n\t\t\tcase \"verify\":\n\t\t\t\texpected = \"sig\";\n\t\t\t\tbreak;\n\t\t\tcase \"encrypt\":\n\t\t\tcase \"decrypt\":\n\t\t\t\texpected = \"enc\";\n\t\t\t\tbreak;\n\t\t}\n\t\tif (key.use !== expected) throw new TypeError(`Invalid key for this operation, its \"use\" must be \"${expected}\" when present`);\n\t}\n\tif (key.alg !== void 0 && key.alg !== alg) throw new TypeError(`Invalid key for this operation, its \"alg\" must be \"${alg}\" when present`);\n\tif (Array.isArray(key.key_ops)) {\n\t\tlet expectedKeyOp;\n\t\tswitch (true) {\n\t\t\tcase usage === \"sign\" || usage === \"verify\":\n\t\t\tcase alg === \"dir\":\n\t\t\tcase alg.includes(\"CBC-HS\"):\n\t\t\t\texpectedKeyOp = usage;\n\t\t\t\tbreak;\n\t\t\tcase alg.startsWith(\"PBES2\"):\n\t\t\t\texpectedKeyOp = \"deriveBits\";\n\t\t\t\tbreak;\n\t\t\tcase /^A\\d{3}(?:GCM)?(?:KW)?$/.test(alg):\n\t\t\t\tif (!alg.includes(\"GCM\") && alg.endsWith(\"KW\")) expectedKeyOp = usage === \"encrypt\" ? \"wrapKey\" : \"unwrapKey\";\n\t\t\t\telse expectedKeyOp = usage;\n\t\t\t\tbreak;\n\t\t\tcase usage === \"encrypt\" && alg.startsWith(\"RSA\"):\n\t\t\t\texpectedKeyOp = \"wrapKey\";\n\t\t\t\tbreak;\n\t\t\tcase usage === \"decrypt\":\n\t\t\t\texpectedKeyOp = alg.startsWith(\"RSA\") ? \"unwrapKey\" : \"deriveBits\";\n\t\t\t\tbreak;\n\t\t}\n\t\tif (expectedKeyOp && key.key_ops?.includes?.(expectedKeyOp) === false) throw new TypeError(`Invalid key for this operation, its \"key_ops\" must include \"${expectedKeyOp}\" when present`);\n\t}\n\treturn true;\n};\nconst symmetricTypeCheck = (alg, key, usage) => {\n\tif (key instanceof Uint8Array) return;\n\tif (isJWK(key)) {\n\t\tif (isSecretJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\tthrow new TypeError(`JSON Web Key for symmetric algorithms must have JWK \"kty\" (Key Type) equal to \"oct\" and the JWK \"k\" (Key Value) present`);\n\t}\n\tif (!is_key_like_default(key)) throw new TypeError(withAlg(alg, key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\", \"Uint8Array\"));\n\tif (key.type !== \"secret\") throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type \"secret\"`);\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n\tif (isJWK(key)) switch (usage) {\n\t\tcase \"decrypt\":\n\t\tcase \"sign\":\n\t\t\tif (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\t\tthrow new TypeError(`JSON Web Key for this operation be a private JWK`);\n\t\tcase \"encrypt\":\n\t\tcase \"verify\":\n\t\t\tif (isPublicJWK(key) && jwkMatchesOp(alg, key, usage)) return;\n\t\t\tthrow new TypeError(`JSON Web Key for this operation be a public JWK`);\n\t}\n\tif (!is_key_like_default(key)) throw new TypeError(withAlg(alg, key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n\tif (key.type === \"secret\") throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type \"secret\"`);\n\tif (key.type === \"public\") switch (usage) {\n\t\tcase \"sign\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type \"private\"`);\n\t\tcase \"decrypt\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type \"private\"`);\n\t\tdefault: break;\n\t}\n\tif (key.type === \"private\") switch (usage) {\n\t\tcase \"verify\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type \"public\"`);\n\t\tcase \"encrypt\": throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type \"public\"`);\n\t\tdefault: break;\n\t}\n};\nvar check_key_type_default = (alg, key, usage) => {\n\tif (alg.startsWith(\"HS\") || alg === \"dir\" || alg.startsWith(\"PBES2\") || /^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(alg) || /^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(alg)) symmetricTypeCheck(alg, key, usage);\n\telse asymmetricTypeCheck(alg, key, usage);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/subtle_dsa.js\nvar subtle_dsa_default = (alg, algorithm) => {\n\tconst hash = `SHA-${alg.slice(-3)}`;\n\tswitch (alg) {\n\t\tcase \"HS256\":\n\t\tcase \"HS384\":\n\t\tcase \"HS512\": return {\n\t\t\thash,\n\t\t\tname: \"HMAC\"\n\t\t};\n\t\tcase \"PS256\":\n\t\tcase \"PS384\":\n\t\tcase \"PS512\": return {\n\t\t\thash,\n\t\t\tname: \"RSA-PSS\",\n\t\t\tsaltLength: parseInt(alg.slice(-3), 10) >> 3\n\t\t};\n\t\tcase \"RS256\":\n\t\tcase \"RS384\":\n\t\tcase \"RS512\": return {\n\t\t\thash,\n\t\t\tname: \"RSASSA-PKCS1-v1_5\"\n\t\t};\n\t\tcase \"ES256\":\n\t\tcase \"ES384\":\n\t\tcase \"ES512\": return {\n\t\t\thash,\n\t\t\tname: \"ECDSA\",\n\t\t\tnamedCurve: algorithm.namedCurve\n\t\t};\n\t\tcase \"Ed25519\":\n\t\tcase \"EdDSA\": return { name: \"Ed25519\" };\n\t\tdefault: throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/get_sign_verify_key.js\nvar get_sign_verify_key_default = async (alg, key, usage) => {\n\tif (key instanceof Uint8Array) {\n\t\tif (!alg.startsWith(\"HS\")) throw new TypeError(invalid_key_input_default(key, \"CryptoKey\", \"KeyObject\", \"JSON Web Key\"));\n\t\treturn crypto.subtle.importKey(\"raw\", key, {\n\t\t\thash: `SHA-${alg.slice(-3)}`,\n\t\t\tname: \"HMAC\"\n\t\t}, false, [usage]);\n\t}\n\tcheckSigCryptoKey(key, alg, usage);\n\treturn key;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/verify.js\nvar verify_default = async (alg, key, signature, data) => {\n\tconst cryptoKey = await get_sign_verify_key_default(alg, key, \"verify\");\n\tcheck_key_length_default(alg, cryptoKey);\n\tconst algorithm = subtle_dsa_default(alg, cryptoKey.algorithm);\n\ttry {\n\t\treturn await crypto.subtle.verify(algorithm, cryptoKey, signature, data);\n\t} catch {\n\t\treturn false;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/flattened/verify.js\nasync function flattenedVerify(jws, key, options) {\n\tif (!is_object_default(jws)) throw new JWSInvalid(\"Flattened JWS must be an object\");\n\tif (jws.protected === void 0 && jws.header === void 0) throw new JWSInvalid(\"Flattened JWS must have either of the \\\"protected\\\" or \\\"header\\\" members\");\n\tif (jws.protected !== void 0 && typeof jws.protected !== \"string\") throw new JWSInvalid(\"JWS Protected Header incorrect type\");\n\tif (jws.payload === void 0) throw new JWSInvalid(\"JWS Payload missing\");\n\tif (typeof jws.signature !== \"string\") throw new JWSInvalid(\"JWS Signature missing or incorrect type\");\n\tif (jws.header !== void 0 && !is_object_default(jws.header)) throw new JWSInvalid(\"JWS Unprotected Header incorrect type\");\n\tlet parsedProt = {};\n\tif (jws.protected) try {\n\t\tconst protectedHeader = decode(jws.protected);\n\t\tparsedProt = JSON.parse(decoder.decode(protectedHeader));\n\t} catch {\n\t\tthrow new JWSInvalid(\"JWS Protected Header is invalid\");\n\t}\n\tif (!is_disjoint_default(parsedProt, jws.header)) throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n\tconst joseHeader = {\n\t\t...parsedProt,\n\t\t...jws.header\n\t};\n\tconst extensions = validate_crit_default(JWSInvalid, new Map([[\"b64\", true]]), options?.crit, parsedProt, joseHeader);\n\tlet b64 = true;\n\tif (extensions.has(\"b64\")) {\n\t\tb64 = parsedProt.b64;\n\t\tif (typeof b64 !== \"boolean\") throw new JWSInvalid(\"The \\\"b64\\\" (base64url-encode payload) Header Parameter must be a boolean\");\n\t}\n\tconst { alg } = joseHeader;\n\tif (typeof alg !== \"string\" || !alg) throw new JWSInvalid(\"JWS \\\"alg\\\" (Algorithm) Header Parameter missing or invalid\");\n\tconst algorithms = options && validate_algorithms_default(\"algorithms\", options.algorithms);\n\tif (algorithms && !algorithms.has(alg)) throw new JOSEAlgNotAllowed(\"\\\"alg\\\" (Algorithm) Header Parameter value not allowed\");\n\tif (b64) {\n\t\tif (typeof jws.payload !== \"string\") throw new JWSInvalid(\"JWS Payload must be a string\");\n\t} else if (typeof jws.payload !== \"string\" && !(jws.payload instanceof Uint8Array)) throw new JWSInvalid(\"JWS Payload must be a string or an Uint8Array instance\");\n\tlet resolvedKey = false;\n\tif (typeof key === \"function\") {\n\t\tkey = await key(parsedProt, jws);\n\t\tresolvedKey = true;\n\t}\n\tcheck_key_type_default(alg, key, \"verify\");\n\tconst data = concat(encoder.encode(jws.protected ?? \"\"), encoder.encode(\".\"), typeof jws.payload === \"string\" ? encoder.encode(jws.payload) : jws.payload);\n\tlet signature;\n\ttry {\n\t\tsignature = decode(jws.signature);\n\t} catch {\n\t\tthrow new JWSInvalid(\"Failed to base64url decode the signature\");\n\t}\n\tconst k = await normalize_key_default(key, alg);\n\tif (!await verify_default(alg, k, signature, data)) throw new JWSSignatureVerificationFailed();\n\tlet payload;\n\tif (b64) try {\n\t\tpayload = decode(jws.payload);\n\t} catch {\n\t\tthrow new JWSInvalid(\"Failed to base64url decode the payload\");\n\t}\n\telse if (typeof jws.payload === \"string\") payload = encoder.encode(jws.payload);\n\telse payload = jws.payload;\n\tconst result = { payload };\n\tif (jws.protected !== void 0) result.protectedHeader = parsedProt;\n\tif (jws.header !== void 0) result.unprotectedHeader = jws.header;\n\tif (resolvedKey) return {\n\t\t...result,\n\t\tkey: k\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/compact/verify.js\nasync function compactVerify(jws, key, options) {\n\tif (jws instanceof Uint8Array) jws = decoder.decode(jws);\n\tif (typeof jws !== \"string\") throw new JWSInvalid(\"Compact JWS must be a string or Uint8Array\");\n\tconst { 0: protectedHeader, 1: payload, 2: signature, length } = jws.split(\".\");\n\tif (length !== 3) throw new JWSInvalid(\"Invalid Compact JWS\");\n\tconst verified = await flattenedVerify({\n\t\tpayload,\n\t\tprotected: protectedHeader,\n\t\tsignature\n\t}, key, options);\n\tconst result = {\n\t\tpayload: verified.payload,\n\t\tprotectedHeader: verified.protectedHeader\n\t};\n\tif (typeof key === \"function\") return {\n\t\t...result,\n\t\tkey: verified.key\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/epoch.js\nvar epoch_default = (date) => Math.floor(date.getTime() / 1e3);\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/secs.js\nconst minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\+|\\-)? ?(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i;\nvar secs_default = (str) => {\n\tconst matched = REGEX.exec(str);\n\tif (!matched || matched[4] && matched[1]) throw new TypeError(\"Invalid time period format\");\n\tconst value = parseFloat(matched[2]);\n\tconst unit = matched[3].toLowerCase();\n\tlet numericDate;\n\tswitch (unit) {\n\t\tcase \"sec\":\n\t\tcase \"secs\":\n\t\tcase \"second\":\n\t\tcase \"seconds\":\n\t\tcase \"s\":\n\t\t\tnumericDate = Math.round(value);\n\t\t\tbreak;\n\t\tcase \"minute\":\n\t\tcase \"minutes\":\n\t\tcase \"min\":\n\t\tcase \"mins\":\n\t\tcase \"m\":\n\t\t\tnumericDate = Math.round(value * minute);\n\t\t\tbreak;\n\t\tcase \"hour\":\n\t\tcase \"hours\":\n\t\tcase \"hr\":\n\t\tcase \"hrs\":\n\t\tcase \"h\":\n\t\t\tnumericDate = Math.round(value * hour);\n\t\t\tbreak;\n\t\tcase \"day\":\n\t\tcase \"days\":\n\t\tcase \"d\":\n\t\t\tnumericDate = Math.round(value * day);\n\t\t\tbreak;\n\t\tcase \"week\":\n\t\tcase \"weeks\":\n\t\tcase \"w\":\n\t\t\tnumericDate = Math.round(value * week);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tnumericDate = Math.round(value * year);\n\t\t\tbreak;\n\t}\n\tif (matched[1] === \"-\" || matched[4] === \"ago\") return -numericDate;\n\treturn numericDate;\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/jwt_claims_set.js\nfunction validateInput(label, input) {\n\tif (!Number.isFinite(input)) throw new TypeError(`Invalid ${label} input`);\n\treturn input;\n}\nconst normalizeTyp = (value) => value.toLowerCase().replace(/^application\\//, \"\");\nconst checkAudiencePresence = (audPayload, audOption) => {\n\tif (typeof audPayload === \"string\") return audOption.includes(audPayload);\n\tif (Array.isArray(audPayload)) return audOption.some(Set.prototype.has.bind(new Set(audPayload)));\n\treturn false;\n};\nfunction validateClaimsSet(protectedHeader, encodedPayload, options = {}) {\n\tlet payload;\n\ttry {\n\t\tpayload = JSON.parse(decoder.decode(encodedPayload));\n\t} catch {}\n\tif (!is_object_default(payload)) throw new JWTInvalid(\"JWT Claims Set must be a top-level JSON object\");\n\tconst { typ } = options;\n\tif (typ && (typeof protectedHeader.typ !== \"string\" || normalizeTyp(protectedHeader.typ) !== normalizeTyp(typ))) throw new JWTClaimValidationFailed(\"unexpected \\\"typ\\\" JWT header value\", payload, \"typ\", \"check_failed\");\n\tconst { requiredClaims = [], issuer, subject, audience, maxTokenAge } = options;\n\tconst presenceCheck = [...requiredClaims];\n\tif (maxTokenAge !== void 0) presenceCheck.push(\"iat\");\n\tif (audience !== void 0) presenceCheck.push(\"aud\");\n\tif (subject !== void 0) presenceCheck.push(\"sub\");\n\tif (issuer !== void 0) presenceCheck.push(\"iss\");\n\tfor (const claim of new Set(presenceCheck.reverse())) if (!(claim in payload)) throw new JWTClaimValidationFailed(`missing required \"${claim}\" claim`, payload, claim, \"missing\");\n\tif (issuer && !(Array.isArray(issuer) ? issuer : [issuer]).includes(payload.iss)) throw new JWTClaimValidationFailed(\"unexpected \\\"iss\\\" claim value\", payload, \"iss\", \"check_failed\");\n\tif (subject && payload.sub !== subject) throw new JWTClaimValidationFailed(\"unexpected \\\"sub\\\" claim value\", payload, \"sub\", \"check_failed\");\n\tif (audience && !checkAudiencePresence(payload.aud, typeof audience === \"string\" ? [audience] : audience)) throw new JWTClaimValidationFailed(\"unexpected \\\"aud\\\" claim value\", payload, \"aud\", \"check_failed\");\n\tlet tolerance;\n\tswitch (typeof options.clockTolerance) {\n\t\tcase \"string\":\n\t\t\ttolerance = secs_default(options.clockTolerance);\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\ttolerance = options.clockTolerance;\n\t\t\tbreak;\n\t\tcase \"undefined\":\n\t\t\ttolerance = 0;\n\t\t\tbreak;\n\t\tdefault: throw new TypeError(\"Invalid clockTolerance option type\");\n\t}\n\tconst { currentDate } = options;\n\tconst now = epoch_default(currentDate || /* @__PURE__ */ new Date());\n\tif ((payload.iat !== void 0 || maxTokenAge) && typeof payload.iat !== \"number\") throw new JWTClaimValidationFailed(\"\\\"iat\\\" claim must be a number\", payload, \"iat\", \"invalid\");\n\tif (payload.nbf !== void 0) {\n\t\tif (typeof payload.nbf !== \"number\") throw new JWTClaimValidationFailed(\"\\\"nbf\\\" claim must be a number\", payload, \"nbf\", \"invalid\");\n\t\tif (payload.nbf > now + tolerance) throw new JWTClaimValidationFailed(\"\\\"nbf\\\" claim timestamp check failed\", payload, \"nbf\", \"check_failed\");\n\t}\n\tif (payload.exp !== void 0) {\n\t\tif (typeof payload.exp !== \"number\") throw new JWTClaimValidationFailed(\"\\\"exp\\\" claim must be a number\", payload, \"exp\", \"invalid\");\n\t\tif (payload.exp <= now - tolerance) throw new JWTExpired(\"\\\"exp\\\" claim timestamp check failed\", payload, \"exp\", \"check_failed\");\n\t}\n\tif (maxTokenAge) {\n\t\tconst age = now - payload.iat;\n\t\tconst max = typeof maxTokenAge === \"number\" ? maxTokenAge : secs_default(maxTokenAge);\n\t\tif (age - tolerance > max) throw new JWTExpired(\"\\\"iat\\\" claim timestamp check failed (too far in the past)\", payload, \"iat\", \"check_failed\");\n\t\tif (age < 0 - tolerance) throw new JWTClaimValidationFailed(\"\\\"iat\\\" claim timestamp check failed (it should be in the past)\", payload, \"iat\", \"check_failed\");\n\t}\n\treturn payload;\n}\nvar JWTClaimsBuilder = class {\n\t#payload;\n\tconstructor(payload) {\n\t\tif (!is_object_default(payload)) throw new TypeError(\"JWT Claims Set MUST be an object\");\n\t\tthis.#payload = structuredClone(payload);\n\t}\n\tdata() {\n\t\treturn encoder.encode(JSON.stringify(this.#payload));\n\t}\n\tget iss() {\n\t\treturn this.#payload.iss;\n\t}\n\tset iss(value) {\n\t\tthis.#payload.iss = value;\n\t}\n\tget sub() {\n\t\treturn this.#payload.sub;\n\t}\n\tset sub(value) {\n\t\tthis.#payload.sub = value;\n\t}\n\tget aud() {\n\t\treturn this.#payload.aud;\n\t}\n\tset aud(value) {\n\t\tthis.#payload.aud = value;\n\t}\n\tset jti(value) {\n\t\tthis.#payload.jti = value;\n\t}\n\tset nbf(value) {\n\t\tif (typeof value === \"number\") this.#payload.nbf = validateInput(\"setNotBefore\", value);\n\t\telse if (value instanceof Date) this.#payload.nbf = validateInput(\"setNotBefore\", epoch_default(value));\n\t\telse this.#payload.nbf = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value);\n\t}\n\tset exp(value) {\n\t\tif (typeof value === \"number\") this.#payload.exp = validateInput(\"setExpirationTime\", value);\n\t\telse if (value instanceof Date) this.#payload.exp = validateInput(\"setExpirationTime\", epoch_default(value));\n\t\telse this.#payload.exp = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value);\n\t}\n\tset iat(value) {\n\t\tif (typeof value === \"undefined\") this.#payload.iat = epoch_default(/* @__PURE__ */ new Date());\n\t\telse if (value instanceof Date) this.#payload.iat = validateInput(\"setIssuedAt\", epoch_default(value));\n\t\telse if (typeof value === \"string\") this.#payload.iat = validateInput(\"setIssuedAt\", epoch_default(/* @__PURE__ */ new Date()) + secs_default(value));\n\t\telse this.#payload.iat = validateInput(\"setIssuedAt\", value);\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jwt/verify.js\nasync function jwtVerify(jwt, key, options) {\n\tconst verified = await compactVerify(jwt, key, options);\n\tif (verified.protectedHeader.crit?.includes(\"b64\") && verified.protectedHeader.b64 === false) throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n\tconst result = {\n\t\tpayload: validateClaimsSet(verified.protectedHeader, verified.payload, options),\n\t\tprotectedHeader: verified.protectedHeader\n\t};\n\tif (typeof key === \"function\") return {\n\t\t...result,\n\t\tkey: verified.key\n\t};\n\treturn result;\n}\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/lib/sign.js\nvar sign_default = async (alg, key, data) => {\n\tconst cryptoKey = await get_sign_verify_key_default(alg, key, \"sign\");\n\tcheck_key_length_default(alg, cryptoKey);\n\tconst signature = await crypto.subtle.sign(subtle_dsa_default(alg, cryptoKey.algorithm), cryptoKey, data);\n\treturn new Uint8Array(signature);\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/flattened/sign.js\nvar FlattenedSign = class {\n\t#payload;\n\t#protectedHeader;\n\t#unprotectedHeader;\n\tconstructor(payload) {\n\t\tif (!(payload instanceof Uint8Array)) throw new TypeError(\"payload must be an instance of Uint8Array\");\n\t\tthis.#payload = payload;\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tif (this.#protectedHeader) throw new TypeError(\"setProtectedHeader can only be called once\");\n\t\tthis.#protectedHeader = protectedHeader;\n\t\treturn this;\n\t}\n\tsetUnprotectedHeader(unprotectedHeader) {\n\t\tif (this.#unprotectedHeader) throw new TypeError(\"setUnprotectedHeader can only be called once\");\n\t\tthis.#unprotectedHeader = unprotectedHeader;\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tif (!this.#protectedHeader && !this.#unprotectedHeader) throw new JWSInvalid(\"either setProtectedHeader or setUnprotectedHeader must be called before #sign()\");\n\t\tif (!is_disjoint_default(this.#protectedHeader, this.#unprotectedHeader)) throw new JWSInvalid(\"JWS Protected and JWS Unprotected Header Parameter names must be disjoint\");\n\t\tconst joseHeader = {\n\t\t\t...this.#protectedHeader,\n\t\t\t...this.#unprotectedHeader\n\t\t};\n\t\tconst extensions = validate_crit_default(JWSInvalid, new Map([[\"b64\", true]]), options?.crit, this.#protectedHeader, joseHeader);\n\t\tlet b64 = true;\n\t\tif (extensions.has(\"b64\")) {\n\t\t\tb64 = this.#protectedHeader.b64;\n\t\t\tif (typeof b64 !== \"boolean\") throw new JWSInvalid(\"The \\\"b64\\\" (base64url-encode payload) Header Parameter must be a boolean\");\n\t\t}\n\t\tconst { alg } = joseHeader;\n\t\tif (typeof alg !== \"string\" || !alg) throw new JWSInvalid(\"JWS \\\"alg\\\" (Algorithm) Header Parameter missing or invalid\");\n\t\tcheck_key_type_default(alg, key, \"sign\");\n\t\tlet payload = this.#payload;\n\t\tif (b64) payload = encoder.encode(encode(payload));\n\t\tlet protectedHeader;\n\t\tif (this.#protectedHeader) protectedHeader = encoder.encode(encode(JSON.stringify(this.#protectedHeader)));\n\t\telse protectedHeader = encoder.encode(\"\");\n\t\tconst data = concat(protectedHeader, encoder.encode(\".\"), payload);\n\t\tconst jws = {\n\t\t\tsignature: encode(await sign_default(alg, await normalize_key_default(key, alg), data)),\n\t\t\tpayload: \"\"\n\t\t};\n\t\tif (b64) jws.payload = decoder.decode(payload);\n\t\tif (this.#unprotectedHeader) jws.header = this.#unprotectedHeader;\n\t\tif (this.#protectedHeader) jws.protected = decoder.decode(protectedHeader);\n\t\treturn jws;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jws/compact/sign.js\nvar CompactSign = class {\n\t#flattened;\n\tconstructor(payload) {\n\t\tthis.#flattened = new FlattenedSign(payload);\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tthis.#flattened.setProtectedHeader(protectedHeader);\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tconst jws = await this.#flattened.sign(key, options);\n\t\tif (jws.payload === void 0) throw new TypeError(\"use the flattened module for creating JWS with b64: false\");\n\t\treturn `${jws.protected}.${jws.payload}.${jws.signature}`;\n\t}\n};\n//#endregion\n//#region ../../node_modules/.pnpm/jose@6.0.10/node_modules/jose/dist/webapi/jwt/sign.js\nvar SignJWT = class {\n\t#protectedHeader;\n\t#jwt;\n\tconstructor(payload = {}) {\n\t\tthis.#jwt = new JWTClaimsBuilder(payload);\n\t}\n\tsetIssuer(issuer) {\n\t\tthis.#jwt.iss = issuer;\n\t\treturn this;\n\t}\n\tsetSubject(subject) {\n\t\tthis.#jwt.sub = subject;\n\t\treturn this;\n\t}\n\tsetAudience(audience) {\n\t\tthis.#jwt.aud = audience;\n\t\treturn this;\n\t}\n\tsetJti(jwtId) {\n\t\tthis.#jwt.jti = jwtId;\n\t\treturn this;\n\t}\n\tsetNotBefore(input) {\n\t\tthis.#jwt.nbf = input;\n\t\treturn this;\n\t}\n\tsetExpirationTime(input) {\n\t\tthis.#jwt.exp = input;\n\t\treturn this;\n\t}\n\tsetIssuedAt(input) {\n\t\tthis.#jwt.iat = input;\n\t\treturn this;\n\t}\n\tsetProtectedHeader(protectedHeader) {\n\t\tthis.#protectedHeader = protectedHeader;\n\t\treturn this;\n\t}\n\tasync sign(key, options) {\n\t\tconst sig = new CompactSign(this.#jwt.data());\n\t\tsig.setProtectedHeader(this.#protectedHeader);\n\t\tif (Array.isArray(this.#protectedHeader?.crit) && this.#protectedHeader.crit.includes(\"b64\") && this.#protectedHeader.b64 === false) throw new JWTInvalid(\"JWTs MUST NOT use unencoded payload\");\n\t\treturn sig.sign(key, options);\n\t}\n};\n//#endregion\n//#region src/verifyJwtSignedUrl.ts\n/**\n* Verifies JWT token only and returns the file key (path with leading slashes removed) if valid.\n*/\nconst verifyJwtToken = async ({ path, token, jwtSecret }) => {\n\tconst key = path.replace(/^\\/+/, \"\");\n\tif (!token) return {\n\t\tvalid: false,\n\t\terror: \"Missing token\"\n\t};\n\ttry {\n\t\tconst { payload } = await jwtVerify(token, new TextEncoder().encode(jwtSecret));\n\t\tif (!payload || payload.key !== key) return {\n\t\t\tvalid: false,\n\t\t\terror: \"Token does not match requested file\"\n\t\t};\n\t\treturn {\n\t\t\tvalid: true,\n\t\t\tkey\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: \"Invalid or expired token\"\n\t\t};\n\t}\n};\n/**\n* Retrieves file data through the handler and constructs a response object with appropriate headers for download.\n*/\nconst getFileResponse = async ({ key, handler }) => {\n\tconst object = await handler(key);\n\tif (!object) return {\n\t\tstatus: 404,\n\t\terror: \"File not found\"\n\t};\n\tconst pathParts = key.split(\"/\");\n\tconst fileName = pathParts[pathParts.length - 1];\n\treturn {\n\t\tstatus: 200,\n\t\tresponseHeaders: {\n\t\t\t\"Content-Type\": object.contentType || \"application/octet-stream\",\n\t\t\t\"Content-Disposition\": `attachment; filename=${fileName}`\n\t\t},\n\t\tresponseBody: object.body\n\t};\n};\n/**\n* Integrated function for JWT verification and file handling.\n* - Returns error response if token is missing or validation fails.\n* - On success, retrieves file data through the handler and constructs a response object.\n*/\nconst verifyJwtSignedUrl = async ({ path, token, jwtSecret, handler }) => {\n\tconst result = await verifyJwtToken({\n\t\tpath,\n\t\ttoken,\n\t\tjwtSecret\n\t});\n\tif (!result.valid) {\n\t\tif (result.error === \"Missing token\") return {\n\t\t\tstatus: 400,\n\t\t\terror: result.error\n\t\t};\n\t\treturn {\n\t\t\tstatus: 403,\n\t\t\terror: result.error || \"Unauthorized\"\n\t\t};\n\t}\n\treturn getFileResponse({\n\t\tkey: result.key,\n\t\thandler\n\t});\n};\n//#endregion\n//#region src/withJwtSignedUrl.ts\n/**\n* Creates a JWT-signed download URL based on the provided update information.\n*\n* @param {Object} options - Function options\n* @param {T|null} options.data - Update information (null if none)\n* @param {string} options.reqUrl - Request URL (base URL for token generation)\n* @param {string} options.jwtSecret - Secret key for JWT signing\n* @returns {Promise<T|null>} - Update response object with fileUrl or null\n*/\nconst withJwtSignedUrl = async ({ data, reqUrl, jwtSecret }) => {\n\tif (!data) return null;\n\tconst { storageUri, ...rest } = data;\n\tif (data.id === NIL_UUID || !storageUri) return {\n\t\t...rest,\n\t\tfileUrl: null\n\t};\n\tconst storageUrl = new URL(storageUri);\n\tconst key = `${storageUrl.host}${storageUrl.pathname}`;\n\tconst token = await signToken(key, jwtSecret);\n\tconst url = new URL(reqUrl);\n\turl.pathname = key;\n\turl.searchParams.set(\"token\", token);\n\treturn {\n\t\t...rest,\n\t\tfileUrl: url.toString()\n\t};\n};\nconst signToken = async (key, jwtSecret) => {\n\tconst secretKey = new TextEncoder().encode(jwtSecret);\n\treturn await new SignJWT({ key }).setProtectedHeader({ alg: \"HS256\" }).setExpirationTime(\"60s\").sign(secretKey);\n};\n//#endregion\nexport { filterCompatibleAppVersions, getUpdateInfo, semverSatisfies, signToken, verifyJwtSignedUrl, verifyJwtToken, withJwtSignedUrl };\n", "import { filterCompatibleAppVersions } from \"./filterCompatibleAppVersions.mjs\";\nimport { getUpdateInfo } from \"@hot-updater/js\";\nimport { NIL_UUID } from \"@hot-updater/core\";\n//#region src/createDatabasePluginGetUpdateInfo.ts\nconst normalizeAppVersionArgs = (args) => ({\n\t...args,\n\tchannel: args.channel ?? \"production\",\n\tminBundleId: args.minBundleId ?? NIL_UUID\n});\nconst normalizeFingerprintArgs = (args) => ({\n\t...args,\n\tchannel: args.channel ?? \"production\",\n\tminBundleId: args.minBundleId ?? NIL_UUID\n});\nconst createDatabasePluginGetUpdateInfo = ({ getBundlesByFingerprint, getBundlesByTargetAppVersions, listTargetAppVersions }) => {\n\treturn async (args, context) => {\n\t\tif (args._updateStrategy === \"appVersion\") {\n\t\t\tconst normalizedArgs = normalizeAppVersionArgs(args);\n\t\t\tconst compatibleAppVersions = filterCompatibleAppVersions(await listTargetAppVersions(normalizedArgs, context), normalizedArgs.appVersion);\n\t\t\treturn getUpdateInfo(compatibleAppVersions.length > 0 ? await getBundlesByTargetAppVersions(normalizedArgs, compatibleAppVersions, context) : [], normalizedArgs);\n\t\t}\n\t\tconst normalizedArgs = normalizeFingerprintArgs(args);\n\t\treturn getUpdateInfo(await getBundlesByFingerprint(normalizedArgs, context), normalizedArgs);\n\t};\n};\n//#endregion\nexport { createDatabasePluginGetUpdateInfo };\n", "import type {\n AppUpdateInfo,\n Bundle,\n GetBundlesArgs,\n UpdateInfo,\n} from \"@hot-updater/core\";\nimport type {\n DatabaseBundleQueryOptions,\n DatabasePlugin,\n HotUpdaterContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\nimport type { FumaDBAdapter } from \"fumadb/adapters\";\n\nimport type { PaginatedResult } from \"../types\";\n\nexport type DatabasePluginFactory<TContext = unknown> =\n () => DatabasePlugin<TContext>;\n\nexport type DatabaseAdapter<TContext = unknown> =\n | FumaDBAdapter\n | DatabasePlugin<TContext>\n | DatabasePluginFactory<TContext>;\n\nexport function isDatabasePluginFactory<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is DatabasePluginFactory<TContext> {\n return typeof adapter === \"function\";\n}\n\nexport function isDatabasePlugin<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is DatabasePlugin<TContext> {\n return (\n typeof adapter === \"object\" &&\n adapter !== null &&\n \"getBundleById\" in adapter &&\n \"getBundles\" in adapter &&\n \"getChannels\" in adapter\n );\n}\n\nexport function isFumaAdapter<TContext = unknown>(\n adapter: DatabaseAdapter<TContext>,\n): adapter is FumaDBAdapter {\n return !isDatabasePluginFactory(adapter) && !isDatabasePlugin(adapter);\n}\n\nexport interface DatabaseAPI<TContext = unknown> {\n getBundleById(\n id: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle | null>;\n getUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<UpdateInfo | null>;\n getAppUpdateInfo(\n args: GetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ): Promise<AppUpdateInfo | null>;\n getChannels(context?: HotUpdaterContext<TContext>): Promise<string[]>;\n getBundles(\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<PaginatedResult>;\n insertBundle(\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n updateBundleById(\n bundleId: string,\n newBundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n deleteBundleById(\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ): Promise<void>;\n}\n\nexport type StoragePluginFactory<TContext = unknown> =\n () => StoragePlugin<TContext>;\n", "import type {\n AppUpdateInfo,\n AppVersionGetBundlesArgs,\n Bundle,\n FingerprintGetBundlesArgs,\n Platform,\n} from \"@hot-updater/core\";\nimport type {\n DatabaseBundleQueryOptions,\n HotUpdaterContext,\n} from \"@hot-updater/plugin-core\";\n\nimport { addRoute, createRouter, findRoute } from \"./internalRouter\";\nimport type { ChannelsResponse, PaginatedResult } from \"./types\";\nimport { HOT_UPDATER_SERVER_VERSION } from \"./version\";\n\n// Narrow API surface needed by the handler to avoid circular types\nexport interface HandlerAPI<TContext = unknown> {\n getAppUpdateInfo: (\n args: AppVersionGetBundlesArgs | FingerprintGetBundlesArgs,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<AppUpdateInfo | null>;\n getBundleById: (\n id: string,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<Bundle | null>;\n getBundles: (\n options: DatabaseBundleQueryOptions,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<PaginatedResult>;\n insertBundle: (\n bundle: Bundle,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n updateBundleById: (\n bundleId: string,\n bundle: Partial<Bundle>,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n deleteBundleById: (\n bundleId: string,\n context?: HotUpdaterContext<TContext>,\n ) => Promise<void>;\n getChannels: (context?: HotUpdaterContext<TContext>) => Promise<string[]>;\n}\n\nexport interface HandlerOptions {\n /**\n * Base path for all routes\n * @default \"/api\"\n */\n basePath?: string;\n routes?: HandlerRoutes;\n}\n\nexport interface HandlerRoutes {\n /**\n * Controls whether update-check routes are mounted.\n * @default true\n */\n updateCheck?: boolean;\n /**\n * Controls whether the `/version` endpoint is mounted.\n * Useful for diagnostics and lightweight health/version checks.\n * @default true\n */\n version?: boolean;\n /**\n * Controls whether bundle management routes are mounted.\n * This includes `/api/bundles*`, which are used by the\n * CLI `standaloneRepository` plugin.\n * @default true\n */\n bundles?: boolean;\n}\n\ntype RouteHandler<TContext = unknown> = (\n params: Record<string, string>,\n request: Request,\n api: HandlerAPI<TContext>,\n context?: HotUpdaterContext<TContext>,\n) => Promise<Response>;\n\nclass HandlerBadRequestError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HandlerBadRequestError\";\n }\n}\n\n// Route handlers\nconst handleVersion: RouteHandler = async () => {\n return new Response(JSON.stringify({ version: HOT_UPDATER_SERVER_VERSION }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst decodeMaybe = (value: string | undefined): string | undefined => {\n if (value === undefined) return undefined;\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n};\n\nconst isPlatform = (value: string): value is Platform => {\n return value === \"ios\" || value === \"android\";\n};\n\nconst requireRouteParam = (\n params: Record<string, string>,\n key: string,\n): string => {\n const value = params[key];\n if (!value) {\n throw new HandlerBadRequestError(`Missing route parameter: ${key}`);\n }\n\n return value;\n};\n\nconst requirePlatformParam = (params: Record<string, string>): Platform => {\n const platform = requireRouteParam(params, \"platform\");\n\n if (!isPlatform(platform)) {\n throw new HandlerBadRequestError(\n `Invalid platform: ${platform}. Expected 'ios' or 'android'.`,\n );\n }\n\n return platform;\n};\n\ntype BundlePatchPayload = Partial<Bundle> & {\n id?: string;\n};\n\nconst requireBundlePatchPayload = (\n payload: unknown,\n bundleId: string,\n): Partial<Bundle> => {\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n throw new HandlerBadRequestError(\"Invalid bundle payload\");\n }\n\n const bundlePatch = payload as BundlePatchPayload;\n if (bundlePatch.id !== undefined && bundlePatch.id !== bundleId) {\n throw new HandlerBadRequestError(\"Bundle id mismatch\");\n }\n\n const { id: _ignoredId, ...rest } = bundlePatch;\n return rest;\n};\n\nconst handleFingerprintUpdateWithCohort: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const platform = requirePlatformParam(params);\n const fingerprintHash = requireRouteParam(params, \"fingerprintHash\");\n const channel = requireRouteParam(params, \"channel\");\n const minBundleId = requireRouteParam(params, \"minBundleId\");\n const bundleId = requireRouteParam(params, \"bundleId\");\n\n const updateInfo = await api.getAppUpdateInfo(\n {\n _updateStrategy: \"fingerprint\",\n platform,\n fingerprintHash,\n channel,\n minBundleId,\n bundleId,\n cohort: decodeMaybe(params.cohort),\n },\n context,\n );\n\n return new Response(JSON.stringify(updateInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleAppVersionUpdateWithCohort: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const platform = requirePlatformParam(params);\n const appVersion = requireRouteParam(params, \"appVersion\");\n const channel = requireRouteParam(params, \"channel\");\n const minBundleId = requireRouteParam(params, \"minBundleId\");\n const bundleId = requireRouteParam(params, \"bundleId\");\n\n const updateInfo = await api.getAppUpdateInfo(\n {\n _updateStrategy: \"appVersion\",\n platform,\n appVersion,\n channel,\n minBundleId,\n bundleId,\n cohort: decodeMaybe(params.cohort),\n },\n context,\n );\n\n return new Response(JSON.stringify(updateInfo), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetBundle: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n const bundle = await api.getBundleById(bundleId, context);\n\n if (!bundle) {\n return new Response(JSON.stringify({ error: \"Bundle not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n return new Response(JSON.stringify(bundle), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetBundles: RouteHandler = async (\n _params,\n request,\n api,\n context,\n) => {\n const url = new URL(request.url);\n const channel = url.searchParams.get(\"channel\") ?? undefined;\n const platform = url.searchParams.get(\"platform\");\n const limit = Number(url.searchParams.get(\"limit\")) || 50;\n const pageParam = url.searchParams.get(\"page\");\n const offset = url.searchParams.get(\"offset\");\n const after = url.searchParams.get(\"after\") ?? undefined;\n const before = url.searchParams.get(\"before\") ?? undefined;\n const page =\n pageParam === null\n ? undefined\n : Number.isInteger(Number(pageParam)) && Number(pageParam) > 0\n ? Number(pageParam)\n : null;\n\n if (offset !== null) {\n throw new HandlerBadRequestError(\n \"The 'offset' query parameter has been removed. Use 'after' or 'before' cursor pagination instead.\",\n );\n }\n\n if (page === null) {\n throw new HandlerBadRequestError(\n \"The 'page' query parameter must be a positive integer.\",\n );\n }\n\n if (platform !== null && !isPlatform(platform)) {\n throw new HandlerBadRequestError(\n `Invalid platform: ${platform}. Expected 'ios' or 'android'.`,\n );\n }\n\n const result = await api.getBundles(\n {\n where: {\n ...(channel && { channel }),\n ...(platform && { platform }),\n },\n limit,\n page,\n cursor:\n after || before\n ? {\n after,\n before,\n }\n : undefined,\n },\n context,\n );\n\n return new Response(JSON.stringify(result), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleCreateBundles: RouteHandler = async (\n _params,\n request,\n api,\n context,\n) => {\n const body = await request.json();\n const bundles = Array.isArray(body) ? body : [body];\n\n for (const bundle of bundles) {\n await api.insertBundle(bundle as Bundle, context);\n }\n\n return new Response(JSON.stringify({ success: true }), {\n status: 201,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleUpdateBundle: RouteHandler = async (\n params,\n request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n const body = await request.json();\n const payload = Array.isArray(body) ? body[0] : body;\n const bundlePatch = requireBundlePatchPayload(payload, bundleId);\n await api.updateBundleById(bundleId, bundlePatch, context);\n\n return new Response(JSON.stringify({ success: true }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleDeleteBundle: RouteHandler = async (\n params,\n _request,\n api,\n context,\n) => {\n const bundleId = requireRouteParam(params, \"id\");\n await api.deleteBundleById(bundleId, context);\n\n return new Response(JSON.stringify({ success: true }), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\nconst handleGetChannels: RouteHandler = async (\n _params,\n _request,\n api,\n context,\n) => {\n const channels = await api.getChannels(context);\n const response: ChannelsResponse = {\n data: {\n channels,\n },\n };\n\n return new Response(JSON.stringify(response), {\n status: 200,\n headers: { \"Content-Type\": \"application/json\" },\n });\n};\n\n// Route handlers map\nconst routes: Record<string, RouteHandler<any>> = {\n version: handleVersion,\n fingerprintUpdateWithCohort: handleFingerprintUpdateWithCohort,\n appVersionUpdateWithCohort: handleAppVersionUpdateWithCohort,\n getBundle: handleGetBundle,\n getBundles: handleGetBundles,\n createBundles: handleCreateBundles,\n updateBundle: handleUpdateBundle,\n deleteBundle: handleDeleteBundle,\n getChannels: handleGetChannels,\n};\n\n/**\n * Creates a Web Standard Request handler for Hot Updater API\n * This handler is framework-agnostic and works with any runtime that\n * supports standard Request/Response objects.\n */\nexport function createHandler<TContext = unknown>(\n api: HandlerAPI<TContext>,\n options: HandlerOptions = {},\n): (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n) => Promise<Response> {\n const basePath = options.basePath ?? \"/api\";\n const updateCheckEnabled = options.routes?.updateCheck ?? true;\n const versionEnabled = options.routes?.version ?? true;\n const bundlesEnabled = options.routes?.bundles ?? true;\n\n // Create and configure router\n const router = createRouter();\n\n // Register routes\n if (versionEnabled) {\n addRoute(router, \"GET\", \"/version\", \"version\");\n }\n\n if (updateCheckEnabled) {\n addRoute(\n router,\n \"GET\",\n \"/fingerprint/:platform/:fingerprintHash/:channel/:minBundleId/:bundleId\",\n \"fingerprintUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/fingerprint/:platform/:fingerprintHash/:channel/:minBundleId/:bundleId/:cohort\",\n \"fingerprintUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/app-version/:platform/:appVersion/:channel/:minBundleId/:bundleId\",\n \"appVersionUpdateWithCohort\",\n );\n addRoute(\n router,\n \"GET\",\n \"/app-version/:platform/:appVersion/:channel/:minBundleId/:bundleId/:cohort\",\n \"appVersionUpdateWithCohort\",\n );\n }\n\n if (bundlesEnabled) {\n addRoute(router, \"GET\", \"/api/bundles/channels\", \"getChannels\");\n addRoute(router, \"GET\", \"/api/bundles/:id\", \"getBundle\");\n addRoute(router, \"GET\", \"/api/bundles\", \"getBundles\");\n addRoute(router, \"POST\", \"/api/bundles\", \"createBundles\");\n addRoute(router, \"PATCH\", \"/api/bundles/:id\", \"updateBundle\");\n addRoute(router, \"DELETE\", \"/api/bundles/:id\", \"deleteBundle\");\n }\n\n return async (\n request: Request,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Response> => {\n try {\n const url = new URL(request.url);\n const path = url.pathname;\n const method = request.method;\n\n // Remove base path from pathname\n const routePath = path.startsWith(basePath)\n ? path.slice(basePath.length)\n : path;\n\n // Find matching route\n const match = findRoute(router, method, routePath);\n\n if (!match) {\n return new Response(JSON.stringify({ error: \"Not found\" }), {\n status: 404,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // Get handler and execute\n const handler = routes[match.data as string] as RouteHandler<TContext>;\n if (!handler) {\n return new Response(JSON.stringify({ error: \"Handler not found\" }), {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n return await handler(match.params || {}, request, api, context);\n } catch (error) {\n if (error instanceof HandlerBadRequestError) {\n return new Response(JSON.stringify({ error: error.message }), {\n status: 400,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n console.error(\"Hot Updater handler error:\", error);\n return new Response(\n JSON.stringify({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n }),\n {\n status: 500,\n headers: { \"Content-Type\": \"application/json\" },\n },\n );\n }\n };\n}\n", "interface RouteRecord<T> {\n data: T;\n method: string;\n paramNames: string[];\n segments: string[];\n}\n\ninterface RouteMatch<T> {\n data: T;\n params: Record<string, string>;\n}\n\ninterface Router<T> {\n routes: RouteRecord<T>[];\n}\n\nconst normalizePath = (path: string) => {\n if (!path) {\n return \"/\";\n }\n\n if (path === \"/\") {\n return path;\n }\n\n const withLeadingSlash = path.startsWith(\"/\") ? path : `/${path}`;\n return withLeadingSlash.endsWith(\"/\")\n ? withLeadingSlash.slice(0, -1)\n : withLeadingSlash;\n};\n\nconst toSegments = (path: string) => {\n const normalized = normalizePath(path);\n return normalized === \"/\" ? [] : normalized.slice(1).split(\"/\");\n};\n\nexport function createRouter<T>(): Router<T> {\n return { routes: [] };\n}\n\nexport function addRoute<T>(\n router: Router<T>,\n method: string,\n path: string,\n data: T,\n) {\n const segments = toSegments(path);\n const paramNames = segments\n .filter((segment) => segment.startsWith(\":\"))\n .map((segment) => segment.slice(1));\n\n router.routes.push({\n data,\n method: method.toUpperCase(),\n paramNames,\n segments,\n });\n}\n\nexport function findRoute<T>(\n router: Router<T>,\n method: string,\n path: string,\n): RouteMatch<T> | undefined {\n const normalizedMethod = method.toUpperCase();\n const pathSegments = toSegments(path);\n\n for (const route of router.routes) {\n if (route.method !== normalizedMethod) {\n continue;\n }\n\n if (route.segments.length !== pathSegments.length) {\n continue;\n }\n\n const params: Record<string, string> = {};\n let matched = true;\n\n for (let index = 0; index < route.segments.length; index += 1) {\n const routeSegment = route.segments[index];\n const pathSegment = pathSegments[index];\n\n if (routeSegment.startsWith(\":\")) {\n params[routeSegment.slice(1)] = pathSegment;\n continue;\n }\n\n if (routeSegment !== pathSegment) {\n matched = false;\n break;\n }\n }\n\n if (matched) {\n return {\n data: route.data,\n params,\n };\n }\n }\n\n return undefined;\n}\n", "import pkg from \"../package.json\" with { type: \"json\" };\n\nexport const HOT_UPDATER_SERVER_VERSION = pkg.version;\n", "{\n \"name\": \"@hot-updater/server\",\n \"version\": \"0.30.7\",\n \"type\": \"module\",\n \"description\": \"React Native OTA solution for self-hosted\",\n \"sideEffects\": false,\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"types\": \"./dist/index.d.cts\",\n \"exports\": {\n \".\": {\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./adapters/drizzle\": {\n \"import\": \"./dist/adapters/drizzle.mjs\",\n \"require\": \"./dist/adapters/drizzle.cjs\"\n },\n \"./adapters/kysely\": {\n \"import\": \"./dist/adapters/kysely.mjs\",\n \"require\": \"./dist/adapters/kysely.cjs\"\n },\n \"./adapters/mongodb\": {\n \"import\": \"./dist/adapters/mongodb.mjs\",\n \"require\": \"./dist/adapters/mongodb.cjs\"\n },\n \"./adapters/prisma\": {\n \"import\": \"./dist/adapters/prisma.mjs\",\n \"require\": \"./dist/adapters/prisma.cjs\"\n },\n \"./node\": {\n \"import\": \"./dist/node.mjs\",\n \"require\": \"./dist/node.cjs\"\n },\n \"./runtime\": {\n \"import\": \"./dist/runtime.mjs\",\n \"require\": \"./dist/runtime.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"dist\",\n \"src\",\n \"package.json\"\n ],\n \"license\": \"MIT\",\n \"scripts\": {\n \"build\": \"tsdown\",\n \"test:type\": \"tsc --noEmit\"\n },\n \"repository\": \"https://github.com/gronxb/hot-updater\",\n \"author\": \"gronxb <gron1gh1@gmail.com> (https://github.com/gronxb)\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@hot-updater/core\": \"workspace:*\",\n \"@hot-updater/plugin-core\": \"workspace:*\",\n \"@hot-updater/js\": \"workspace:*\",\n \"fumadb\": \"catalog:db\",\n \"rou3\": \"0.7.9\",\n \"semver\": \"^7.7.2\"\n },\n \"devDependencies\": {\n \"@electric-sql/pglite\": \"catalog:db\",\n \"@hot-updater/standalone\": \"workspace:*\",\n \"@hot-updater/test-utils\": \"workspace:*\",\n \"@types/node\": \"catalog:\",\n \"@types/semver\": \"^7.5.8\",\n \"execa\": \"catalog:tools\",\n \"kysely\": \"catalog:db\",\n \"kysely-pglite-dialect\": \"catalog:db\",\n \"msw\": \"^2.7.0\",\n \"uuidv7\": \"^1.0.2\"\n }\n}\n", "export const normalizeBasePath = (basePath?: string) => {\n if (!basePath || basePath === \"/\") {\n return \"/\";\n }\n\n return basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n};\n", "// src/index.ts\nimport { Hono } from \"./hono.js\";\nexport {\n Hono\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/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/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/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 createResponseInstance = (body, init) => new Response(body, init);\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 ||= createResponseInstance(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 = createResponseInstance(_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 = createResponseInstance(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 createResponseInstance(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 ??= () => createResponseInstance();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\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 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/http-exception.ts\nvar HTTPException = class extends Error {\n res;\n status;\n /**\n * Creates an instance of `HTTPException`.\n * @param status - HTTP status code for the exception. Defaults to 500.\n * @param options - Additional options for the exception.\n */\n constructor(status = 500, options) {\n super(options?.message, { cause: options?.cause });\n this.res = options?.res;\n this.status = status;\n }\n /**\n * Returns the response object associated with the exception.\n * If a response object is not provided, a new response is created with the error message and status code.\n * @returns The response object.\n */\n getResponse() {\n if (this.res) {\n const newResponse = new Response(this.res.body, {\n status: this.status,\n headers: this.res.headers\n });\n return newResponse;\n }\n return new Response(this.message, {\n status: this.status\n });\n }\n};\nexport {\n HTTPException\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 if (/(?:^|\\.)__proto__\\./.test(key)) {\n return;\n }\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 tryDecodeURI\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 = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\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/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/router/reg-exp-router/index.ts\nimport { RegExpRouter } from \"./router.js\";\nimport { PreparedRegExpRouter, buildInitParams, serializeInitParams } from \"./prepared-router.js\";\nexport {\n PreparedRegExpRouter,\n RegExpRouter,\n buildInitParams,\n serializeInitParams\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/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/prepared-router.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { RegExpRouter } from \"./router.js\";\nvar PreparedRegExpRouter = class {\n name = \"PreparedRegExpRouter\";\n #matchers;\n #relocateMap;\n constructor(matchers, relocateMap) {\n this.#matchers = matchers;\n this.#relocateMap = relocateMap;\n }\n #addWildcard(method, handlerData) {\n const matcher = this.#matchers[method];\n matcher[1].forEach((list) => list && list.push(handlerData));\n Object.values(matcher[2]).forEach((list) => list[0].push(handlerData));\n }\n #addPath(method, path, handler, indexes, map) {\n const matcher = this.#matchers[method];\n if (!map) {\n matcher[2][path][0].push([handler, {}]);\n } else {\n indexes.forEach((index) => {\n if (typeof index === \"number\") {\n matcher[1][index].push([handler, map]);\n } else {\n ;\n matcher[2][index || path][0].push([handler, map]);\n }\n });\n }\n }\n add(method, path, handler) {\n if (!this.#matchers[method]) {\n const all = this.#matchers[METHOD_NAME_ALL];\n const staticMap = {};\n for (const key in all[2]) {\n staticMap[key] = [all[2][key][0].slice(), emptyParam];\n }\n this.#matchers[method] = [\n all[0],\n all[1].map((list) => Array.isArray(list) ? list.slice() : 0),\n staticMap\n ];\n }\n if (path === \"/*\" || path === \"*\") {\n const handlerData = [handler, {}];\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addWildcard(m, handlerData);\n }\n } else {\n this.#addWildcard(method, handlerData);\n }\n return;\n }\n const data = this.#relocateMap[path];\n if (!data) {\n throw new Error(`Path ${path} is not registered`);\n }\n for (const [indexes, map] of data) {\n if (method === METHOD_NAME_ALL) {\n for (const m in this.#matchers) {\n this.#addPath(m, path, handler, indexes, map);\n }\n } else {\n this.#addPath(method, path, handler, indexes, map);\n }\n }\n }\n buildAllMatchers() {\n return this.#matchers;\n }\n match = match;\n};\nvar buildInitParams = ({ paths }) => {\n const RegExpRouterWithMatcherExport = class extends RegExpRouter {\n buildAndExportAllMatchers() {\n return this.buildAllMatchers();\n }\n };\n const router = new RegExpRouterWithMatcherExport();\n for (const path of paths) {\n router.add(METHOD_NAME_ALL, path, path);\n }\n const matchers = router.buildAndExportAllMatchers();\n const all = matchers[METHOD_NAME_ALL];\n const relocateMap = {};\n for (const path of paths) {\n if (path === \"/*\" || path === \"*\") {\n continue;\n }\n all[1].forEach((list, i) => {\n list.forEach(([p, map]) => {\n if (p === path) {\n if (relocateMap[path]) {\n relocateMap[path][0][1] = {\n ...relocateMap[path][0][1],\n ...map\n };\n } else {\n relocateMap[path] = [[[], map]];\n }\n if (relocateMap[path][0][0].findIndex((j) => j === i) === -1) {\n relocateMap[path][0][0].push(i);\n }\n }\n });\n });\n for (const path2 in all[2]) {\n all[2][path2][0].forEach(([p]) => {\n if (p === path) {\n relocateMap[path] ||= [[[]]];\n const value = path2 === path ? \"\" : path2;\n if (relocateMap[path][0][0].findIndex((v) => v === value) === -1) {\n relocateMap[path][0][0].push(value);\n }\n }\n });\n }\n }\n for (let i = 0, len = all[1].length; i < len; i++) {\n all[1][i] = all[1][i] ? [] : 0;\n }\n for (const path in all[2]) {\n all[2][path][0] = [];\n }\n return [matchers, relocateMap];\n};\nvar serializeInitParams = ([matchers, relocateMap]) => {\n const matchersStr = JSON.stringify(\n matchers,\n (_, value) => value instanceof RegExp ? `##${value.toString()}##` : value\n ).replace(/\"##(.+?)##\"/g, (_, str) => str.replace(/\\\\\\\\/g, \"\\\\\"));\n const relocateMapStr = JSON.stringify(relocateMap);\n return `[${matchersStr},${relocateMapStr}]`;\n};\nexport {\n PreparedRegExpRouter,\n buildInitParams,\n serializeInitParams\n};\n", "// src/router/smart-router/index.ts\nimport { SmartRouter } from \"./router.js\";\nexport {\n SmartRouter\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/index.ts\nimport { TrieRouter } from \"./router.js\";\nexport {\n TrieRouter\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/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 hasChildren = (children) => {\n for (const _ in children) {\n return true;\n }\n return false;\n};\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 #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\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 }\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 const len = parts.length;\n let partOffsets = null;\n for (let i = 0; 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 this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n }\n this.#pushHandlerSets(handlerSets, 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 this.#pushHandlerSets(handlerSets, 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 if (matcher instanceof RegExp) {\n if (partOffsets === null) {\n partOffsets = new Array(len);\n let offset = path[0] === \"/\" ? 1 : 0;\n for (let p = 0; p < len; p++) {\n partOffsets[p] = offset;\n offset += parts[p].length + 1;\n }\n }\n const restPathString = path.substring(partOffsets[i]);\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n if (hasChildren(child.#children)) {\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 this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n if (child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n params,\n node.#params\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n const shifted = curNodesQueue.shift();\n curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\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", "export { verifyJwtSignedUrl } from \"@hot-updater/js\";\n\nimport type { RequestEnvContext as BaseRequestEnvContext } from \"@hot-updater/plugin-core\";\n\nimport {\n type CloudflareWorkerDatabaseEnv,\n d1WorkerDatabase,\n} from \"../cloudflareWorkerDatabase\";\nimport {\n type CloudflareWorkerStorageConfig,\n type CloudflareWorkerStorageEnv,\n r2WorkerStorage,\n} from \"../r2WorkerStorage\";\n\nexport type { CloudflareWorkerDatabaseEnv, CloudflareWorkerStorageEnv };\n\nexport interface CloudflareWorkerRuntimeEnv\n extends CloudflareWorkerDatabaseEnv, CloudflareWorkerStorageEnv {}\n\nexport type RequestEnvContext<TEnv = CloudflareWorkerRuntimeEnv> =\n BaseRequestEnvContext<TEnv>;\n\nexport const d1Database = <\n TContext extends RequestEnvContext<CloudflareWorkerRuntimeEnv> =\n RequestEnvContext<CloudflareWorkerRuntimeEnv>,\n>() => d1WorkerDatabase<TContext>();\n\nexport const r2Storage = <\n TContext extends RequestEnvContext<CloudflareWorkerRuntimeEnv> =\n RequestEnvContext<CloudflareWorkerRuntimeEnv>,\n>(\n config: CloudflareWorkerStorageConfig<TContext>,\n) => r2WorkerStorage<TContext>(config);\n", "import {\n DEFAULT_ROLLOUT_COHORT_COUNT,\n type SnakeCaseBundle,\n} from \"@hot-updater/core\";\nimport type {\n Bundle,\n DatabaseBundleQueryWhere,\n HotUpdaterContext,\n PaginationOptions,\n RequestEnvContext,\n} from \"@hot-updater/plugin-core\";\nimport {\n calculatePagination,\n createDatabasePlugin,\n createDatabasePluginGetUpdateInfo,\n} from \"@hot-updater/plugin-core\";\n\ntype D1Result<T> = {\n results?: T[];\n};\n\ntype D1PreparedStatement = {\n bind: (...values: unknown[]) => {\n all: <T>() => Promise<D1Result<T>>;\n first: <T>() => Promise<T | null>;\n run: () => Promise<unknown>;\n };\n};\n\ntype D1Like = {\n prepare: (sql: string) => D1PreparedStatement;\n};\n\nexport interface CloudflareWorkerDatabaseEnv {\n DB: D1Like;\n}\n\ninterface CloudflareWorkerDatabaseConfig<\n TContext extends RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n> {\n getDb: (context?: HotUpdaterContext<TContext>) => D1Like;\n}\n\ntype QueryConditions = DatabaseBundleQueryWhere;\n\ninterface BuildQueryResult {\n sql: string;\n params: unknown[];\n}\n\nfunction buildWhereClause(\n conditions: QueryConditions | undefined,\n): BuildQueryResult {\n if (!conditions) {\n return { sql: \"\", params: [] };\n }\n\n const clauses: string[] = [];\n const params: unknown[] = [];\n\n if (conditions.channel) {\n clauses.push(\"channel = ?\");\n params.push(conditions.channel);\n }\n\n if (conditions.platform) {\n clauses.push(\"platform = ?\");\n params.push(conditions.platform);\n }\n\n if (conditions.enabled !== undefined) {\n clauses.push(\"enabled = ?\");\n params.push(conditions.enabled ? 1 : 0);\n }\n\n if (conditions.id?.in) {\n if (conditions.id.in.length === 0) {\n clauses.push(\"1 = 0\");\n } else {\n clauses.push(`id IN (${conditions.id.in.map(() => \"?\").join(\", \")})`);\n params.push(...conditions.id.in);\n }\n }\n\n if (conditions.id?.eq) {\n clauses.push(\"id = ?\");\n params.push(conditions.id.eq);\n }\n\n if (conditions.id?.gt) {\n clauses.push(\"id > ?\");\n params.push(conditions.id.gt);\n }\n\n if (conditions.id?.gte) {\n clauses.push(\"id >= ?\");\n params.push(conditions.id.gte);\n }\n\n if (conditions.id?.lt) {\n clauses.push(\"id < ?\");\n params.push(conditions.id.lt);\n }\n\n if (conditions.id?.lte) {\n clauses.push(\"id <= ?\");\n params.push(conditions.id.lte);\n }\n\n if (conditions.targetAppVersionNotNull) {\n clauses.push(\"target_app_version IS NOT NULL\");\n }\n\n if (conditions.targetAppVersion !== undefined) {\n if (conditions.targetAppVersion === null) {\n clauses.push(\"target_app_version IS NULL\");\n } else {\n clauses.push(\"target_app_version = ?\");\n params.push(conditions.targetAppVersion);\n }\n }\n\n if (conditions.targetAppVersionIn) {\n if (conditions.targetAppVersionIn.length === 0) {\n clauses.push(\"1 = 0\");\n } else {\n clauses.push(\n `target_app_version IN (${conditions.targetAppVersionIn\n .map(() => \"?\")\n .join(\", \")})`,\n );\n params.push(...conditions.targetAppVersionIn);\n }\n }\n\n if (conditions.fingerprintHash !== undefined) {\n if (conditions.fingerprintHash === null) {\n clauses.push(\"fingerprint_hash IS NULL\");\n } else {\n clauses.push(\"fingerprint_hash = ?\");\n params.push(conditions.fingerprintHash);\n }\n }\n\n const whereClause =\n clauses.length > 0 ? ` WHERE ${clauses.join(\" AND \")}` : \"\";\n\n return { sql: whereClause, params };\n}\n\nfunction parseTargetCohorts(value: unknown): string[] | null {\n if (!value) return null;\n if (Array.isArray(value)) {\n return value.filter((item): item is string => typeof item === \"string\");\n }\n if (typeof value === \"string\") {\n try {\n const parsed = JSON.parse(value) as unknown;\n if (Array.isArray(parsed)) {\n return parsed.filter(\n (item): item is string => typeof item === \"string\",\n );\n }\n } catch {\n return null;\n }\n }\n return null;\n}\n\nfunction transformRowToBundle(row: SnakeCaseBundle): Bundle {\n return {\n id: row.id,\n channel: row.channel,\n enabled: Boolean(row.enabled),\n shouldForceUpdate: Boolean(row.should_force_update),\n fileHash: row.file_hash,\n gitCommitHash: row.git_commit_hash,\n message: row.message,\n platform: row.platform,\n targetAppVersion: row.target_app_version,\n storageUri: row.storage_uri,\n fingerprintHash: row.fingerprint_hash,\n metadata: row?.metadata ? JSON.parse(row.metadata as string) : {},\n rolloutCohortCount:\n (row.rollout_cohort_count as number | null) ??\n DEFAULT_ROLLOUT_COHORT_COUNT,\n targetCohorts: parseTargetCohorts(row.target_cohorts as unknown),\n };\n}\n\nconst resolveDbFromContext = (\n context?: RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n) => {\n const db = context?.env?.DB;\n\n if (!db) {\n throw new Error(\n \"d1WorkerDatabase requires env.DB in the hot updater context.\",\n );\n }\n\n return db;\n};\n\nexport const d1WorkerDatabase = <\n TContext extends RequestEnvContext<CloudflareWorkerDatabaseEnv> =\n RequestEnvContext<CloudflareWorkerDatabaseEnv>,\n>() =>\n createDatabasePlugin<CloudflareWorkerDatabaseConfig<TContext>, TContext>({\n name: \"d1WorkerDatabase\",\n factory: (config) => {\n const queryAll = async <TRow>(\n sql: string,\n params: unknown[] = [],\n context?: HotUpdaterContext<TContext>,\n ): Promise<TRow[]> => {\n const result = await config\n .getDb(context)\n .prepare(sql)\n .bind(...params)\n .all<TRow>();\n return result.results ?? [];\n };\n\n const queryFirst = async <TRow>(\n sql: string,\n params: unknown[] = [],\n context?: HotUpdaterContext<TContext>,\n ): Promise<TRow | null> => {\n const result = await config\n .getDb(context)\n .prepare(sql)\n .bind(...params)\n .first<TRow>();\n return result ?? null;\n };\n\n const queryBundlesForUpdateInfo = async (\n conditions: QueryConditions,\n context?: HotUpdaterContext<TContext>,\n ): Promise<Bundle[]> => {\n const { sql: whereClause, params } = buildWhereClause(conditions);\n const rows = await queryAll<SnakeCaseBundle>(\n `\n SELECT * FROM bundles\n ${whereClause}\n `,\n params,\n context,\n );\n\n return rows.map(transformRowToBundle);\n };\n\n const getTargetAppVersionsForUpdateInfo = async (\n {\n platform,\n channel,\n minBundleId,\n }: {\n platform: Bundle[\"platform\"];\n channel: string;\n minBundleId: string;\n },\n context?: HotUpdaterContext<TContext>,\n ): Promise<string[]> => {\n const rows = await queryAll<{ target_app_version: string }>(\n `\n SELECT target_app_version\n FROM bundles\n WHERE channel = ?\n AND platform = ?\n AND enabled = 1\n AND id >= ?\n AND target_app_version IS NOT NULL\n GROUP BY target_app_version\n `,\n [channel, platform, minBundleId],\n context,\n );\n\n return rows.map((row) => row.target_app_version);\n };\n\n return {\n getUpdateInfo: createDatabasePluginGetUpdateInfo({\n listTargetAppVersions: getTargetAppVersionsForUpdateInfo,\n getBundlesByTargetAppVersions(\n { platform, channel, minBundleId },\n targetAppVersions,\n context,\n ) {\n return queryBundlesForUpdateInfo(\n {\n enabled: true,\n platform,\n channel,\n id: {\n gte: minBundleId,\n },\n targetAppVersionIn: targetAppVersions,\n },\n context,\n );\n },\n getBundlesByFingerprint(\n { platform, channel, minBundleId, fingerprintHash },\n context,\n ) {\n return queryBundlesForUpdateInfo(\n {\n enabled: true,\n platform,\n channel,\n id: {\n gte: minBundleId,\n },\n fingerprintHash,\n },\n context,\n );\n },\n }),\n\n async getBundleById(bundleId, context) {\n const row = await queryFirst<SnakeCaseBundle>(\n \"SELECT * FROM bundles WHERE id = ? LIMIT 1\",\n [bundleId],\n context,\n );\n\n return row ? transformRowToBundle(row) : null;\n },\n\n async getBundles(options, context) {\n const { where, limit, orderBy } = options;\n const offset =\n ((\"offset\" in options ? options.offset : undefined) as\n | number\n | undefined) ?? 0;\n const { sql: whereClause, params } = buildWhereClause(where);\n const orderSql =\n orderBy?.direction === \"asc\"\n ? \"ORDER BY id ASC\"\n : \"ORDER BY id DESC\";\n\n const countRows = await queryAll<{ total: number }>(\n `SELECT COUNT(*) as total FROM bundles${whereClause}`,\n params,\n context,\n );\n const total = countRows[0]?.total ?? 0;\n\n const rows = await queryAll<SnakeCaseBundle>(\n `SELECT * FROM bundles${whereClause} ${orderSql} LIMIT ? OFFSET ?`,\n [...params, limit, offset],\n context,\n );\n\n const bundles = rows.map(transformRowToBundle);\n\n const paginationOptions: PaginationOptions = { limit, offset };\n return {\n data: bundles,\n pagination: calculatePagination(total, paginationOptions),\n };\n },\n\n async getChannels(context) {\n const rows = await queryAll<{ channel: string }>(\n \"SELECT channel FROM bundles GROUP BY channel\",\n [],\n context,\n );\n return rows.map((row) => row.channel);\n },\n\n async commitBundle({ changedSets }, context) {\n if (changedSets.length === 0) {\n return;\n }\n\n const db = config.getDb(context);\n\n for (const operation of changedSets) {\n if (operation.operation === \"delete\") {\n await db\n .prepare(\"DELETE FROM bundles WHERE id = ?\")\n .bind(operation.data.id)\n .run();\n continue;\n }\n\n const bundle = operation.data;\n await db\n .prepare(`\n INSERT OR REPLACE INTO bundles (\n id,\n channel,\n enabled,\n should_force_update,\n file_hash,\n git_commit_hash,\n message,\n platform,\n target_app_version,\n storage_uri,\n fingerprint_hash,\n metadata,\n rollout_cohort_count,\n target_cohorts\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `)\n .bind(\n bundle.id,\n bundle.channel,\n bundle.enabled ? 1 : 0,\n bundle.shouldForceUpdate ? 1 : 0,\n bundle.fileHash,\n bundle.gitCommitHash || null,\n bundle.message || null,\n bundle.platform,\n bundle.targetAppVersion,\n bundle.storageUri,\n bundle.fingerprintHash,\n JSON.stringify(bundle.metadata ?? {}),\n bundle.rolloutCohortCount ?? DEFAULT_ROLLOUT_COHORT_COUNT,\n bundle.targetCohorts\n ? JSON.stringify(bundle.targetCohorts)\n : null,\n )\n .run();\n }\n },\n };\n },\n })({\n getDb: resolveDbFromContext,\n });\n", "import { signToken } from \"@hot-updater/js\";\nimport type {\n HotUpdaterContext,\n RequestEnvContext,\n StoragePlugin,\n} from \"@hot-updater/plugin-core\";\n\nexport interface CloudflareWorkerStorageEnv {\n JWT_SECRET: string;\n}\n\ntype ContextResolver<TContext, TValue> = (\n context?: HotUpdaterContext<TContext>,\n) => TValue | Promise<TValue>;\n\nexport interface CloudflareWorkerStorageConfig<\n TContext extends RequestEnvContext<CloudflareWorkerStorageEnv>,\n> {\n jwtSecret?: string | ContextResolver<TContext, string>;\n publicBaseUrl: string | ContextResolver<TContext, string>;\n}\n\nconst resolveContextValue = async <TContext, TValue>(\n value: TValue | ContextResolver<TContext, TValue>,\n context?: HotUpdaterContext<TContext>,\n) => {\n return typeof value === \"function\"\n ? await (value as ContextResolver<TContext, TValue>)(context)\n : value;\n};\n\nconst resolveJwtSecretFromContext = (\n context?: RequestEnvContext<CloudflareWorkerStorageEnv>,\n) => {\n const jwtSecret = context?.env?.JWT_SECRET;\n\n if (!jwtSecret) {\n throw new Error(\n \"r2WorkerStorage requires env.JWT_SECRET in the hot updater context.\",\n );\n }\n\n return jwtSecret;\n};\n\nexport const r2WorkerStorage = <\n TContext extends RequestEnvContext<CloudflareWorkerStorageEnv> =\n RequestEnvContext<CloudflareWorkerStorageEnv>,\n>(\n config: CloudflareWorkerStorageConfig<TContext>,\n) => {\n return (): StoragePlugin<TContext> => {\n return {\n name: \"r2WorkerStorage\",\n supportedProtocol: \"r2\",\n async upload() {\n throw new Error(\n \"r2WorkerStorage does not support upload() in the worker runtime.\",\n );\n },\n async delete() {\n throw new Error(\n \"r2WorkerStorage does not support delete() in the worker runtime.\",\n );\n },\n async getDownloadUrl(storageUri, context) {\n const storageUrl = new URL(storageUri);\n\n if (storageUrl.protocol !== \"r2:\") {\n throw new Error(\"Invalid R2 storage URI protocol\");\n }\n\n const key = `${storageUrl.host}${storageUrl.pathname}`;\n const [jwtSecret, publicBaseUrl] = await Promise.all([\n resolveContextValue(\n config.jwtSecret ?? resolveJwtSecretFromContext,\n context,\n ),\n resolveContextValue(config.publicBaseUrl, context),\n ]);\n const token = await signToken(key, jwtSecret);\n const url = new URL(publicBaseUrl);\n\n url.pathname = key;\n url.search = \"\";\n url.searchParams.set(\"token\", token);\n\n return {\n fileUrl: url.toString(),\n };\n },\n };\n };\n};\n"],
|
|
6
6
|
"mappings": "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CA,MACA,UACA,SACA,SACA,SACA,QACA,WACA,QACA,SACA,SACA,QACA,WACA,QACA,YACA,YACA,SACA,cACA,UACA,eACA,WACA,eACA,iBACA,mBACA,oBACA,OACA,kBACA,WACA,4BACA,2BACA,eACA,aACA,cACA,iBACA,UACA,OACA,gBAEI,UA8GC;AAnOP,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA,IAAAC;AAAA;AACA;AACA,IAAM,gBAAgB,WAAW,SAAS;AACnC,IAAM,mBAAmB,cAAc;AACvC,KAAM,EAAE,MAAM,UAAU,aAAa;AAAA,MAC1C;AAAA,IACF;AACA,IAAM,eAAe,IAAI,QAAa;AAAA,MACpC,KAAK,cAAc;AAAA,MACnB;AAAA,MACA;AAAA,IACF,CAAC;AACM,KAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE;AACJ,IAAM,WAAW;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAAC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;A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",
|
|
7
7
|
"names": ["init_performance", "init_performance", "PerformanceMark", "init_performance", "init_performance", "init_performance", "init_performance", "clear", "count", "countReset", "createTask", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "profile", "profileEnd", "table", "time", "timeEnd", "timeLog", "timeStamp", "trace", "warn", "init_console", "init_performance", "init_console", "init_performance", "hrtime", "init_performance", "dir", "env", "count", "init_performance", "init_performance", "init_performance", "init_performance", "cwd", "hrtime", "assert", "init_process", "init_performance", "init_process", "init_performance", "init_performance", "debug", "init_performance", "debug", "init_performance", "init_performance", "init_performance", "debug", "version", "release", "match", "init_performance", "version", "init_performance", "version", "init_performance", "version", "init_performance", "version", "release", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "version", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "version", "match", "init_performance", "init_performance", "cache", "debug", "version", "init_performance", "debug", "version", "init_performance", "version", "init_performance", "init_performance", "versions", "init_performance", "versions", "init_performance", "require_valid", "init_performance", "init_performance", "version", "init_performance", "version", "init_performance", "version", "init_performance", "init_performance", "versions", "version", "init_performance", "require_semver", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "config", "options", "context", "init_performance", "semver", "init_performance", "version", "init_performance", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__copyProps", "__toESM", "require_constants", "require_debug", "require_re", "debug", "require_parse_options", "require_identifiers", "version", "release", "match", "require_parse", "require_clean", "require_inc", "require_diff", "require_major", "require_minor", "require_patch", "require_prerelease", "require_compare", "require_rcompare", "require_compare_loose", "require_compare_build", "require_sort", "require_rsort", "require_gt", "require_lt", "require_eq", "require_neq", "require_gte", "require_lte", "require_cmp", "require_coerce", "require_lrucache", "require_range", "cache", "require_comparator", "require_satisfies", "require_to_comparators", "require_max_satisfying", "versions", "require_min_satisfying", "require_min_version", "require_valid", "require_outside", "require_gtr", "require_ltr", "require_intersects", "require_simplify", "require_subset", "import_semver", "semverSatisfies", "channel", "platform", "semverSatisfies", "message", "isObjectLike", "init_performance", "context", "normalizedArgs", "makeResponse", "INIT_BUNDLE_ROLLBACK_UPDATE_INFO", "options", "context", "platform", "channel", "info", "init_performance", "init_performance", "init_performance", "init_performance", "message", "platform", "context", "channel", "match", "error", "init_performance", "plugin", "context", "init_performance", "init_performance", "init_performance", "init_performance", "context", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "init_performance", "match", "decoder", "raw", "init_performance", "context", "init_performance", "init_performance", "app", "env", "context", "init_performance", "init_performance", "init_performance", "init_performance", "context", "init_performance", "routes", "init_performance", "init_performance", "init_performance", "routes", "init_performance", "init_performance", "init_performance", "Node", "_Node", "Node", "Hono", "init_performance", "init_performance", "context", "config", "platform", "channel", "init_performance", "context", "config", "config", "context", "Hono", "env"]
|
|
8
8
|
}
|